Разнесение $terms в шаблоне темы по $terms_$vid
Как известно, $terms в шаблоне темы node.tpl.php содержит темизированные теги, относящиеся к данной записи. Содержит все без разбора, даже если из разных словарей.
На моём сайте есть словарь "Авторы", и выводить автора текста среди кучи других тегов мне показалось идеологически неверным. Подумав, я решил, что удобнее всего мне будет разложить $terms на переменные вида $terms_N, где N -- id словаря.
В файл template.php темы добавил хук phptemplate_preprocess_node. В основном он стандартный, только дописал несколько строк в конце:
function phptemplate_preprocess_node(&$variables) { $node = $variables['node']; if (module_exists('taxonomy')) { $variables['taxonomy'] = taxonomy_link('taxonomy terms', $node); } else { $variables['taxonomy'] = array(); } if ($variables['teaser'] && $node->teaser) { $variables['content'] = $node->teaser; } elseif (isset($node->body)) { $variables['content'] = $node->body; } else { $variables['content'] = ''; } $variables['date'] = format_date($node->created); $variables['links'] = !empty($node->links) ? theme('links', $node->links, array('class' => 'links inline')) : ''; $variables['name'] = theme('username', $node); $variables['node_url'] = url('node/'. $node->nid); $variables['terms'] = theme('links', $variables['taxonomy'], array('class' => 'links inline')); $variables['title'] = check_plain($node->title); // Flatten the node object's member fields. $variables = array_merge((array)$node, $variables); // Display info only on certain node types. if (theme_get_setting('toggle_node_info_'. $node->type)) { $variables['submitted'] = theme('node_submitted', $node); $variables['picture'] = theme_get_setting('toggle_node_user_picture') ? theme('user_picture', $node) : ''; } else { $variables['submitted'] = ''; $variables['picture'] = ''; } // Clean up name so there are no underscores. $variables['template_files'][] = 'node-'. $node->type; // Ниже раскладываем $terms по $terms_N if (count($node->taxonomy)==0) {return;} foreach ($node->taxonomy as $term) { $taxonomies[$term->vid][]=$term; } $original_taxononomy=$node->taxonomy; while (list ($v,$t) = each ($taxonomies)) { $node->taxonomy=$t; $variables["taxonomy_$v"] = taxonomy_link('taxonomy terms', $node); $variables["terms_$v"] = theme('links', $variables["taxonomy_$v"], array('class' => 'links inline')); } $node->taxonomy=$original_taxonomy; }
После активизации этого хука в шаблонах нод появляются дополнительные переменные $terms_1,2,...,N с темизированными и разложенными по словарям тегами записей. Применение -- по вкусу.
- Войдите на сайт для отправки комментариев