Перейти к основному содержанию

Message to readers

24 февраля 2022 года, Россия начала полномасштабную войну в Украине. Армия России подло вторглась в суверенное и независимое государство. Это кровавая война с десятками тысяч жертв. Российская армия разрушает Украинские города, убивает мирных жителей, насилует женщин и цинично прикрывается пропагандой.

Начав паразитировать на территории Украины как раковая опухоль еще с 2014 года в виде оккупированых территорий Луганской и Донецкой областей и аннексированного Крыма, Россия прикрываясь лживой пропагандой, сама является нацистским государством развязавшим преступную войну и тем самым обрекая себя на бедность и ненависть всего мира.

Украина выиграет эту войну и положит конец российской террористической деятельности (рашизму).

Слава Україні!

На видео представлена очень маленькая часть разрушений, которые российская армия наносит Украинским мирным городам и людям.

Drupal 7: Определение шаблонов для форм. Темизация форм

Опубликовано 29.06.2013 Теги: 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) для отображения элементов формы которые небыли выведены отдельным рендером.

Комментарии

Аватар пользователя Альфа
Альфа
Опубликовано 24.02.2014

Спасибо, статья помогла, очень!

  • ответить
Аватар пользователя Роман
Роман
Опубликовано 12.05.2014

Добрый день.

Не совсем понятно, что такое render_element.

Если не трудно, поясните, пожалуйста, как с ним работать и за что он отвечает.

  • ответить
Аватар пользователя Alex
Alex
Опубликовано 13.05.2014

render element - это обычный массив с набором данных который ковертируется в HTML через функции drupal_render() и render().

Например:

$makrup =  array(
  'element_name_1' => array(
    '#type' => 'markup',
    '#markup' => '<p>A paragraph about some stuff...</p>',
  ),
  'element_name_2' => array(
    '#items' => array('first item', 'second item', 'third item'),
    '#theme' => 'item_list',
  ),
);

$html = render($makrup);

Здесь полная документация о том какие свойства поддерживаются в render элементах - Render Arrays in Drupal 7

В контексте статьи render element это форма. Которую тоже можно вывести при помощи render() функции.

  • ответить
Аватар пользователя Алексей
Алексей
Опубликовано 19.09.2014

ох, не получается что-то.
Я правильно понял?
У меня есть модуль, в него я пишу:

function user_node_form_theme() {
  return array(
    'block-user-node-form-user-node-form-block' => array( // id формы
      'render element' => 'form', // указываем что элемент для отображения - форма
      'template' => 'user_node_form', // имя шаблона custom_form_template.tpl.php
    ),
  );
}

затем в папке tempate создаю файл user_node_form.tpl.php?

Никак не реагирует(

  • ответить
Аватар пользователя Alex
Alex
Опубликовано 19.09.2014

Добрый день! Вместо block-user-node-form-user-node-form-block должен быть ID формы с нижними подчеркиваниям. Например user_node_form. ID формы можно найти в разметке,

ибо скопировать имя функции которая возвращает эту форму. Так же путь к шаблону прописать нужно с вместе с папкой template.

function user_node_form_theme() {
  return array(
    'user_node_form' => array( // ID формы
      'render element' => 'form',
      'template' => 'template/user_node_form', // Шаблон должен лежать в папке и с именем template/user_node_form.tpl.php
    ),
  );
}
  • ответить
Содержание этого поля является приватным и не предназначено к показу. Если у вас есть Gravatar аккаунт, связанный с введенным адресом email, то он будет использован для отображения вашего аватара.

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • Для публикации фрагментов кода, используйте тег <code>...</code>.

Категории блога

  • Drupal 7 (35)
  • Drupal 8 (1)
  • PHP (6)
  • jQuery (3)
  • Linux (6)
  • Интернет (1)
  • JavaScript (1)
  • Дизайн (1)
  • События (19)
  • Разное (1)

Архив блога

  • декабрь 2017 (1)
  • август 2017 (1)
  • июль 2017 (1)
  • июнь 2017 (1)
  • май 2017 (1)
  • апрель 2017 (1)
  • март 2017 (2)
  • сентябрь 2016 (2)
  • июнь 2016 (1)
  • январь 2016 (1)
  • сентябрь 2015 (2)
  • май 2015 (1)
  • февраль 2015 (3)
  • ноябрь 2014 (1)
  • октябрь 2014 (1)
  • сентябрь 2014 (1)
  • июль 2014 (1)
  • июнь 2014 (1)
  • май 2014 (1)
  • январь 2014 (1)
  • декабрь 2013 (3)
  • ноябрь 2013 (2)
  • сентябрь 2013 (2)
  • август 2013 (2)
  • июнь 2013 (3)
  • май 2013 (4)
  • апрель 2013 (2)
  • март 2013 (3)
  • февраль 2013 (1)
  • декабрь 2012 (3)

Связь с автором

Alex Schedrov Twitter Icon Alex Schedrov Drupal Icon Alex Schedrov Github Alex Schedrov RSS Icon
© 2011—2022