Создаю свою первую тему для 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.

page.tpl.php - производит впечатление самого главного файла, который в основном и отвечает за внешний вид сайта. Его и разгребаю более подробно на предмет понятия идеи шаблонизации в drupal.
На первый взгляд всё очень похоже на применяемое в моей CMS. Вывод значений переменных тупо расставлен в местах, где нужно автору шаблона.
Итак. Замеченные переменные в page.tpl.php:

 

Переменная Предполагаемое значение
$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 - флаг нечётный/чётный

 

Теперь собственно можно приступить к постановке задачи и созданию темы.

RSSAdd to Google

Обсуждение:

  • Автор: (Анонимус)
  • Интересная у вас подача материала «мысли вслух». :-) Два дня ищу информацию для начинающих по Друпалу, вот только сейчас начинаю соображать благодаря вашим статьям.

  • Отправлено:
  • Автор: Dmitrii Varvashenia
  • За спасибо - спасибо :)

    Я пытался сохранить (в первую очередь для себя) процесс вникания в drupal: теперь можно сказать, что материал подан очень сумбурно и народ, который более-менее освоили друпал эти мысли злобно критикует. Но если всё переписать, то начинающим вообще ничего не будет понятно. А сам я таким был буквально год назад (сейчас я уже наверно "продвинутый новичёк" :)

  • Отправлено:
  • Автор: (Анонимус)
  • Тема: Вопрос
  • Dmitrii не подскажите как можно оттемизировать форму на странице node/add/xxx? Хотя бы в каком направлении копать.. Неделю уже сижу, не могу понять. В PHP не силен, догадываюсь что без него не обойтись.

  • Отправлено:
  • Автор: Dmitrii Varvashenia
  • Тема: темизация форм
  • Если не нужно ломать html - тогда ограничиться CSS - как показывает практика  голым CSS'ом можно сделать довольно прилично. Особенно если наплевать на IE6 :)

    Если нужно глобально всё поменять - тогда изучать From API и PHP.
    Для начала почитать можно это http://drupal.org/node/350634 и курить вот это http://drupal.org/node/204270

    Есть неплохой шанс найти готовый модуль под конкретную задачу.
    Сам я в form api глубоко не ходил - решал через css и/или готовые модули

    PS: Если нужно просто добавить пару-тройку полей - делать это через cck

  • Отправлено:
  • Автор: (Анонимус)
  • Тема: RE: темизация форм
  • Мне в принципе менять ничего и не надо, просто настроить CSS. :)Спасибо за ссылки. Буду разбираться.

  • Отправлено:
  • Автор: Анонимус
  • Тема: Вопрос
  • Да качество отличное
  • Отправлено:

Как вам материальчик? *



















Тема:

Мысль:

Как звать-то:

Почта:

PS: Комментарии публикуются только после проверки модератором.

PPS: E-mail'ы не публикуются.

* обязательные поля