Оформление шаблонов вывода модулей.

Главные вкладки

Аватар пользователя Verkhunov Verkhunov 19 декабря 2007 в 14:32

Здравствуйте.
Возможно ли в Drupal для каждого шаблона вывода модуля создать собственный html шаблон?

Т.е. например создаю тему. В области контента вывожу код статичной страницы.
А как для модуля например таксономии, вывести список тизеров с нужным мне html и css классами?

Комментарии

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 19 декабря 2007 в 15:24

Как правило, они имеют уникальное сочетание id и сlass. Переоформляйте через css. Посмотрите, как это сделано в стандартных темах оформления, например, Garland.

Аватар пользователя edhel edhel 19 декабря 2007 в 16:18

Возможно ли в Drupal для каждого шаблона вывода модуля создать собственный html шаблон?

В теме можно перекрыть те "шаблоны вывода", которые сделаны в модуле с помощью функций theme_XXX. Например, в модуле comment есть функция theme_comment_controls. Чтобы ее перекрыть в теме в template.php пишем:

function mytheme_comment_controls($form) {
return _phptemplate_callback('comment_controls', array('form' => $form));
}

И пишем в теме файл comment_controls.tpl.php. Вроде так.

А как для модуля например таксономии, вывести список тизеров с нужным мне html и css классами?

Конкретно в этом примере не получится. Т. к. theme-функции не используются, а в теме только их можно перекрыть.

Аватар пользователя edhel edhel 21 декабря 2007 в 10:46

Посоветовали функцию theme_taxonomy_term_page.
Пока не разобрался как ей воспользоваться.
Подскажите, пожалуйста.

Не получится. Нету функции theme_taxonomy_term_page и поэтому ее нельзя перекрыть в теме. Есть функция taxonomy_term_page, ее не перекрыть.

Аватар пользователя edhel edhel 21 декабря 2007 в 15:04

Формируется функцией taxonomy_term_page, которая вызывает функцию taxonomy_render_nodes:

<?php
function taxonomy_render_nodes($result) {
$output = '';
if (db_num_rows($result) > 0) {
while ($node = db_fetch_object($result)) {
$output .= node_view(node_load($node->nid), 1);
}
$output .= theme('pager', NULL, variable_get('default_nodes_main', 10), 0);
}
else {
$output .= ''. t('There are currently no posts in this category.') .'';
}
return $output;
}
?>

Эта функция просто выводит список ТИЗЕРОВ нод. Саму эту функцию не заменить, но можно изменить вывод самих тизеров в теме: node.tpl.php используя перменную $teaser. Если не хочется менять отображение всех тизеров, а только тизеров для страниц taxonomy/term/TID, то в node.tpl.php можно написать условие:

<?php
if (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(3)) && $teaser) {
print "[ $node->title ]"; // новый шаблон
} else {?>

здесь старый шаблон из node.tpl.php

<?php }?>

Аватар пользователя Verkhunov Verkhunov 21 декабря 2007 в 20:25

Спасибо получилось. возникло пару вопросов:
1) А можно все тизеры завернуть в тег ul
2) Массив доступных ссылок $links, а можно ли получить только ссылку read more?