Темизация Drupal 7

Как вы могли заметить, у блога новый дизайн. Сделанный мной с нуля - отфотошопленный, сверстанный и преобразованный в тему для Drupal 7. Темизация в drupal 7 с одной стороны упростилась (по крайней мере на мой взгляд), с другой стороны - возникли некоторые сложности с новым API, которое существенно изменилось по сравнению с предыдущей версией друпала. Если вы начинаете разбираться с созданием тем для Друпала сразу с 7 ветки - вам, вероятно, будет не так уж и  сложно, особенно если вы уже знакомы с терминологией друпала и его устройством.

На первый взгляд структура темы не изменилась. Но это не так.

Это структура темы Drupal 6. По сути, файловая структура темы для друпала 7 ветки осталась той же (кроме того, что block.tpl.php стал не обязательным файлом, а содержание page.tpl.php значительно отличается от 6 версии, но об этом позже).

Во-первых, стал обязательным регион Content. Содержимое страницы теперь выводится как блок, который должен располагаться в этом регионе.

Во-вторых, упразднены некоторые переменные: $taxonomy, $mission (введен регион Hilited), $footer_message (выводится в регионе Footer), $help (введен регион Help). Соответственно, если этих регионов нет в вашей теме - надо добавить их в файл youtheme.info и затем вставить в нужное место файла page.tpl.php.

В-третьих, изменилась конструкция внедрения в шаблон регионов:

Так было в Drupal 6:

      <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">if (!empty(span><span style="color: rgb(0, 0, 187);">$rightspan><span style="color: rgb(0, 119, 0);">)): span><span style="color: rgb(0, 0, 187);">?>span>span><br>        <div id="sidebar-right" class="column sidebar"><br>          <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">print span><span style="color: rgb(0, 0, 187);">$rightspan><span style="color: rgb(0, 119, 0);">; span><span style="color: rgb(0, 0, 187);">?>span>span><br>        </div> <!-- /sidebar-right --><br>      <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">endif; span><span style="color: rgb(0, 0, 187);">?>span>span>

Так стало в  Drupal 7

      <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">if (span><span style="color: rgb(0, 0, 187);">$sidebar_secondspan><span style="color: rgb(0, 119, 0);">): span><span style="color: rgb(0, 0, 187);">?>span>span><br>        <div id="sidebar-second" class="column sidebar"><div class="section region"><br>          <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">print span><span style="color: rgb(0, 0, 187);">$sidebar_secondspan><span style="color: rgb(0, 119, 0);">; span><span style="color: rgb(0, 0, 187);">?>span>span><br>        </div></div> <!-- /.section, /#sidebar-second --><br>      <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">endif; span><span style="color: rgb(0, 0, 187);">?>span>span>

Кстати, переменные сайдбаров получили более логичные и понятные имена: вместо $right и $left - $sidebar_first и $sidebar_second. Так же изменились имена переменных prymary links и secondary links, теперь это $main_menu и $secondary_menu.

В Друпал 6 код вывода навигации выглядел так:

<div id="menu"><br>  <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">if (isset(span><span style="color: rgb(0, 0, 187);">$secondary_linksspan><span style="color: rgb(0, 119, 0);">)) { span><span style="color: rgb(0, 0, 187);">?>span>span><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">print span><span style="color: rgb(0, 0, 187);">themespan><span style="color: rgb(0, 119, 0);">(span><span style="color: rgb(221, 0, 0);">'links'span><span style="color: rgb(0, 119, 0);">, span><span style="color: rgb(0, 0, 187);">$secondary_linksspan><span style="color: rgb(0, 119, 0);">, array(span><span style="color: rgb(221, 0, 0);">'class' span><span style="color: rgb(0, 119, 0);">=> span><span style="color: rgb(221, 0, 0);">'links'span><span style="color: rgb(0, 119, 0);">, span><span style="color: rgb(221, 0, 0);">'id' span><span style="color: rgb(0, 119, 0);">=> span><span style="color: rgb(221, 0, 0);">'subnavlist'span><span style="color: rgb(0, 119, 0);">)); span><span style="color: rgb(0, 0, 187);">?>span>span><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">} span><span style="color: rgb(0, 0, 187);">?>span>span><br>  <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">if (isset(span><span style="color: rgb(0, 0, 187);">$primary_linksspan><span style="color: rgb(0, 119, 0);">)) { span><span style="color: rgb(0, 0, 187);">?>span>span><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">print span><span style="color: rgb(0, 0, 187);">themespan><span style="color: rgb(0, 119, 0);">(span><span style="color: rgb(221, 0, 0);">'links'span><span style="color: rgb(0, 119, 0);">, span><span style="color: rgb(0, 0, 187);">$primary_linksspan><span style="color: rgb(0, 119, 0);">, array(span><span style="color: rgb(221, 0, 0);">'class' span><span style="color: rgb(0, 119, 0);">=> span><span style="color: rgb(221, 0, 0);">'links'span><span style="color: rgb(0, 119, 0);">, span><span style="color: rgb(221, 0, 0);">'id' span><span style="color: rgb(0, 119, 0);">=> span><span style="color: rgb(221, 0, 0);">'navlist'span><span style="color: rgb(0, 119, 0);">)) span><span style="color: rgb(0, 0, 187);">?>span>span><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">} span><span style="color: rgb(0, 0, 187);">?>span>span><br></div>

В Друпал 7 блок навигации имеет следующий вид:

<div id="menu"><br>  <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">if (isset(span><span style="color: rgb(0, 0, 187);">$secondary_menuspan><span style="color: rgb(0, 119, 0);">)) { span><span style="color: rgb(0, 0, 187);">?>span>span><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">print span><span style="color: rgb(0, 0, 187);">themespan><span style="color: rgb(0, 119, 0);">(span><span style="color: rgb(221, 0, 0);">'links'span><span style="color: rgb(0, 119, 0);">, span><span style="color: rgb(0, 0, 187);">$secondary_menuspan><span style="color: rgb(0, 119, 0);">, array(span><span style="color: rgb(221, 0, 0);">'class' span><span style="color: rgb(0, 119, 0);">=> span><span style="color: rgb(221, 0, 0);">'links'span><span style="color: rgb(0, 119, 0);">, span><span style="color: rgb(221, 0, 0);">'id' span><span style="color: rgb(0, 119, 0);">=> span><span style="color: rgb(221, 0, 0);">'subnavlist'span><span style="color: rgb(0, 119, 0);">)); span><span style="color: rgb(0, 0, 187);">?>span>span><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">} span><span style="color: rgb(0, 0, 187);">?>span>span><br>  <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">if (isset(span><span style="color: rgb(0, 0, 187);">$main_menuspan><span style="color: rgb(0, 119, 0);">)) { span><span style="color: rgb(0, 0, 187);">?>span>span><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">print span><span style="color: rgb(0, 0, 187);">themespan><span style="color: rgb(0, 119, 0);">(span><span style="color: rgb(221, 0, 0);">'links'span><span style="color: rgb(0, 119, 0);">, span><span style="color: rgb(0, 0, 187);">$main_menuspan><span style="color: rgb(0, 119, 0);">, array(span><span style="color: rgb(221, 0, 0);">'class' span><span style="color: rgb(0, 119, 0);">=> span><span style="color: rgb(221, 0, 0);">'links'span><span style="color: rgb(0, 119, 0);">, span><span style="color: rgb(221, 0, 0);">'id' span><span style="color: rgb(0, 119, 0);">=> span><span style="color: rgb(221, 0, 0);">'navlist'span><span style="color: rgb(0, 119, 0);">)) span><span style="color: rgb(0, 0, 187);">?>span>span><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"><?php span><span style="color: rgb(0, 119, 0);">} span><span style="color: rgb(0, 0, 187);">?>span>span><br></div>

Это лишь часть изменений. Полный список можно изучить здесь и в переводе здесь. Единственное, чего я в официальном описании изменений не обнаружила - упоминания структурных элементов. Файл page.tpl.php более не содержит основных html тэгов (doctype, html, head and body). Основная структура html содержится в файле html.tpl.php в папке modules/system. Таким образом в шаблоне page.tpl.php находится только контент-содержащая часть кода страницы.

Более того, больше не используется шаблон box.tpl.php (полностью удален), а также не обязателен файл block.tpl.php.

В целом, процесс создания темы вовсе не сложный. Моя тема, конечно, еще требует доработки, но в целом - полностью работоспособна. Возможно, что через некоторое время, когда она будет полностью "причесана", эта тема отправится на drupal.org в паблик.