Урок - Темизация материалов в Drupal 7. Шаблон node.tpl.php.

Главная » Курсы » Курс Drupal 7, Темизация для зайцев. » Урок - Темизация материалов в Drupal 7. Шаблон node.tpl.php.

Обучающий онлайн курс
Drupal 7, Темизация для зайцев.

Лицензия: Копирование запрещено.

В файле node.tpl.php задается внешний вид для данных текущего материала, таких параметров, как заголовок материала, аватар автора, и т.п.

Базовым шаблоном для материалов в Drupal 7 является файл node.tpl.php. Оригинальный файл node.tpl.php находится в ./modules/node/node.tpl.php.

Для начала скопируйте файл ./modules/node/node.tpl.php в директорию нашей темы. Замените содержимое скопированного файла на следующее:

Это шаблон из файла: <?php echo basename(__FILE__); ?><br>
<div id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
  <?php print render($title_prefix); ?>
  <?php if (!$page): ?>
    <h2<?php print $title_attributes; ?>><a href="<?php print $node_url; ?>"><?php print $title; ?></a></h2>
  <?php endif; ?>
  <?php print render($title_suffix); ?>

  <div class="content"<?php print $content_attributes; ?>>
    <?php print render($content); ?>
  </div>
</div>

И обновите КЭШ. =)

 

Обратите внимание на строку:

Это шаблон из файла: <?php echo basename(__FILE__); ?><br>

Этой командой мы указываем вывести название файла в котором выполняется текущая команда. При просмотре любого материала теперь будет выведена строка:

Это шаблон из файла: node.tpl.php

 

Для более гибкой темизации на уровне шаблонов Drupal 7 предоставляет несколько дополнительных шаблонов основанных на базовом шаблоне node.tpl.php.

  • шаблон node--<node_id>.tpl.php позволяет указать шаблон для отдельного материала.
  • шаблон node--<type>.tpl.php позволяет указать шаблон для отдельного типа материалов.

В Drupal 7 существует внутренний приоритет использования шаблонов. Например у нас есть материал с nid равным 15 и типом материала story. В таком случае список шаблонов будет следующим:

  • В первую очередь Drupal 7 будет искаться шаблон node--15.tpl.php в директории текущей темы.
  • Если не найден шаблон node--15.tpl.php, то Drupal 7 будет искаться шаблон node--story.tpl.php в директории текущей темы.
  • Если не найден шаблон node--story.tpl.php, то Drupal 7 будет искаться шаблон node.tpl.php в директории текущей темы.
  • Если же не найден и шаблон node.tpl.php, то Drupal 7 будет использовать файл шаблона ./modules/node/node.tpl.php.

Еще пример, для закрепления:

Допусти есть материалы:

  1. nid = 23, тип = page
  2. nid = 123, тип = story
  3. nid = 400, тип = story
  4. nid = 500, тип = blog

В текущей теме есть следующие шаблоны:

  1. node--page.tpl.php
  2. node--123.tpl.php
  3. node--story--400.tpl.php
  4. node--blog.tpl.php

Для материала nid=23 будет использоваться шаблон node--page.tpl.php.

Для материала nid=123 будет использоваться шаблон node--123.tpl.php.

Для материала nid=400 будет использоваться шаблон /modules/node/node.tpl.php, так как в директории текущей темы не найдено подходящих шаблонов.

Для материала nid=500 будет использоваться шаблон node--blog.tpl.php.

Замете, что файл node--story--400.tpl.php вообще не будет использоваться.

 

Практическое занятие.

Создайте два материала. Первый типа материала пусть будет типа "page", а второй - "story".

Скопируйте файл ./modules/node/node.tpl.php в директорию нашей темы под именем node--page.tpl.php bи замените содержимое на следующее:

Это шаблон из файла: <?php echo basename(__FILE__); ?><br>
<h2<?php print $title_attributes; ?>><a href="<?php print $node_url; ?>"><?php print $title; ?></a></h2>
<div class="content"<?php print $content_attributes; ?>>
  <?php print render($content); ?>
</div>

Скопируйте файл ./modules/node/node.tpl.php в директорию нашей темы под именем node--<nid>.tpl.php, где вместо <nid> вставьте nid материала типа story, который только что создали. Замените содержимое на следующее:

Это шаблон из файла: <?php echo basename(__FILE__); ?><br>
<div class="content"<?php print $content_attributes; ?>>
  <?php print render($content); ?>
</div>

Посмотрите как отображаютсмя ваши материалы с новыми шаблонами.

Ничего не изменилось? Обновите КЭШ. =)

Обратите внимание в для какие шаблоны подключаются для каждого из материалов.

 

Переменные шаблона node.tpl.php.

Углубимся в изучение базового шаблона, т.е. node.tpl.php. Ниже приведены переменные, которые доступны в шаблоне node.tpl.php в Drupal 7.

  • Основные переменные шаблона node.tpl.php:

    • $title- заголовок материала без html.
    • $content, массив - содержит поля материала.
    • $user_picture- аватар автора материала в виде, заданном в user-picture.tpl.php.
    • $date- отформатированная дата создания материала.
    • $name- имя автора материала.
    • $node_url- ссылка на материал.
    • $display_submitted- содержит информацию о том, публиковать или нет информацию о времени публикации и авторе.
    • $submitted- информация о времени публикации и авторе.
    • $classes- строка css классов, применяемых к текущему материалу.
    • $title_prefix, массив - содержит, информацию для вывода перед заголовком.
    • $title_suffix, массив - содержит, информацию для вывода после заголовка.
  • Дополнительные переменные шаблона node.tpl.php:

    • $node- полный материал.
    • $type- тип материала.
    • $comment_count- число комментариев к материалу.
    • $uid- ID автора материала.
    • $created- время создания материала в формате Unix timestamp.
    • $classes_array- массив, содержащий css стили материала.
    • $zebra- указывает четный ("even") или нечетный ("odd") материал.
    • $id - ID материала.
  • Статусы шаблона node.tpl.php:

    • $view_mode- режим просмотра ('full', 'teaser' и т.д.)
    • $teaser- если истина, то режим анонса.
    • $page- если истина, то режим полного материала.
    • $promote- если истина, то материал отображается на главной странице.
    • $sticky- если истина, то материал закреплен сверху.
    • $status- если истина, то материал опубликован.
    • $comment- если истина, то комментарии включенны.
    • $readmore- если истина, то анонс не включает в себя весь материал.
    • $is_front- если истина, то это главная страница.
    • $logged_in- если истина, то просматривает авторизованный пользователь.
    • $is_admin - если истина, то просматривающий администратор.