Конвертим тему из Drupal 6 в семерку. Что новенького?

Этот пост посвящен конвертации темы из Друпал 6 в Друпал 7. Как же это сделать наименее безболезненно? Итак:
http://drupal.org/node/550722 - Drupal7 theme guide. На момент написания этого поста - пустая страничка. Ну, не очень то и хотелось :)
http://drupal.org/update/theme/6/7 - конвертим темы из D6 в D7

Вскрытие D7 темы - Garland

Первое, что бросается в глаза - все вызовы типа

<?php
echo $tabs;
?>

превратились в

<?php
echo render($tabs);
?>

Что это значит? Это значит, что прямо в теме, в последнюю секунду перед выводом сайта, можно быстро и без плясок с бубном наложить изменения на большую часть данных.

<?php
unset($tabs[1]); //скрыли таб 'edit' на ноде
?>

Жалко, что многие элементы в темплейт попадают уже отрендеренными, и теперь надо помнить, что $breadcrumb, $title, $primary_nav надо выводить через print, а $tabs и все регионы - через print render();

Финт ушами - hide()

Вспомним, как в D6 удобнее и быстрее всего рендерить содержимое ноды.

<?php
print $content
?>

При малейших необходимых изменениях в выводе, например если какой-то элемент в $content нам на сайте показывать не нужно, обычно все скатывалось к работе с объектом $node:

<?php
print $node->content['body']['#value']
?>
<?php
echo $node -> field_delivery[0]['safe'];
?>

Что нам предлагают в D7?

Вот иллюстрация:


  <?php
    // Скрываем комменты и линки, рендерим $content, а комменты и линки - потом, ниже.
    hide($content['comments']);
    hide($content['links']);
    print render($content);
  ?>

<?php print render($content['links']); ?>

<?php print render($content['comments']); ?>.

посмотрим, будет ли это удобно в реальном использовании.

Больше блоков!

Ох, вот это мне по душе. Теперь нет переменной $mission, теперь нет переменной $footer_message, теперь нет переменной $search_box. Хочешь миссию сайта вывести - есть регион highlight, суем туда блок с миссией. Хочешь поисковую форму - суем в любой регион поиск.

Теперь контент страницы - тоже, блок! И выводится он по умолчанию в регион content (который является обязательным регионом для всех тем). И можно теперь вывод главной страницы засунуть в левую колонку, а можно в регион content сверху и снизу насовать разных блоков. Гибко, единообразно.

Появилось понятие "скрытых регионов". Они определяются в .info файле темы через regions_hidden[] = и не показываются на странице блоков в админке - но могут использоваться модулями для вывода какой-то информации. Пока полезность под вопросом, надо пробовать.

остальные изменения (которых 32 штуки всего) - можно посмотреть здесь: http://drupal.org/update/theme/6/7

Blog categories: Drupal