function views_plugin_style_summary_taxonomy::render in Views Hacks 6
Same name and namespace in other branches
- 7 views_summary_taxonomy/views_plugin_style_summary_taxonomy.inc \views_plugin_style_summary_taxonomy::render()
File
- views_summary_taxonomy/
views_plugin_style_summary_taxonomy.inc, line 58
Class
Code
function render() {
$argument = $this->view->argument[$this->view->build_info['summary_level']];
$this->terms = array();
foreach ($this->view->result as $row) {
$this->terms[$row->{$argument->base_alias}] = $row;
}
// Get the taxonomy tree. We're going to heavily modify it...
$tree = taxonomy_get_tree($this->options['taxonomy']);
// Reverse sort it: children at the front.
usort($tree, array(
$this,
'term_depth_compare',
));
// Add the tid as key.
$tree = array_combine(array_map(array(
$this,
'term_tid',
), $tree), $tree);
// Initialize counts as copied from view results.
array_walk($tree, array(
$this,
'term_count',
), $argument);
// Accumulate children counts.
// This works without recursion because the array is sorted in reverse.
foreach ($tree as $tid => $term) {
foreach ($term->parents as $pid) {
if (!$pid) {
continue;
}
// parent tid = 0 means no parent
$tree[$pid]->aggregate_count += $term->aggregate_count;
}
}
// Now we're ready to render it!
$url_options = array();
if (!empty($this->view->exposed_raw_input)) {
$url_options['query'] = $this->view->exposed_raw_input;
}
$item_list = array();
$children = array();
foreach ($tree as $tid => $term) {
if (!$term->aggregate_count && $this->options['hide_zero']) {
continue;
}
$args = $this->view->args;
$args[$argument->position] = $argument
->summary_argument($this->terms[$tid]);
$item = array();
$path = $this->view
->get_url($args);
if (!empty($this->options['path']) && module_exists('token')) {
$path = drupal_strtolower(token_replace($this->options['path'], 'taxonomy', $term));
}
$item['data'] = l($term->name, $path, $url_options);
if (!empty($this->options['count'])) {
$count = !empty($argument->definition['accept depth modifier']) && empty($this->options['count_no_aggregate']) ? $term->aggregate_count : $term->count;
$item['data'] .= ' (' . $count . ')';
}
$item['weight'] = $term->weight;
if (isset($children[$tid])) {
usort($children[$tid], array(
$this,
'item_weight_compare',
));
$item['children'] = $children[$tid];
}
foreach ($term->parents as $pid) {
if (!$pid) {
$item_list[] = $item;
}
else {
$children[$pid][] = $item;
}
}
}
usort($item_list, array(
$this,
'item_weight_compare',
));
return theme('item_list', $item_list);
}