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

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

УрокМассовое отключение и включение модулей при помощи Drush

При обновлении Друпала одним из первых шагов является отключение всех включенных модулей, которые не входят в ядро. При наличии сайта с большим количеством модулей это может привести к потере времени и нервов, которой хотелось бы избежать. Ведь те, кто уже отключал модули, знают, что перед отключением некоторых модулей, надо отключить все зависящие от них модули. И чтобы отключить зависящие, надо отключить зависящие от зависящих и так далее. А потом их ещё и включать придётся - а значит, записывать каждый выключенный модуль...

В общем, работа это скучная и неблагодарная. Поэтому и было предложено более простое решение - пользоваться Drush. А именно тремя простыми строками:

УрокБезопасный SQL запрос к базе данных в секции IN при работе с динамическими данными

В Друпал 6 значения, подставляемые в sql запрос могут заменяться %f, %d, %s. Однако что делать, если надо передать в запрос массив данных, который использует секцию IN? Пример:

$result = db_query('SELECT title FROM {node} WHERE nid IN (1, 10, 25)');

Если значения nid заранее известны то проблем не возникает - просто пользуемся вариантом выше и получаем профит. Однако, если количество передаваемых значений не известно, то могут возникнуть трудности. Конечно, можно было бы сделать так:

УрокViews 2: Отображение количества элементов под их выводом

При использовании пейджера в выводе вьюхи, количество элементов на странице можно вывести и вручную. Однако если выводить все элементы на одной странице, то довольно удобно показывать общее количество этих элементов под их выводом.

Если вы не боитесь использования PHP снипетов внутри вьюхи, то в настройках вьюса в подвале (footer) укажите формат ввода - php code и вставьте туда вот это:

<?php
  $current_view = views_get_current_view();
  print count($current_view->result);
?>

Это же можно сделать и другим способом. Например, через свой модуль. Для этого надо имплементировать хук hook_views_pre_render():

Урок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');
}
?>

ДизайнЮзабилити. Mouse tracking, Eye tracking и тестирование.

Так, интерфейс мы уже создали (надеюсь мои вопросы вам в этом помогли), теперь настало время продемонстрировать его массам. А? Что вы говорите? Я говорил про тестирование? Точно!

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

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

В жизни каждого программиста попадаются заказчики, которые просят сделать для их сайта обработку большого количества данных, будь то постоянное обновление товаров для магазина, парсинг xml файлов, отправка десятков тесяч емейлов и так далее. Смысл в том, что решить задачу "в лоб" просто невозможно - сервер может не выдержать; или закончится время выполнения скрипта и обработка данных прервётся; или же (в случае рассылки емейлов) ляжет почтовый сервер, или того хуже - почтовый сервер решит, что вы спамер, и ваши письма будут доходить до адресатов с большим опозданием (если вообще дойдут).

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

УрокCоздание и обновление записей в базе данных через Drupal API

В большинстве модулей записи в базу данных делаются постоянно - будь то новые записи, или же обновление уже существующих. Друпал позволяет выполнять прямые запросы в базу через db_query.

Вставка записи:

db_query('INSERT INTO {mytable} (value1, value2) VALUES  (%d, "%s")', $int, $string);

Обновление записи:

db_query('UPDATE {mytable} SET value2 = "%s" WHERE value1 = %d', $new_string, $int);

Однако хорошим тоном является использование функции из Drupal API drupal_write_record.

Страницы