如何从drupal 7中的节点id获取词汇表id?

时间:2014-09-06 19:55:12

标签: drupal drupal-7 drupal-theming

我需要知道如何从drupal 7中page.tpl.php中的节点id获取词汇id。

我的drupal中有这种结构。

e.g。有两种内容类型

  1. 内容1
  2. 内容2

  3. Content1的词汇名为" vocab1"和" vocab2"。

  4. 现在" Vocab1"有条款" term1"和" term2"。
  5. 和" Vocab2"有条款" term3"和" term4"。
  6. 类似地

    1. Content2的词汇名为" vocab3"和" vocab4"。
    2. 现在" Vocab3"有条款" term5"和" term6"。
    3. 和" Vocab4"有条款" term7"和" term8"。
    4. 现在我使用内容类型添加节点" Content2"选择" term7"。现在我尝试在page.tpl.php上获取该词汇表ID,但我没有找到任何解决方案。

      我搜索过,但我找不到任何解决方案。

      有一个解决方案

      $field = $node->field_my_vocabulary; $terms_en = $field['en'];

      但是为了获得这种方式,我需要手动放置字段" field_my_vocabulary"。但是" field_my_词汇"每个节点可以是不同的,因为相关的词汇表将是不同的。我想动态地想要这个。

      drupal 6中有一个函数,即taxonomy_node_get_terms(),用于返回与节点id相关的所有术语,但这个函数在drupal 7中不可用。

      请帮忙。

      谢谢, 苏尼。

1 个答案:

答案 0 :(得分:1)

以下有两种方法可以在page.tpl.php中获取它们:

  • 您可以使用arg函数
  • 从网址获取nid

示例:

if (arg(0) == 'node' && is_numeric(arg(1))) {
  $node = node_load(arg(1)); // we get the node object
  //dpm($node);

  // standart way
  $nodeTermTid = $node->field_MY_TERM_FIELD['und'][0]['tid'];
  $nodeTerm = taxonomy_term_load($nodeTermTid);

  // with entity_metadata_wrapper function (from Entity API)
  $nodeWrapper = entity_metada_wrapper('node', $node);
  $nodeTerm = $nodeWrapper->field_MY_TERM_FIELD->value();

  $vocabularyId = $nodeTerm->vid; // if yoy need a vocabulary id
  // or 
  $vocabularyMachineNmae = $nodeTerm->vocabuary_machine_name;
}

示例:

$node = menu_get_object();
if ($node != null) {
  // standart way
      $nodeTermTid = $node->field_MY_TERM_FIELD['und'][0]['tid'];
      $nodeTerm = taxonomy_term_load($nodeTermTid);

      // with entity_metadata_wrapper function (from Entity API)
      $nodeWrapper = entity_metada_wrapper('node', $node);
      $nodeTerm = $nodeWrapper->field_MY_TERM_FIELD->value();

      $vocabularyId = $nodeTerm->vid; // if yoy need a vocabulary id
      // or 
      $vocabularyMachineNmae = $nodeTerm->vocabuary_machine_name;
}