drupal 7

УрокИзменение состояний формы в Drupal 7

Нередки ситуации, когда в зависимости от нажатия элемента на форме появляются/исчезают/меняются элементы этой самой формы. И если для обычных полей это можно сделать модулем conditional fields, то для своих форм придётся всё писать самому. В Друпале это можно сделать либо через ajax (об этом более подробно можно почитать тут) либо же через параметр #states в Forms API. И сейчас речь пойдёт именно о втором варианте.

Итак, #states. По сути, это PHP обёртка для простейших функций jQuery, которые изменяют состояние формы при совершении с ней заранее заданных действий.

Состояние элемента #states является ассоциативным массивом такого вида:

УрокОбработка большого количества данных с помощью Batch API

Продолжается тема обработки большого количества данных. Как делать это в фоновом режиме при помощи крона я уже писал. Теперь о том, как реализовать обработку данных в пользовательском интерфейсе.

С работой батча сталкивались все, кто работал с Друпалом. Во время установки самого Дру, во время установки новых модулей (импорт переводов), обновление базы данных с помощью update.php и так далее. Визуально батч представляет собой полоску с индикатором выполнения:

УрокПрограммное изменение запроса к базе данных во Views

Возникают ситуации, когда необходимо сделать во Views фильтр с помощью программного вмешательства. Например, совсем недавно я реализовывал такую задачу:

Есть тип материала "акция". Акция содержит поле со списком городов (чекбоксы), к которым она приурочена. В шапке сайта есть выпадающий список с этим же списком городов. На главной странице сделана вьюха, которая выводит акции по городам, т.е. в зависимости от выбранного города из выпадающего списка в шапке сайта. Так как это должно работать и для анонимов, то выбранный город решено хранить в сессии пользователя. А Views не даёт возможности подставить значение в фильтр из сессий. Следовательно, пришлось создать небольшой модуль, который изменяет запрос вьюса к базе данных, подставив в качестве фильтра города значение из сессии пользователя.

УрокМодульное тестирование с помощью Simpletest

В Друпале существует два варианта тестирования - модульное и функциональное. Про функциональное тестирование с Simpletest я уже рассказал. Пришло время поговорить о модульном.

Сразу хочу отметить, что модульное тестирование - это не значит, что тестироваться будут модули. Просто в английском языке оно называется Unit testing, что по традиции переводиться именно как модульное тестирование. А то, что в Друпале всё построено на модулях - это досадное совпадение ;)

Как и раньше, для примеров я буду использовать код из модуля Simpletest Example, который является частью examples. Для вас это хорошо тем, что можно скачать и посмотреть исходники, или же опробовать их в деле.

УрокИндивидуальные настройки темы в Drupal 7

Как добавлять настройки в тему для Drupal 6 уже всем давно известно. Теперь поговорим о том, как это сделать для Drupal 7. Система этих настроек упростилась и стала более логичной и понятной. Итак, по порядку.

Первым шагом в корне темы надо создать файл theme-settings.php. В нём надо имплементировать хук, который изменяет форму с настройкой темы по умолчанию (да да, в седьмом Друпале в теме можно изменять формы при помощи alter хука!). Пример:

УрокОсновы функционального тестирования модулей на Simpletest

В этой статье я расскажу об основах тестирования в Друпале. После прочтения вы сможете написать простой тест самостоятельно. Для наглядности, по ходу статьи будет создан модуль simpletest_example, который будет предоставлять тип контента с названием simpletest_example, ничем не отличающийся от привычных нам типов story, page и т.д. Далее для этого модуля будет написан тест, проверяющий правильность его работы в различных ситуациях.

УрокViews 3: сортировка результатов по длине заголовка

Если вы хотите вывести результаты во вьюсе, отсортировав их по длине заголовка, то имплементация хука hook_query_TAG_alter() поможет в этом:

<?php
/**
* Implements hook_query_TAG_alter().
*
* @param SelectQuery $query
*/
function ИМЯМОДУЛЯ_query_VIEWNAME_alter(SelectQuery $query) {
  $query->addExpression('LENGTH(node.title)', 'title_length');
  $query->orderBy('title_length', 'DESC');
}
?>

УрокТонкости программного создания страниц на сайте

В Друпале программно обычные страницы создаются допольно легким способом. И в 6й, и в 7й, и в 8й версии ядра они создаются похожим образом, а именно - имплементированием хука hook_menu() в свой модуль. В этой статье я не буду подробно останавливаться на базовой части - непосредственном добавлении страниц, так как это очень просто и не вызывает затруднений при самостоятельном обучении. Ведь для добавления страницы достаточно написать несколько строк:

function mymodule_menu() {
  $items = array();
  $items['new_page'] = array(
      'page callback' => 'mymodule_page',
    );
  return $items; 
}

Здесь создаётся страница с урлом new_page. При переходе на этот урл будет возвращено значение из функции mymodule_page().

Страницы