Как вывести в body отдельные стили для каждой ноды или термина?

Уже 2й день гуглю по Друпал сайтам и блогам, не могу найти такой информации:
как в шаблоне page.tpl.php вывести через перемененную <?php print $body_classes; ?> класс текущей страницы или термина, например (хотя как раз страницы views имеют свой стиль в body)
Надо решение под Drupal 6.

Все что находил на просторах интернета было не рабочее. Буду рад любой информации, а то надоело плодить шаблоны page-taxonomy-term-ХХ.tpl.php и page-node-ХХХ.tpl.php

Коментувати

Увійдіть або зареєструйтесь, щоб додати коментар

Коментарі

Посмотрите в сторону hook_preprocess_* хуков, например, [theme_name]_preprocess_page в template.php, в которых вы сможете определить свою переменную в массиве $variables, а потом получить ее в page.tpl.php. Я правильно понял?

Пример можно посмотреть в теме acquia_marina http://drupal.org/project/acquia_marina

Переменная $body_classes устанавливается в template.php -> function phptemplate_preprocess_page

спасибо, через acquia_marina нашел решение тут

под себя немного подкорректировал код, а именно убрал точку и кавычки «» если такие присутствуют в урл

function тема_preprocess_page(&$vars, $hook) {
$uri_path = trim($_SERVER['REQUEST_URI'], '/');
$uri_bits = explode('/', $uri_path);
if ($uri_bits[0] == '') {
$body_id = 'front';
} else {
$body_id = str_replace(array('/', '_', '.', '%C2%BB', '%C2%AB'), array('-', '-', '-', '', ''), $uri_path); // use dashes to replace slashes in the URI
}
$body_id = 'page-'.$body_id; // add 'page-' to the front of the id
$vars['body_id'] = $body_id;
}

Единственное напрягает то что если урл у новости длинный, тогда и id длинное.
удобнее было бы все же node-id term-id

function тема_preprocess_page(&$vars, $hook) {
$body_classes = array();
$body_classes[] = ($vars['logged_in']) ? 'logged-in' : 'not-logged-in';
$body_classes[] = ($vars['is_front']) ? 'front' : 'not-front';
if (isset($vars['node'])) {
$body_classes[] = ($vars['node']) ? 'full-node' : '';
$body_classes[] = (($vars['node']->type == 'forum') || (arg(0) == 'forum')) ? 'forum' : '';
$body_classes[] = ($vars['node']->type) ? 'node-type-'. $vars['node']->type : '';
$body_classes[] = 'node-nid-'. $vars['node']->nid;
}
else {
$body_classes[] = (arg(0) == 'forum') ? 'forum' : '';
}
$vars['body_classes'] = implode(' ', $body_classes);
}

Спасибо.

Нашел еще как выводить текущий id термина при просмотре полной ноды, tid-xx
function тема_preprocess_page(&$vars, $hook) {
if (module_exists('taxonomy') && $vars['node']->nid) {
foreach (taxonomy_node_get_terms($vars['node']) as $term) {
$vars['body_classes'] = $vars['body_classes'] . ' tid-' . $term->tid;
}
}
}

Но вот как выводить tid на странице термина не нашел.
а для того чтобы самому дописать, знаний рнр, пока маловато