Drupal - блоки дисплея согласно таксономии узла называют идентификатор

Я просто пытаюсь ограничить видимость блока узлами, которые имеют определенный идентификатор таксономии. Я использую этот отрывок...:

<?php
  $term_id_to_trigger_show_block = 109;

  if ((arg(0) == 'node') && is_numeric(arg(1))) {
    $terms = taxonomy_node_get_terms(arg(1));
    foreach($terms as $term) {
      if ($term->tid == $term_id_to_trigger_show_block) {
         return TRUE;
      }
    }
  }
?>

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

Какие-либо идеи?

Удачи

1
задан james6848 7 July 2010 в 10:11
поделиться

1 ответ

Похоже, что в drupal6 taxonomy_node_get_tree() принимает узел, а не nid.

Самый простой способ изменить ваш код:

<?php
  $term_id_to_trigger_show_block = 109;

  if ((arg(0) == 'node') && is_numeric(arg(1))) {
    $node = node_load(arg(1));
    $terms = taxonomy_node_get_terms($node);
    foreach($terms as $term) {
      if ($term->tid == $term_id_to_trigger_show_block) {
         return TRUE;
      }
    }
  }
?>

node_load() кэширует узлы в памяти, так что это не будет большим ударом по производительности.

Но подождите! Вы можете усовершенствовать это еще больше...

menu_get_item() получит текущий загруженный пункт меню, когда объект узла будет загружен, он вызовет taxonomy_node_get_terms(). Таким образом, вы можете упростить до:

<?php
  $term_id_to_trigger_show_block = 109;
  $object = get_menu_item();

  if (isset($object->taxonomy)) {
    foreach($object->taxonomy as $term) {
      if ($term->tid == $term_id_to_trigger_show_block) {
         return TRUE;
      }
    }
  }
?>

Это получит другие типы объектов, которые имеют объект taxonomy, что может вызвать некоторую путаницу, если так, то вставьте arg(0) == 'node' обратно.

2
ответ дан 2 September 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: