Drupal - отображать блоки в соответствии с идентификатором термина таксономии узла - PullRequest
1 голос
/ 07 июля 2010

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

<?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 Ответ

2 голосов
/ 07 июля 2010

Похоже, что в 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;
      }
    }
  }
?>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...