как получить значения полей ссылок на сущности типа контента на странице узла?


На моем веб-сайте есть тип контента под названием 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, которые связаны с певцом.

Спасибо

Author: M a m a D, 2013-12-13

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, и вы можете распечатать из него любую информацию, которую хотите распечатать.

 5
Author: Aniruddhsinh, 2013-12-13 09:13:48

Один из подходов заключается в прямом обращении к таблице полей, на которую ссылается ссылка. например:

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;
    }
  }
}
 1
Author: xurshid29, 2013-12-13 07:15:25