Урок - Создание темы для Drupal 7

Главная » Курсы » Курс Drupal 7, Разработка модулей » Урок - Создание темы для Drupal 7

Обучающий онлайн курс
Drupal 7, Разработка модулей

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

Обзор

Темой, в Drupal 7, называется набор файлов необходимых для изменения внешнего вида сайта.

Регионом (областью), в Drupal 7, называется место в HTML-документе куда могут выводится блоки.

В Drupal 7 внешний вид сайта легко изменить с помощью бесплатных тем доступных на официальном сайте drupal.org или создавая собственные темы. Создание своей темы простой процесс, но требует знания в области HTML, CSS, PHP.

Необходимые инструменты

Для работы нам потребуются:

  • Модуль Devel. С помощью модуля Devel необходимо сгенерировать содержимое на сайте.
  • Текстовый редактор.
  • Браузеры. Браузеры по разному интерпретируют CSS и JS. Необходимо иметь несколько версий популярных браузеров, для тестирования темы.

Структура темы для Drupal 7.

Каждая тема в Drupal 7 должна находится в отдельной папке, внутри которой содержаться все файлы темы. Разрабатываемые темы должны находится в папке ./sites/all/themes.

Для нашей темы создаем папку ./sites/all/themes/ramech. В названии папки темы можно использовать только латинские буквы в нижнем регистре и знак подчеркивания.

Тема для Drupal 7 должна обязательно включать файл <theme_name>.info. где <theme_name> - имя темы.

Тема для Drupal 7 может включать в себя файлы стилей (*.css), файлы скриптов (*.js), файлы шаблонов (*.tpl.php), изображения и  т.д. Особенности подключения некоторых файлов рассмотрим ниже.

Файл описания темы <theme_name>.info

Создайте файл: ./sites/all/themes/ramech.info.

Файл *.info (ramech.info) должен содержать информацию о теме, и иметь примерно следующее содержимое:

; $Id:
name = Ramech theme
description = Simple theme 
version = 1.1 
core = 7.x 

regions[header] = Header 
regions[content] = Content 
regions[sidebar_first] = Sidebar first 
regions[sidebar_second] = Sidebar second 
regions[footer] = Footer 

Рассмотрим содержимое файла *.info (ramech.info) по порядку:

  • ";"(точкой с запятой) - указывает на строку комментарий. Однако строка "; $id$" являясь коментарием, также является системной строкой. Эта строка необходима, если вы будете копировать свою тему на сайт drupal.org. Сейчас оставьте е как есть.
  • name - название темы. Важно понимать различие между именем темы используемым в названии info-файла и названием темы указанным в параметре name: имя указанное в параметре name (Ramech theme) будет использоваться в панели администрирования, в списке тем, а название info-файла (в нашем случае ramech) будет использоваться как системное имя в названии функций темы (например: ramech_theme()).
  • description - описание темы.
  • version - версия темы.
  • core - версия Drupal к которой относится текущая тема. В нашем случае 7 версия.
  • regions, массив - содержит все регионы темы, в дальнейшем они будут доступны для размещения в них блоков.

Итак теперь наша тема может быть установлена. Включив ее в меню "Оформление" мы увидим стандартную разметку Drupal - практически голый текст на белом фоне.

Мы не будем рассматривать изменение темы с помощью CSS, а только с помощью шаблонов.

Файлы шаблонов *.tpl.php

Ниже приведён рисунок, который отражает "анатомию" темы в Друпале. Обратите внимание на цвет перед именем шаблона и цвет на макете сайта: наглядно показано какой шаблон за какую часть сайта отвечает. Например, html.tpl.php включает в себя разметку полной html страницы (DOCTYPE, <head>, <body>), а page.tpl.php отвечает за вывод содержимого (внутри тэга <body>). На рисунке показана тема с названием example.

Эти шаблоны используются для (X)HTML разметки и вывода PHP переменных. В некоторых случаях они могут использоваться для вывода других типов данных, например, XML или RSS. Каждый файл.tpl.php управляет выводом определённой части (темизируемых) данных. В некоторых случаях шаблоны могут перекрывать друг друга при помощи системы возможных вариантов отображения данных (suggestions).

 

Присутствие каждого файла шаблона в теме необязательно. Отсутствие шаблона приведёт лишь к использованию его стандартного прототипа из ядра Drupal 7. Огромная просьба - никогда не пишите в этих файлах объёмные фрагменты php кода. Для этого есть template.php. Файлы шаблонов должны оставаться лишь файлами шаблонов, а никак не слоем для реализации какой-либо логики.

Для того, чтобы Drupal понял, что необходимо использовать шаблон из темы, а не из ядра, достаточно скопировать его в корень темы и сбросить кэш регистра темы. В этом может помочь Drush либо Admin menu. Если не хотите разбираться с дополнительным функционалом - просто очистите кэш всего сайта.

 

Вообще, кэш регистра темы необходимо очищать в следующих ситуациях:

 

  • При добавлении новых функций Друпала в template.php
  • При изменении файла .info
  • При добавлении/удалении шаблонов .tpl.php

Файл template.php

Данный файл используется как площадка для написания php кода. Здесь необходимо описывать всю логику темы. Файл template.php не является обязательным, однако в большинстве тем он всё же присутствует как минимум для предварительной обработки данных, или создания новых переменных для файлов шаблонов .tpl.php.

 

Неважно, что именно вы пишете - свои функции, или перекрываете функции темы - всё это должно находиться в template.php. Файл начинается с открывающегося тэга <?php. Однако использовать закрывающий тэг ?> не рекомендуется по причинам возможных ошибок php.

Подтемы

По сути, подтема - эта обычная тема, но она использует файлы какой-либо другой темы. Для того, чтобы созать подтему, необходимо в .info файле указать родительскую тему, файлы которой также будут подключены к сайту. Друпал позволяет создавать подтемы на основе других подтем - т.е. создавать иерархию из тем.

Просто есть возможность использовать функционал базовой темы, доделав при этом что-нибудь своё. В таком случае можно будет базовую тему обновлять (скачивать новые релизы с д.орга) без потери работоспособности сайта.

Другие файлы

  • Обычно в теме присутствуют логотип, скриншот и фавиконка. Эти графические элементы не являются обязательными, но очень рекомендуются для добавления в тему, особенно, если эта тема выкладывается на drupal.org. Скриншот показыватся при выборе темы, и является крайне удобным для наглядного ориентирования между ними. Из личного опыта добавлю, что сайты без фавиконки некоторыми людьми не признаются качественно сделанными, какой бы суперфункционал они не имели.
  • В теме может находиться файл theme-settings.php, который используется программистами для добавления дополнительных настроек темы. Например, отличный пример добавления настроек можно посмотреть в теме Pixture Reloaded на странице /admin/appearance/settings/pixture_reloaded