Хорошей практикой разработки является разделение кода и оформления. В этом отлично помогают функции темизации drupal.
Темизация в drupal 7. Theme функции в своем модуле.
Одно из основных правил разработки на drupal (да впрочем и на любой другой платформе) - разделение кода (логики) и шаблонов отображения. Если мы посмотрим в шаблоны тем, то увидим, что в файлах node.tpl.php или page.tpl.php практически нет php кода, за исключением строк <?php print render($variable); ?> Все остальное - html верстка, которую можно запросто переопределить в своей теме. С этим может справиться любой верстальщик, и ему не потребуется вникать во все дебри програмистских наворотов.
Часто, при написании своих модулей, про функции темизации и собственные шаблоны забывают.
Приведу пример:
После выполнения AJAX запроса нам нужно показать пользователю окошко с текстом и двумя кнопками. Верстка должна быть типа такой:
<div class="window">
<div class="message">Текстовое сообщение пользователю</div>
<div class="btn">Первая кнопка</div>
<div class="btn">Вторая кнопка</div>
</div>
Мы можем жестко забить HTML в свой модуль типа:
<?php
$output = '<div class="window"><div class="message">Текстовое сообщение пользователю</div><div class="btn">Первая кнопка</div><div class="btn">Вторая кнопка</div></div>';
return $output;
?>
Но что если по дизайну нам нужно изменить верску - мы будем опять лезть в модуль и искать на одной из 500 строк этот html? Или если наш модуль будет использоваться на разных сайтах с разным оформлением? Неужели придется менять кодовую базу.
Вот здесь на помощь приходят функции темизации.
Объявляем в своем модуле, что у нас будет новая функция темизации:
function MYMODULE_theme() {
return array(
'mymodule_popup' => array(
'variables' => array( // переменные которые будут доступны в шаблоне
),
// имя шаблона, в данном случае custom_template.tpl.php в корне модуля
'template' => 'mymodule-popup',
),
);
}
Здесь мы сказали друпалу, что у нас есть новая функция темизации mymodule_popup и шаблон для нее хранится в файле mymodule-popup.tpl.php. Этот файл будет искаться сначала в папке с действующей темой, а потом в папке с модулем.
В файл шаблона theme функции мы запишем наш html.
Теперь, чтобы нарисовать окошко, нам достаточно вызвать функцию темизации по её имени.
<?php
$output = theme('mymodule_popup');
return $output;
?>
В файлах с темами шаблоны обычно динамические. Например, нам нужно, чтобы текст сообщения в окошке менялся. Изменим нашу функцию темизации для drupal.
<?php
function MYMODULE_theme() {
return array(
'mymodule_popup' => array(
'variables' => array( // переменные которые будут доступны в шаблоне
'message' => NULL,
),
// имя шаблона, в данном случае custom_template.tpl.php в корне модуля<br />
'template' => 'mymodule-popup',
),
);
}
?>
Теперь мы можем обращаться к переменной $message из нашего шаблона. Изменим шаблон окошка в файле mymodule-popup.tpl.php
<div class="window"><div class="message"><?php print $message; ?></div><div class="btn">Первая кнопка</div><div class="btn">Вторая кнопка</div></div>
Из кода модуля мы будем теперь вызывать функцию темизации с параметрами:
<?php
$output = theme('mymodule_popup',array('message'=>'Текстовое сообщение для вывода'));
return $output;
?>
Вот так легко и просто делать темизацию в своем модуле. Это хорошая практика кодинга для друпал, рекомендую всем ей пользоваться.
Оставить комментарий