как получить значения полей ссылок на сущности типа контента на странице узла?
На моем веб-сайте есть тип контента под названием singer
, и у каждого певца может быть name
и некоторая другая информация. существует другой тип контента под названием songs
, и каждая песня имеет два поля: (1) Имя файла (2). Я также создал поле ссылки на сущность в songs
, которое связывает песню с певцом. очевидно, что у каждого певца может быть любое количество связанных песен.
Я перечислил певцов на странице, и на ней должна отображаться информация о каждом певце и songs
, когда пользователь нажимает на любом из певцов. это мой template.tpl.php
function MyThere_preprocess_page(&$variables)
{
if (isset($variables['node']))
{
switch ($variables['node']->type)
{
case "singer":
$suggest = "page__node__singers";
$variables['theme_hook_suggestions'][] = $suggest;
$variables['name'] = t($variables['node']->field_singer_name['und'][0]['value']);
break;
}
}
}
Я могу получить значение полей singer
(используя kpr()
), но я не знаю, как получить значение полей songs
, которые связаны с певцом.
Спасибо
2 answers
Вы можете попробовать эту штуку
// $node represents the node object
// field_songs is the field used in content type to reference field.
$wrapper = entity_metadata_wrapper('node', $node);
$songs = $wrapper->field_songs->value();
Теперь в $songs
у вас будет каждый объект songs, и вы можете распечатать из него любую информацию, которую хотите распечатать.
Один из подходов заключается в прямом обращении к таблице полей, на которую ссылается ссылка. например:
function MyThere_preprocess_page(&$variables)
{
if (isset($variables['node']))
{
switch ($variables['node']->type)
{
case "singer":
$suggest = "page__node__singers";
$variables['theme_hook_suggestions'][] = $suggest;
$variables['name'] = t($variables['node']->field_singer_name['und'][0]['value']);
// I don't know what is your table's structure, correct ref.field table col names. Because they are wrong in my example:)
$query = db_select('node', 'n')''
$query->join('field_data_field_MY_REF_FIELD_NAME', 'fdfr',
'n.nid = fdfr.field_MY_REF_FIELD_NAME_NID');
$query->fields('n', array('nid'));
$query->condition('n.nid', $variables['node']->nid, '=');
$query->execute()->fetchCol();
break;
}
}
}