web-dev-qa-db-ja.com

ノードページのコンテンツタイプのエンティティ参照フィールドの値を取得する方法

私のWebサイトにはsingerというコンテンツタイプがあり、すべての歌手はnameおよびその他の情報を持っている可能性があります。 songsと呼ばれる別のコンテンツタイプがあり、すべての曲には2つのフィールドがあります:(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フィールドの値を取得する方法がわかりません。

ありがとう

1
M a m a D

あなたはこれを試すことができます

// $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各曲オブジェクトがあり、そこから印刷したい情報を印刷できます。

5
Aniruddhsinh

1つのアプローチは、参照されるフィールドテーブルを直接クエリすることです。例えば。:

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
xurshid29