Как известно, $terms в шаблоне темы node.tpl.php содержит темизированные
теги, относящиеся к данной записи. Содержит все без разбора, даже если из
разных словарей.
На моём сайте есть словарь "Авторы", и выводить автора текста среди кучи
других тегов мне показалось идеологически неверным. Подумав, я решил, что
удобнее всего мне будет разложить $terms на переменные вида $terms_N, где
N -- id словаря.
В файл template.php темы добавил хук phptemplate_preprocess_node. В
основном он стандартный, только дописал несколько строк в конце:
<?php
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
foreach ($node->taxonomy as $term) {
$taxonomies[$term->vid][]=$term;
}
if (
count($taxonomies)==0) {return;}
$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 с темизированными и разложенными по словарям
тегами записей. Применение -- по вкусу.
Комментарии
Спасибо
Axel, прикрути пожалуйста плюсовалку постов