Drupal 7: Определение шаблонов для форм. Темизация форм
Как определить собственные шаблоны и использовать их в построении контента было рассмотрено в статье "Drupal 7: определение шаблонов tpl.php и функций темизации. Хуки темизации”. Распространенной задачей является кастомная темизация форм. Для этого существует замечательный механизм темизации при помощи шаблонов *.tpl.php
Шаблон для формы определяется очень просто:
/**
* Implements hook_theme().
*/
function MYMODULE_theme() {
return array(
'login_form' => array( // id формы
'render element' => 'form', // указываем что элемент для отображения - форма
'template' => 'custom_form_template', // имя шаблона custom_form_template.tpl.php
),
);
}
В качестве ключа массива указывается id формы, который можно узнать через Firebug, функции devel, либо через имя функции которая определяет форму.
Теперь в шаблоне можно выводить содержимое формы по отдельности:
<div class="wrapper">
<div class="left">
<?php print render($form['login']); ?>
</div>
<div class="right">
<?php print render($form['password']); ?>
</div>
<?php print drupal_render_children($form); ?>
</div>
Для того что бы отобразить отдельный элемент нужно воспользоваться функцией render и передать массив с определенным элементом. Также обязательно в форме нужно использовать drupal_render_children($form) для отображения элементов формы которые небыли выведены отдельным рендером.
Комментарии
Спасибо, статья помогла, очень!
Добрый день.
Не совсем понятно, что такое render_element.
Если не трудно, поясните, пожалуйста, как с ним работать и за что он отвечает.
render element - это обычный массив с набором данных который ковертируется в HTML через функции drupal_render() и render().
Например:
Здесь полная документация о том какие свойства поддерживаются в render элементах - Render Arrays in Drupal 7
В контексте статьи render element это форма. Которую тоже можно вывести при помощи render() функции.
ох, не получается что-то.
Я правильно понял?
У меня есть модуль, в него я пишу:
затем в папке tempate создаю файл user_node_form.tpl.php?
Никак не реагирует(
Добрый день! Вместо block-user-node-form-user-node-form-block должен быть ID формы с нижними подчеркиваниям. Например user_node_form. ID формы можно найти в разметке,