2013-05-29 5 views
0

Борясь с проблемой отображения дочерних терминов для данного таксономического термина в блоке, я, наконец, наткнулся на кусок кода, который точно что я хочу hereDrupal - Показать дочерние условия текущего термина, только если существуют дочерние элементы - необходима модификация кода

в соответствии с инструкциями, я добавил следующее к моему template.php

function themename_child_terms($vid = 1) { 
    if(arg(0) == 'taxonomy' && arg(1) == 'term') { 
    $children = taxonomy_get_children(arg(2), $vid); 
     if(!$children) { 
     $custom_parent = taxonomy_get_parents(arg(2)); 
      $parent_tree = array(); 
      foreach ($custom_parent as $custom_child => $key) { 
      $parent_tree = taxonomy_get_tree($vid, $key->tid); 
      } 
      $children = $parent_tree; 
     } 

    $output = '<ul>'; 
    foreach ($children as $term) { 
     $output .= '<li>'; 
     $output .= l($term->name, 'taxonomy/term/' . $term->tid); 
     $output .= '</li>'; 
    } 
    $output .= '</ul>'; 

    return $output; 
    } 
} 

Я тогда создал блок и добавил:

<?php // $vid is the vocabulary id. 
    print themename_child_terms($vid = 1); 
?> 

Это показывает детальные условия текущего термина отлично. Тем не менее, он показывает ВСЕ термины, которые существуют под родительским термином, даже если в этом термине нет части контента.

например. просмотра страницы со всех пунктов в Условии 1, я получаю

ребенок 1
ребенок 2
ребенок 3

правильно указаны в блоке. Но, если нет кусков контента, помеченных «дочерним 3», например, он все еще показывает этот термин в блоке. Это не очень полезно, поскольку оно связано с пустой страницей. Как мне изменить код, чтобы показывать только те дети, которые на самом деле имеют связанные с ними элементы. Поэтому, если нет детей с тегами «Child 3», тогда этот термин не будет отображаться. Это легкая модификация?

Благодарим вас за любые решения.

Ник

Работа с Drupal 6

ответ

0

Благодаря пользователя jerdiggity для размещения следующий ответ на более drupal.stackexchange here. Работает отлично.


Хм ... Я бы попробовать что-то вроде этого:

Изменить эту часть кода:

foreach ($children as $term) { 
    $output .= '<li>'; 
    $output .= l($term->name, 'taxonomy/term/' . $term->tid); 
    $output .= '</li>'; 
} 

к чему-то вроде этого:

// Avoid unnecessary "Invalid foreach" errors showing up in the log: 
if (!empty($children)) { 
    // If not empty, run the foreach loop: 
    foreach ($children as $term) { 
    // Then check to see if any nodes exist for that term id: 
    $number_of_nodes = taxonomy_term_count_nodes($term->tid); 
    // If there ARE nodes... 
    if ($number_of_nodes > 0) { 
     // ... then add them to the output: 
     $output .= '<li>'; 
     $output .= l($term->name, 'taxonomy/term/' . $term->tid); 
     $output .= '</li>'; 
    } 
    } 
} 

Надежда что помогает ... :)

Смежные вопросы