УрокНеобходимые файлы для создания шаблона. Node.tpl.php
Теперь мы поговорим о таком файле как node.tpl.php. Очень полезный файлик. Он является шаблоном для вывода всех типов материалов. Полезен для каждого сайта, так как всегда надо переписать стандартный вывод статей - иногда ссылки убрать, или, например, показывать тэги только в полной версии материала, а в сокращённой(тизере) не выводить.
Вот как строится материал по стандартному шаблону:
<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?> clear-block"> <?php print $picture ?> <?php if (!$page): ?> <h2> <a href="<?php print $node_url ?>" title="<?php print $title ?>"> <?php print $title ?> </a> </h2> <?php endif; ?> <div class="meta"> <?php if ($submitted): ?> <span class="submitted"> <?php print $submitted ?> </span> <?php endif; ?> <?php if ($terms): ?> <div class="terms terms-inline"><?php print $terms ?></div> <?php endif;?> </div> <div class="content"> <?php print $content ?> </div> <?php print $links; ?> </div>
Теперь, как всегда, остановимся на каждой из частей подробнее:
<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?> clear-block">
Здесь создаётся хтмл-контейнер для ноды (материала). В id записывается node- и её уникальный номер nid. В class запишется sticky, если при создании материала был отмечен галочкой поле "Закреплять вверху(sticky at top)". Также, если было отмечено поле "Не публиковать (not publish)", в класс материала будет добавлен текст node-unpublished.
Едем дальше:
<?php print $picture ?> <?php if (!$page): ?> <h2> <a href="<?php print $node_url ?>" title="<?php print $title ?>"> <?php print $title ?> </a> </h2> <?php endif; ?>
Первая строка понятна всем я думаю - выводится аватарка пользователя, создавшего материал. А вот дальше происходит следущее: если мы просматриваем анонс материала, но нам выводится его заголовок со ссылкой на полную версию материала. А если мы на полной версии, то заголовок не показывается (т.к. в page.tpl.php переменной $title он уже выводится).
<div class="meta"> <?php if ($submitted): ?> <span class="submitted"> <?php print $submitted ?> </span> <?php endif; ?>
Вот тут в класс meta выводится одной строкой имя автора и дата создания материала.
<?php if ($terms): ?> <div class="terms terms-inline"><?php print $terms ?></div> <?php endif;?>
Тут таким же образом, как и в предыдущем куске кода, выводятся тэги материала.
После чего следует вывод контента:
<div class="content"> <?php print $content ?> </div>
И, наконец, выводятся ссылки материала (читать далее, количество комментариев, ссылка на комментарии, количество просмотров и т.п.):
<?php print $links; ?>
Как всегда по традиции, в завершении материала список доступных переменных файла node.tpl.php
Стандартные переменные
- $title - заголовок материала
- $content - содержимое материала. Может быть полным или сокращённым, в зависимости от переменной $teaser (она определяет, анонс это или нет)
- $picture - аватарка пользователя, написавшего материал
- $date - дата создания материала
- $links - ссылки, такие как "Читать далее", "Добавить комментарий" и т.п.
- $name - имя пользователя, создавшего материал
- $node_url - прямой путь к текущему материалу
- $terms - список тэгов, формирующихся через таксономию (модуль taxonomy)
- $submitted - вывод автора и даты создания материала одной строкой
Другие переменные:
- $node - полный объект материала
- $type - тип материала. Например, blog, page и т.д.
- $comment_count - количество комментариев к статье
- $uid - уникальный идентификатор пользователя, написавшего статью
- $created - дата опубликования статьи. Выводится в таком виде: date('Y - G:i',$node->created), где вместо Y - G:i можно вставить любой php формат даты
- $zebra - принимает значение 'odd' или 'even' в зависимости от чётности материала
- $id - уникальный идентификатор статьи. При создании новой статьи всегда увеличивается на единицу
Статусные переменные (флаги):
- $teaser - возвращает значение ИСТИНА, если выводится анонс статьи
- $page - возвращает значение ИСТИНА, если выводится полная статья
- $promote - возвращает значение ИСТИНА, если стоит галочка напротив "Помещать на главную (promote on front page)"
- $sticky - возвращает значение ИСТИНА, если стоит галочка напротив "Закрепить статью сверху"
- $status - возвращает значение ИСТИНА, если статья опубликована
- $comment - возвращает значение ИСТИНА, если комментарии к статье разрешены
- $readmore - возвращает значение ИСТИНА, если статья непомещается полностью в её анонс
- $is_front - возвращает значение ИСТИНА, если статья находится на главной странице
- $logged_in - возвращает значение ИСТИНА, если пользователь авторизирован
- $is_admin - возвращает значение ИСТИНА, если пользователь имеет права администранора
Мы практически закончили основные файлы шаблонов. Остался последний - box.tpl.php. А потом мы наконец доберёмся до крутых фишек друпала :)
- SplasH
- 11.08.2010
- 5407
Комментарии
Спасибо за материал, про большинство переменных даже и не знал
без проблем, всегда рад помочь :)
Спасибо за интересный блог, давно хотел научиться делать шаблоны для drupal`а, подписался :)
:) спасибо. Можешь в закладки добавить, я тут буду выкладывать очень много мощных фишек для создания тем. И всегда вопрос задать можно :)
Спасибо) а можешь подсказать на примере как вставлять в tpl.php картинку автора ноды только обработанную в imagecache.
подскажи пожалуйста как вставлять в тпл.пхп аваторку автора ноды, только уже обработанную в imagecache))) спасибо)
смотри, в файле node.tpl.php аватарка пользователя выводится таким образом:
Вместо этого напиши следущий код:
Такой вот вопрос вскочил: "В шаблоне материала переменная $title только один раз может выводиться?" :-)
Нет, можно выводить ее столько сколько хочется, на это нет ограничения, ведь в переменной $title, если вы посмотрите, хранится только текст, даже не ссылка, а вы ведь в ноде можете любое количество текста выводить ;)
Тогда продолжим :-)
Сделал панели там вот такой код
В итоге получаеться
Т.е. второй раз переменная $title не выводиться, пробовал подставлять другие переменные, которых здесь нет, они выводяться
Вот такой курьез получаеться :-)
Попробовал Ваш вариант в node.tpl
Результат тот же
[code]
Барсетка №2
[/code]
Где-то ошибка) У меня всё работает. Может, изза того что ты используешь это в панели? А вообще, сделай
и посмотри как выводится заголовок
Вывело примерно это
[code]object(stdClass)#193 (42) { ["nid"]=> string(2) "35" ["type"]=> string(5) "karta" ["language"]=> string(2) "ru" ["uid"]=> string(1) "1" ["status"]=> string(1) "1" ["created"]=> string(10) "1296373682" ["changed"]=> string(10) "1296373682" ["comment"]=> string(1) "0" ["promote"]=> string(1) "0" ["moderate"]=> string(1) "0" ["sticky"]=> string(1) "0" ["tnid"]=> string(1) "0" ["translate"]=> string(1) "0" ["vid"]=> string(2) "35" ["revision_uid"]=> string(1) "1" ["title"]=> NULL ["teaser"]=> string(5679) "
[/code]
К сожалению для меня это темный лес пока
Забавно.. Видишь в строке есть следующее: ["title"]=> NULL - это значит что $node->title существует, но там ничего нет. А вот чтобы заголовок вообще не выводился - я такое впервые вижу. Надо разбираться уже "на месте", т.е. хотя бы шаблон твой посмотреть, если есть возможность
Шаблон называеться Deco скачать можешь по
Не нашёл в теме ничего блокирующее тайтл. У тебя ещё всё та же проблема осталась?
Привет! Я нашел в панелях есть флажки для вывода тайтла, но тогда он выводиться дважды.
Придеться первый тайтл убирать из шаблона ручками :-)
Ну да,в этом и заключается темизация =)
Еще одна проблема вылезла :-(
На локалке вроде все нормально, а на сервере при активации любой другой темы, кроме стандартной, появляется море строчек с нехорошим не руским словом Warning примерно такого содержания
[code]
Warning: MySQL server has gone away query: INSERT INTO dogwatchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (1, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:473817:\"MySQL server has gone away\nquery: UPDATE dogcache_update SET data = 'a:25:{s:10:\\"admin_menu\\";a:10:{s:5:\\"title\\";s:19:\\"Administration menu\\";s:10:\\"short_name\\";s:10:\\"admin_menu\\";s:10:\\"dc:creator\\";s:3:\\"sun\\";s:11:\\"api_version\\";s:3:\\"6.x\\";s:17:\\"recommended_major\\";s:1:\\"1\\";s:16:\\"supported_majors\\";s:3:\\"1,3\\";s:13:\\"default_major\\";s:1:\\"1\\";s:14:\\&qu in /home/ooostekl/public_html/vitrag/includes/database.mysqli.inc on line 135
[/code]
Таких строчек очень много. Что бы это значило?
Сначала почисти кэш. Потом запусти крон. Потом апдейт. Это мой любимый круг, после которого многие проблемы такого рода исчезают
Крон не хочет запускаться :-(
Пишет
[code]
Ошибка запуска Cron.
[/code]
Вот тебе и ошибка) Почитай на друпал.ру о ошибках запуска крона. Там может быть огромное количество причин. Скорее всего, какой-то модуль ложит его. Может, самописный) Отключай модули по одному и запускай крон, так и добирёшься до истины. Либо, как я уже говорил - почитай друпал.ру, там много у кого были похожие ошибки
Вы правы, поотключал модули пока не добился стабильной работы, потом включил по одному только самые необходимые. Пока вроде все работает нормально. :-)
P.S. Но после Joomla такое поведение Drupala меня озадачило :-( , там такого не наблюдалось
Просто Друпал требует чуть больших знаний в программировании, чем Джумла. В пример можно привести винду и линукс - переход на вторую ось требует более продвинутых знаний, чем у обычного "виндопользователя" :)
спасибо! мне прикодилось!
Подскажите пожалуйста у меня стоит тема acquia marina с сайта drupal.org. в ней нет файла Node.tpl.php
т.е. мне неоткуда убрать этот код:
if ($terms):print $termsendif;Тут таким же образом, как и в предыдущем куске кода, выводятся тэги материала.
т.е. я хочу чтобы у меня не отображались тэги. а они отображаются. А файла то нет такого... Что делать подскажите пожалуйста?
взять файл node.tpl.php из темы Garland. Положить к себе в корень темы, удалить лишнюю переменную, почистить кэш. Вот и всё
тут вообще есть кто живой?
Есть :)
Комментировать