0

Хорошей практикой разработки является разделение кода и оформления. В этом отлично помогают функции темизации 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;
?>

 

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

Оставить комментарий

comments powered by HyperComments