Помощь начинающим веб
разработчикам

Подробнее о функциях theme_* в Drupal 7

26.08.2015

Сегодня мы чуть подробнее разберем функции theme в Drupal 7, а именно, я вам расскажу, где они нам могут пригодиться и как с ними работать в дальнейшем. В большинстве своем функции theme, предназначены для формирования HTML разметки для каких-либо элементов сайта, - это может быть таблица, списки, изображения и многое другое.

Список функций, которые будет рассматривать:

theme_item_list

Данная функция возвращает HTML разметку для списков и вложенных списков.

  1. theme_item_list($variables)

где,

  • $variables['items'] – массив с элементами списка
  • $variables['title'] - заголовок списка
  • $variables['type'] – тип списка. Может быть как маркированный список (ul – используется по умолчанию), так и ol
  • $variables['attributes'] – атрибуты списка, например класс CSS
Пример использования theme_item_list
  1. <?php
  2. $items = array('item 1', 'item 2', 'item 3'); // Массив с элементами списка
  3. $title = 'Theme Item List Example'; // Заголовок списка
  4. $type = 'ol'; // Тип списка
  5. $attributes = array( // Атрибуты списка
  6. 'class' => 'newclass',
  7. );
  8. print theme_item_list(array('items' => $items, 'title' => $title, 'type' => $type, 'attributes' => $attributes));
Пример использования theme_item_list theme_disable

Данная функция отключает шаблон (тему) на вашем сайте. В качестве значения принимает массив с именами шаблонов, которые должны быть отключены.

  1. theme_disable($theme_list)
Пример использования theme_disable
  1. <?php
  2. $theme_list = array('garland');
  3. theme_disable($theme_list);
theme_enable

Данная функция противоположна функции theme_disable, - включает шаблон (тему) на вашем сайте. В качестве значения принимает массив с именами шаблонов, которые должны быть включены.

  1. theme_enable($theme_list)
Пример использования theme_ enable
  1. <?php
  2. $theme_list = array('garland');
  3. theme_enable($theme_list);
theme_feed_icon

Возвращает HTML разметку для РСС подписки. В качестве значения принимает массив

  1. theme_feed_icon($variables)

где,

  • $variables['url'] – путь до изображения
  • $variables['title'] – title подписки
Пример использования theme_feed_icon
  1. <?php
  2. $variables = array();
  3. $variables['url'] = ''; // Путь до изображения
  4. $variables['title'] = 'New Feed Title'; // Tille подписки
  5. print theme_feed_icon($variables);
Пример использования theme_feed_icon theme_get_registry

Данная функция формируем массив реестра тем на вашем сайте.

  1. theme_get_registry($complete = TRUE)

где,

  • $complete – булевское значение, если TRUE (по умолчанию), то будет сформирован массив всего списка реестра
Пример использования theme_get_registry
  1. <?php
  2. $registry = theme_get_registry($complete = TRUE);
  3. var_dump($registry);
Пример использования theme_get_registry theme_get_setting

Получает какое-либо значение текущей темы, а так же глобальные настройки тем. Это может быть текст, число или булевское значение. В качестве значений принимает имя настройки, и в качестве необязательного параметра название темы

  1. theme_get_setting($setting_name, $theme = NULL)

где,

  • $setting_name – имя настройки
  • $theme – имя темы
Пример использования theme_get_setting
  1. <?php
  2. $settheme = theme_get_setting('logo');
  3. var_dump($settheme);
theme_html_tag

Возвращает HTML разметку для HTML тега с указанными атрибутами.

  1. theme_html_tag($variables)

где,

  • $variables['element']['#tag'] – необходимый HTML тэг
  • $variables['element']['#attributes'] – атрибуты тега, например класс CSS
  • $variables['element']['#value'] – текст внутри тега
  • $variables['element']['#prefix'] – значение перед текстом внутри тега
  • $variables['element']['#suffix'] – значение после текста внутри тега
Пример использования theme_html_tag
  1. <?php
  2. $variables = array();
  3. $variables['element']['#tag'] = 'h4'; // Тег, для которогог будет создана разметка
  4. $variables['element']['#attributes'] = array('class' => array('strongclass')); // Класс CSS для тега
  5. $variables['element']['#value'] = 'Text Strong'; // Текст (значение) внутри тега
  6. $variables['element']['#value_prefix'] = '<div>Текст, до элемента</div>'; // Префикс перед текстом
  7. $variables['element']['#value_suffix'] = '<div>Текст, после элемента</div>'; // Суффикс после текста
  8.  
  9. print theme_html_tag($variables);
Пример использования theme_html_tag theme_image

Возвращает HTML разметку для изображения. В качестве значения принимает массив

  1. theme_image($variables)

где,

  • $variables['path'] – путь до изображения
  • $variables['width'] – ширина изображения
  • $variables['height'] – высота изображения
  • $variables['alt'] – alt изображения
  • $variables['title'] – title изображения
  • $variables['attributes'] – массив с атрибутами
Пример использования theme_image
  1. <?php
  2. $variables = array(
  3. 'path' => 'img/img.jpg', // Путь до изображения
  4. 'width' => 359, // Ширина изображения
  5. 'height' => 224, // Высота изображения
  6. 'alt' => 'Test Image', // Alt
  7. 'title' => 'Test Image', // Title
  8. 'attributes' => array( // Атрибуты, например класс CSS
  9. 'class' => array('class_image'),
  10. 'data-img' => 1,
  11. ),
  12. );
  13.  
  14. print theme_image($variables);
Пример использования theme_image theme_indentation

Возвращает HTML с отступом DIV. В качестве значения принимает массив

  1. theme_indentation($variables)

где,

  • $variables['size'] – необходимое кол-во DIV с отсупом
Пример использования theme_indentation
  1. <?php
  2. $variables = array(
  3. 'size' => 10,
  4. );
  5. print theme_indentation($variables);
Пример использования theme_indentation theme_breadcrumb

Возвращает HTML хлебных крошек. В качестве значения принимает массив

  1. theme_breadcrumb($variables)

где,

  • $variables['breadcrumb'] – массив значений
Пример использования theme_breadcrumb
  1. <?php
  2. $variables['breadcrumb'] = array(
  3. 0 => '<a href="#" title="Home">Home</a>',
  4. 1 => '<a href="#" title="Link">Link</a>',
  5. 2 => 'More Link',
  6. );
  7. print theme_breadcrumb($variables);
Пример использования theme_breadcrumb theme_link

Возвращает HTML разметку для ссылки. В качестве значения принимает массив

  1. theme_link($variables)

где,

  • $variables['path'] – адрес ссылки
  • $variables['text'] – текст ссылки
  • $variables['options'] – опции ссылки, например добавление аттрибутов
Пример использования theme_link
  1. <?php
  2. $variables = array(
  3. 'path' => 'http://home.ru', // href ссылки
  4. 'text' => 'Link to front page', // текст ссылки
  5. 'options' => array(
  6. 'attributes' => array('class' => array('linkclass'), 'id' => 'linkid'), // атрибуты ссылки
  7. 'html' => FALSE,
  8. ),
  9. );
  10. print theme_link($variables);
Пример использования theme_link theme_links

Возвращает HTML разметку для списка ссылок. В качестве значения принимает массив

  1. theme_links($variables)

где,

  • $variables['links'] – массив со списком ссылок
  • $variables['attributes'] – атрибуты списка
  • $variables['heading'] – заголовок списка
Пример использования theme_links
  1. <?php
  2. $variables['links'] = array(
  3. 0 => array(
  4. 'title' => 'Link 1', // Текст ссылки
  5. 'href' => 'http://drupalfly.ru', // Адрес ссылки
  6. 'html' => TRUE, // Если TRUE, то ссылка будет пропущена через check_plain
  7. 'attributes' => array( // Атрибуты ссылки
  8. 'class' => array('linkone'),
  9. ),
  10. ),
  11. 1 => array(
  12. 'title' => 'Link 2',
  13. 'href' => 'http://drupalfly.ru',
  14. 'html' => TRUE,
  15. 'attributes' => array(
  16. 'class' => array('linktwo'),
  17. ),
  18. ),
  19. );
  20.  
  21. $variables['attributes'] = array('class' => array('parentclass')); // Атрибуты для списка
  22. $variables['heading'] = array( // Формирование заголовка для списка ссылок
  23. 'text' => 'One more', // Текст заголовка
  24. 'level' => 'h2', // Тег для обрамления заголовка
  25. 'class' => 'One more class', // Класс CSS заголовка
  26. );
  27.  
  28. print theme_links($variables)
Пример использования theme_links theme_mark

Возвращает HTML маркер для нового или обновленного контента. В качестве значения принимает массив,

  1. theme_mark($variables)

где,

  • $variables[‘type’] – тип метки. Может принимать следующие значения (константы):
    • MARK_NEW – новый контент
    • MARK_UPDATED – контент обновлен
    • MARK_READ – контент прочтен
theme_more_help_link

Возвращает разметку HTML ссылки, для получения справочной информации

  1. theme_more_help_link($variables)

где,

  • $variables['url'] – адрес ссылки
Пример использования theme_more_help_link
  1. <?php
  2. $variables['url'] = 'http://drupalfly.ru';
  3. print theme_more_help_link($variables);
Пример использования theme_more_help_link theme_more_link

Возвращает разметку HTML ссылки, которая используется в блоках и нодах (more). В качестве значения принимает массив

  1. theme_more_link($variables)

где,

  • $variables['url'] – адрес ссылки
  • $variables['title'] = title ссылки
Пример использования theme_more_link
  1. <?php
  2. $variables = array(
  3. 'url' => 'http://drupalfly.ru',
  4. 'title' => t('Читать дальше'),
  5. );
  6. print theme_more_link($variables);
Пример использования theme_more_link theme_progress_bar

Возвращает HTML разметку прогресс бара. Её вы можете наблюдать при использовании пакетной обработки Batch. В качестве значений принимает массив

  1. theme_progress_bar($variables)

где,

  • $variables['percent'] – процент прогресса
  • $variables['message'] – сообщение, которое будет отображать при обработке, например пакетных операция
Пример использования theme_progress_bar
  1. <?php
  2. $variables = array(
  3. 'percent' => 50,
  4. 'message' => 'Идет процесс обработки',
  5. );
  6. print theme_progress_bar($variables);
Пример использования theme_progress_bar theme_status_messages

Возвращает разметку HTML сообщений на сайте. Вызывается в связке с drupal_set_message()

theme_table

Возвращает HTML разметку таблицы. В качестве значений принимает массив,

  1. theme_table($variables)

где,

  • $variables['header'] – массив с заголовками таблицы
  • $variables['rows'] – массив с полями таблицы
  • $variables['attributes'] – атрибуты таблицы
  • $variables['caption'] – caption таблицы
  • $variables['colgroups'] – colgroups таблицы
  • $variables['sticky'] – булевское значение, определяет фиксирование заголовков таблицы (thead) при прокрутке
  • $variables['empty'] - текст, который будет отображаться при пустых полях таблицы
Пример использования theme_table
  1. <?php
  2. $colgroup = array(
  3. 'class' => array('funky'),
  4. 'align' => 'center',
  5. ),
  6. ),
  7. );
  8.  
  9. $variables = array(
  10. 'header' => array( // заголовки колонок таблицы
  11. 0 => 'Title',
  12. 1 => 'Description',
  13. ),
  14. 'rows' => array( // поля таблицы
  15. 0 => array('Row Title 1', 'Row Description 1'),
  16. 1 => array(
  17. 'data' => array(
  18. 0 => 'Row Title 2',
  19. 1 => array(
  20. 'data' => 'Row Description 2',
  21. 'class' => array('newrow'), // аттрибуты для конкретного поля
  22. ),
  23. ),
  24. ),
  25. ),
  26. 'attributes' => array(
  27. 'class' => array('newtable'), // атрибуты таблицы
  28. ),
  29. 'caption' => 'Example table', // текст для caption
  30. 'colgroups' => $colgroup, // параметры для тега colgroups
  31. 'sticky' => FALSE, // булевское значение, определяет фиксирование заголовков таблицы (thead) при прокрутке
  32. 'empty' => 'Таблица пуста', // текст, который будет отображаться при пустых полях таблицы
  33. );
  34.  
  35. print theme_table($variables);
Пример использования theme_table theme_tablesort_indicator

Возвращает HTML разметку для иконки сортировки. В качестве значений принимает массив,

  1. theme_tablesort_indicator($variables)

где,

  • $variables['style'] – тип сортировки. В зависимости от типа будет сформирован та или иная иконка и принимает следующие значения:
    • asc – сортировка по возрастанию
    • desc – сортировка по убыванию
Пример использования theme_tablesort_indicator
  1. <?php
  2. $variables['style'] = 'asc';
  3. print theme_tablesort_indicator($variables);
Пример использования theme_tablesort_indicator theme_username

Возвращает HTML разметку пользователя. В качестве значений принимает массив,

  1. theme_username($variables)

где,

  • $variables['account'] – объект пользователя
  • $variables['name'] – имя пользователя
  • $variables['link_path'] – адрес ссылки
  • $variables['link_options'] –атрибуты ссылки
  • $variables['extra'] –экстра для текста ссылки
  • $variables['attributes_array'] - Атрибуты, если адрес ссылки не существует
Пример использования theme_username
  1. <?php
  2. global $user;
  3.  
  4. $variables = array(
  5. 'account' => $user, // Объект пользователя
  6. 'name' => 'Pantey ', // Имя пользователя
  7. 'link_path' => 'http://drupalfly.ru', // Адрес ссылки
  8. 'link_options' => array('attributes' => array('class' => 'userclass_link')), // Атрибуты ссылки
  9. 'extra' => '(admin)', // Экстра для текста ссылки
  10. 'attributes_array' => array( // Атрибуты, если адрес ссылки не существует
  11. 'class' => array('userclass')
  12. ),
  13. );
  14. print theme_username($variables);
Пример использования theme_username theme

Данная функция на основе переданного ей значения, сканирует реестр тем и направляет его в соответствующую функцию тем. В качестве значения принимает название темы и массив со значениями,

  1. theme($hook, $variables = array())

где,

  • $hook – название темы, например table
  • $variables – массив со значениями, могут изменяться в зависимости от названия темы
Пример использования theme
  1. <?php
  2. $items = array('item 1', 'item 2', 'item 3');
  3. print theme('item_list', array('items' => $items));
Пример использования theme

Хочу заметить, что данную функцию не рекомендуется использовать в ее чистом виде. Вместо нее следует использовать drupal_render

Так пример использования функций темизации примет следующий вид:

  1. <?php
  2. $items = array('item 1', 'item 2', 'item 3');
  3. $build = array(
  4. '#theme' => 'item_list',
  5. '#items' => $items,
  6. '#type' => 'ul',
  7. '#title' => 'Item List Example',
  8. );
  9.  
  10. print drupal_render($build);
Пример с использованием drupal_render
Узнавай о новых статьях сайта - первым. Просто подпишись на рассылку.

Комментарии (1)

Profile picture for user Алексей
А.К.
30.01.2016

Спасибо большое за обзор. Очень пригодилось.

Добавить комментарий

- Оповестить о новом комментарии.
- Все комментарии
- Только мои комментарии