Создаю свою первую тему для Drupal. Часть 2.
Ну что. Наконец приступим. Локальный друпал уже установлен, настроен и даже работает в рамках эксперимента по воспроизведению чужого опыта. Теперь берём самую мелкую в килобайтах тему (у меня это bluemarine) и копируем ей под другим именем test из папки themes/bluemarine в папку sites/all/themes. Теперь иду в админку в темы и пытаюсь ей там найти и включить. Хм.. Нету.. А - забыл переименовать bluemarine.info в test.info. Переименовываю, рефрешу страницу - уррря - появилась. Только название осталось старое. Беру файлик test.info и подкручиваю параметр name до нужного мне состояния в виде Test theme. Включаю и наслаждаюсь свежепереименованной темой :)
Кишки друпаловой темы (ближе к практике)
Первый этап пройден. Теперь самое время открыть все файлы темы и попытаться понять чего-же они делаю.
Начну с *.tpl.php:
block.tpl.php - формирует блоки (block). Назначает div'у классы block и block-тип_модуля_к_которому_блок_относится и формирует id'шник для блока в виде block-$block->module-$block->delta
Вся информация о блоке храниться в классе $block
box.tpl.php - формирует боксы (box)
Очень похоже, что производится вызов шаблона для каждого блока. Замечены переменные $title - заголовок блока и $content - содержимое блока.
node.tpl.php - походу отвечает за формирование различного типа нод. Моя тема запихивает их в div и безусловно назначает ему класс node и исходя из состояния ноды дополнительно может назначить классы sticky и/или node-unpublished.
| Переменная | Предполагаемое значение |
| $language->language | Код языка страницы |
| $language->dir | Направление языка (слева направо или справа налево) |
| $head_title | содержимое тэга TITLE |
| $head | HMTL-заголовки |
| $styles | CSS стили |
| $scripts | JavaScript |
| $logo | Урл картинки логотипа. Вводится в админке. |
| $front_page | Урл главной страницы. Настраивается в админке. |
| t('Home') | Тайтл (заголовок) главной страницы |
| $site_name | Название сайта |
| $site_sloga | Слоган сайта |
| $secondary_links | Блок дополнительных ссылок Для вывода используется конструкция вида: theme('links', $secondary_links, array('class' => 'links', 'id' => 'subnavlist')) |
| $primary_links | Блок основных ссылок. Для формирования используется функция: theme('links', $primary_links, array('class' => 'links', 'id' => 'navlist')) |
| $header | Хидер страницы |
| $left | Левый сайдбар (часть) страницы |
| $mission | Миссия сайта. Вводится в админке. |
| $breadcrumb | Хлебные крошки. Ещё не нашёл чем формируются. |
| $title | Заголовок страницы |
| $tabs | Какие-то вкладки. Пока не знаю что за оно. Скорее всего от админки. |
| $show_messages | Флаг наличия messages. Скорее всего сообщения админки |
| $messages | Собственно сообщения админки |
| $help | Явно помощь |
| $content | Скорее всего содержимое страницы |
| $feed_icons | Подозреваю что ссылка на всякие RSS'ы |
| $right | Правый сайдбар (часть) сайта |
| $footer_message | Мысль в подвале сайта |
| $footer | Собственно подвал сайта |
| $closure | Пока загадка природы - подозреваю, что это набор закрывающих тегов в конце страницы |
style.css и style-rtl.css - собственно CSS
logo.png - логотип сайта по умолчанию для данной темы
screenshot.png - превьюшка темы
test.info - друпалопонятное описание темы.
Здесь-же задаются куски, из которых тема состоит.
Если ничего не задано, то будут использованы следующие умолчательные составные части страниц:
regions[left] = Left sidebar
regions[right] = Right sidebar
regions[content] = Content
regions[header] = Header
regions[footer] = Footer
Итак. Подведу промежуточный итог.
В шаблон лезть можно по минимуму и только в CSS. Если нужно заменить дефолтный вывод для каких-либо частей, который не поддаётся лечению в CSS, то ищем нужный нам модуль в папке modules, тырим оттудова файл название_модуля-доп_название_функции_для_навороченных_модулей.inc.php в нашу тему и переделывем всё, как нам нужно. Плюс полный список доступных переменных должен быть приведён в комментах в начале нашего свежестыренного файл. И явно существует набор базовых кусков, про которые просто тупо надо знать.
Как и следовало ожидать, нужная информация таки нашлась на сайте друпаловцев.
Темы работают на phptemplate, плюс попутно попалась ссылка на друпаловский API и список функций для применения в шаблонах. Начинаю изучать.
И таки удалось добыть список ядерных (core) *.tpl.php:
page.tpl.php - обтемливание страницы
Очень много переменных - вот их список.
block.tpl.php - управление блоками (те, которые регионы - regions[left] и т.д.) в сайдбарах
Доступные переменные:
$block - объект блока с кучей переменных
$directory - папка где лежит тема
$is_front - флаг фрон пэйджа
$id - послеовательный id блока. Скорее всего имеется ввиду какой по порядку блок выводится для всех блоков.
$block_id - аналогично $id, но сбрасывается для каждого сайдбара
$zebra - флаг нечётный/чётный
$block_zebra - то-же самое, что и $zebra, но ресетится для левого и правого сайдбаров
Есть возможность для админа добавить ссылку редактировать этот блок и настроить формирование блоков индивидуально для каждого модуля или региона (блока)
box.tpl.php - с боксом оказалось всё просто - это тупо контейнер для основной области
Доступные переменные:
$title - заголовок бокса
$content - содержимое
$region - блок, к которому относится: main, left или right
comment.tpl.php - коменты
Доступные переменные:
$author - ссылка на профайл автора
$comment (object) - объект коммента
$content - содержимое
$date - отформатированная дата коммента
$directory - папка где живёт тема
$id - последовательный id'шник комента
$is_front - флаг front cnhfybws
$links - контентные сслыки под комментом
$new - пока загадка. Translated text for 'new', if the comment is in fact new.
$picture
- картинка с ссылкой, если есть и включена
$submitted - пока загадка. Подозреваю что дата отправки коммента. Translated post information string.
$title - заголовок
$zebra - флаг нечётный/чётный
node.tpl.php - ноды
$content - содерджимое или тизер (выжимка), если требуется логикой работы
$date - отформатированная дата создания
$directory - папка темы
$id - порядковый номер ноды, если выводится списком
$is_front - флаг моры
$links - ссылки ноды
$main - (для версии до 4.6 ключительно) - устаревший флаг
$name - отформатированное имя автора
$node - объект ноды. Проперти добываются методом print_r($node).
$node_url - ссылка на ноду
$page - флаг если нода показывается сам по себе, как страница
$picture - html для картинки, если включена
$sticky - флаг "липкой" ноды
$submitted - кто и когда создал, если включён показ данных типов ноды
$taxonomy - массив терминов таксономии
$teaser - флаг сокрачённого вывода (тизер)
$terms - HTML таксономийных терминов
$title - заголовок ноды
$zebra - флаг нечётный/чётный
Теперь собственно можно приступить к постановке задачи и созданию темы.




Обзор AgeStar NSB3AS1T NAS для 3.5" SATA HDD
Комментариев и оценок: 183
Обзор AgeStar NSB3AS1T NAS для 3.5" SATA HDD - сетевого хранилища на базе 3.5" SATA HDD с возможностью подключения по USB. 10/100 Mbit, SATA 3.5"
AgeStar FUBCP USB2.0 to IDE/SATA Adapter
Комментариев и оценок: 93
AgeStar FUBCP - подключение IDE или SATA 2.5",3.5" или 5.25" устройств через USB
Обзор жесткого диска HDD 2ТБ Western Digital WD20EARS
Комментариев и оценок: 73
Краткий обзор жесткого диска HDD 2ТБ Western Digital WD20EARS-00MVWB0 с фотографиями и тестами производительности.Многофункциональное устройство Canon LaserBase MF3228
Комментариев и оценок: 52
Многофункциональное устройство Canon LaserBase MF3228. Описание, впечатления от работы, ссылка на драйвера.
AgeStar SUB2O1 2.5" SATA External Enclosure
Комментариев и оценок: 51
Обзор с картинками и тестами AgeStar SUB201 - внешней USB коробки для 2.5" SATA винчестеров.