Изменения темизации в drupal 7 (часть 2)

Продолжение первой части. Мы рассматриваем изменения в темизации drupal 7.

HTML классы генерируются через переменную

Любая тема теперь может вывести $classes из шаблона темы при рендере. Т.е. то что ранее делалось в том же zen'е через function zen_preprocess_page(&$vars, $hook), теперь достигается простым использованием в page.tpl.php такой конструкции: [php]
...
[/php]

HTML атрибуты генерируются через переменную

В любой теме вы теперь сможете использовать $attributes, $title_attributes и $content_attributes. RDF-модуль и другие модули могут добавлять важную информацию через эти переменные. Пример: [php]
>

>...

>...
[/php] Подозреваю, что основным мотивом была работа с RDF, так разрекламированная в drupal 7. На практике надо будет смотреть как с этим работать. На текущий момент я только бегло просматривал работу с темами в drupal 7 и мне сложно комментировать данное изменение с практической точки зрения.

Переменные process functions могут использоваться для любых хуков темы.

К примеру теперь можно будет назначить правило, дабы во всех меню ссылки, начинающиеся с http:/https: открывались в новом окне. Таким вот образом: [php] [/php]

Все функции тем теперь имеют унифицированный аргумент, $variables

В drupal 6 обходились через описание аргументов в hook_theme(). В drupal 7 упростили процедуру. Как было в drupal 6: [php] array( 'arguments' => array('header' => NULL, 'rows' => NULL, 'attributes' => array(), 'caption' => NULL), ), ... ); } function theme_table($header, $rows, $attributes = array(), $caption = NULL) { ... } ?> [/php] Как стало в drupal 7 [php] array( 'variables' => array('header' => NULL, 'rows' => NULL, 'attributes' => array(), 'caption' => NULL, 'colgroups' => array(), 'sticky' => TRUE), ), ... ); } function theme_table($variables) { $header = $variables['header']; $rows = $variables['rows']; $attributes = $variables['attributes']; $caption = $variables['caption']; $colgroups = $variables['colgroups']; $sticky = $variables['sticky']; ... } ?> [/php] Не знаю как вам, а мне нововведения нравятся, ввиду большей наглядности и простоты для запоминания. Вообще drupal в очень многих мелочах сделал большой шаг вперед с точки зрения удобства работы с кодом, время на сборку тем теперь обещает быть куда меньшим.

Имена функций должны начинаться имени темы

Функции в template.php теперь должны использовать соответствующее имя темы. Теперь не надо использовать phptemplate_function.

Все CSS и JavaScript файлы должны быть описаны в .info файле

В drupal6 style.css и script.js подключались автоматически. Теперь этого не будет. Требуется указывать все файлы стилей и скриптов. Опять же - это шаг к большей строгости кода.

Переименован $block->content в $content внутри block.tpl.php

В принципе, без комментариев. Хотя с этим связана довольно долгая история, с которой можно ознакомиться на drupal.org

Раздельный рендеринг шаблона

Из заголовка не понятно "о чем это". Поясню. В drupal 7 появляется замечательная функция render(). И вторая замечательная функция hide(). Что они делают - будет ясно из примера. Ниже приведен код из node.tpl.php [php]
. [/php] render() возвращает все объекты, содержащиеся в $content. Таким образом print render($content) работает как print $content в drupal 6. Когда же мы хотим вывести отдельные элементы $content, мы делаем это с помощью такого кода(для ссылок): print render($content['links']). Если нам надо спрятать отдельные элементы, мы делаем это с помощью функции hide() перед вызовом print render($content).

В ядро добавлен jQuery UI (1.7)

Файлы JQuery UI вы можете найти в misc/ui. И можете добавлять css и js из данной библиотеки через drupal_add_js() и drupal_add_css().

Партнерская программа

Кстати, для интересующихся технологиями, у нас есть партнерская программа. Если по вашей специализации:

  • вы работате над другими задачами (не создание типовых сайтов),
  • вы работаете с высокобюджетными сайтами,
  • вам хочется ковертировать обращения по вопросам "помогите с созданием сайта-визитки" в прибыль.

Тогда, добро пожаловать в партнерку :)