Настройка темы
Прислано: Leonard
вт, 18/11/2008 - 15:09
Публикую статью со своего Блога Ежа.
node.tpl.php - это файл шаблона для вывода Ваших нод (или документов). Этот шаблон определяет не только то, как Вы будете выводить саму ноду, но и то, как она будет отображаться в списке тизеров (анонсов). А ведь порою крайне необходимо делать это по-разному. Например, возьмите Ваши анонсы статей на главной странице. Вы пишете блог, и на главной странице анонсы постов блога - и под каждым таким анонсом надпись "Все записи блога". И эта надпись повторяется десять раз на главной странице - просто ужас, иголки встают дыбом. То же самое можно сказать о надписи "Добавить комментарий". Нелогично оставлять комментарий к статье, прочитав лишь её анонс. Информацию об авторе статьи тоже можно убрать с главной страницы - особенно это касается личных блогов - зачем на главной странице десять раз повторять одно и то же имя автора?
Для разного отображения тизеров и полных нод можно использовать логические переменные $page и $is_front. Переменная $is_front равна True(1) в том случае, если отображается главная страница сайта. Так как её использовать, чтобы создать шаблон для тизеров на главной страницы? Очень просто - открываю файл node.tpl.php в своей теме, и прописываю в самом его начале следующую строчку:
<?php if ($is_front): include "node-front.tpl.php"; return; endif; ?>
Таким образом я говорю Друпалу, что если я располагаюсь на главной странице, шаблон для отображения нод находится не в файле node.tpl.php, а в файле node-front.tpl.php. Создаю в той же директории файл с таким именем - после чего проще всего скопировать туда весь код из файла node.tpl.php, и убрать всё, что мне не нужно. Например, я убираю с главной страницы всё, что относится к переменной $submitted (имя автора и время добавления статьи), переменную $links (ссылки типа "Все записи блога" и "Добавить комментарий"), переменную $terms (список терминов таксономии) и так далее. Но позвольте, время добавления статьи неплохо было бы и оставить, убрать лучше просто имя автора. Но переменная $submitted всё равно не нужна, решаю я. Для отображения даты и времени существует такая замечательная функция PHP, как date(). Например, прописать вот такую строчку перед переменной $content (переменная для отображения основного содержимого Вашей статьи):
<?php print date("d.m.Y - H:i", $node->created) ?>
теперь жму на каком-нибудь термине таксономии, которые отображаются у меня теперь только на странице самой ноды - и снова вылазит та же самая проблема. Идёт перечисление всех статей, относящихся к данному термину таксономии, и снова под каждым анонсом тот же самый кошмар - ссылка "Все записи блога", "Добавить комментарий" и так далее. Ну что ж, придётся теперь воспользоваться переменной $page. Её значени равно True(1) в том случае, если Друпал отображает какую-то ноду, но никак не список нод. Итак, прописываю в начале файла node.tpl.php ещё одну строчку:
<?php if (!$page): include "node-front2.tpl.php"; return; endif; ?>
Эта строчка говорит Друпалу о том, что если Друпал отображает список анонсов нод - файл шаблона для него - не node.tpl.php, а node-front2.tpl.php (на самом деле назвать можно как угодно). И снова я всё что, мне нужно прописываю в этом новом файле шаблона. Проблема решена!
Эту статью и не только также можно найти в моём Блоге Ежа, программирующего просторы Вселенной
- Leonard's blog
- Для комментирования войдите или зарегистрируйтесь
я думаю все таки правильнее использовать api
<?php
function phptemplate_preprocess_node(&$vars, $hook) {
if($vars['is_front']) {
$vars['template_file'] = 'node-is_front';
}
}
?>- Для комментирования войдите или зарегистрируйтесь
может быть. но у задачи всегда может быть несколько решений.
А почему правильнее так как написали вы, раз уж написали - обоснуйте сами
- Для комментирования войдите или зарегистрируйтесь
Спасибо! Очень полезный материал!
- Для комментирования войдите или зарегистрируйтесь
Премного благодарен! Вы меня просто спасли!!!
- Для комментирования войдите или зарегистрируйтесь



Комментарии