You are here

function _term_reference_tree_output_list_level in Taxonomy Term Reference Tree Widget 7

Same name and namespace in other branches
  1. 8 term_reference_tree.module \_term_reference_tree_output_list_level()
  2. 7.2 term_reference_tree.widget.inc \_term_reference_tree_output_list_level()

Helper function to output a single level of the term reference tree display.

1 call to _term_reference_tree_output_list_level()
theme_term_tree_list in ./term_reference_tree.widget.inc
Themes the term tree display (as opposed to the select widget).

File

./term_reference_tree.widget.inc, line 210

Code

function _term_reference_tree_output_list_level(&$element, &$tree) {
  if (isset($tree['children']) && is_array($tree['children']) && count($tree['children']) > 0) {
    $output = '<ul class="term">';
    $settings = $element['#display']['settings'];
    $tokens_selected = $settings['token_display_selected'];
    $tokens_unselected = $settings['token_display_unselected'] != '' ? $settings['token_display_unselected'] : $tokens_selected;
    $taxonomy_term_info = entity_get_info('taxonomy_term');
    foreach ($tree['children'] as $itemno => &$item) {
      $term = $taxonomy_term_info['load hook']($item['tid']);

      // Do not output terms that do not exist.
      if ($term) {
        $uri = $taxonomy_term_info['uri callback']($term);
        $uri['options']['html'] = TRUE;
        $class = $item['selected'] ? 'selected' : 'unselected';
        $output_fragment[$term->weight][$itemno] = '<li class="' . $class . '">';
        if ($tokens_selected != '' && module_exists('token')) {
          $replace = $item['selected'] ? $tokens_selected : $tokens_unselected;
          $output_fragment[$term->weight][$itemno] .= token_replace($replace, array(
            'term' => $term,
          ), array(
            'clear' => TRUE,
          ));
        }
        else {
          $output_fragment[$term->weight][$itemno] .= l(filter_xss(entity_label('taxonomy_term', $term)), $uri['path'], $uri['options']);
        }
        if (isset($item['children'])) {
          $output_fragment[$term->weight][$itemno] .= _term_reference_tree_output_list_level($element, $item);
        }
        $output_fragment[$term->weight][$itemno] .= '</li>';
      }
    }

    // Using output fragments with weights as the array key
    // should force this into current sort order once we sort the array.
    if (isset($output_fragment)) {
      ksort($output_fragment);
      foreach ($output_fragment as $this_fragment) {
        $output .= implode('', $this_fragment);
      }
    }
    $output .= '</ul>';
    return $output;
  }
}