Search API. Обработка результатов запроса

Приветствую. Сегодня, как вы уже наверняка поняли из названия, мы рассмотрим пример обработки результатов запроса, сделанного с помощью модуля Search API. Запрос я писать не буду, о том, как его сделать, вы можете прочитать в уроке Search API. Пишем свой запрос. Отмечу, что у меня результат запроса хранится в переменной $results.

Найденные ноды, я буду отображать с помощью вью...

Как программно изменить тип пейджера во Views

Пример кода, который позволяет программно изменить тип пейджера во Views:

/**
 * Implements hook_views_pre_build().
 */
function module_name_views_pre_build(&$view) {
  if ($view->name == 'view_name' && $view->current_display == 'display_name') {
    $pager = $view->display['display_name']->handler->get_option('pager');
    $pager['type'] = 'mini';
    $view->display['display_name']->handler->set_option('pager', $pager);
  }
}

Создаем style плагин в своем модуле

Я уже писал о том, как создать style плагин для модуля Panels. Но в том уроке я в большей степени описал процесс создания внутри темы, а создание в модуле описал кратко и у некоторых читателей возникли вопросы, поэтому в этом уроке я исправлю этот недочет и опишу процесс создания style плагина в своем модуле.

Шаг 1. В файл module_name.info добавляем следующие строки:

name =...

Search API. Пишем свой запрос

Сегодня мы поговорим о том, как получить результаты поиска с помощью Search API. Я предполагаю, что у вас уже настроен сервер и индекс и поэтому на этих вещах я не буду останавливаться.

// Число 10 это количество элементов на страницу.
$offset = pager_find_page() * 10;

// Какая то строка для поиска.
$keywords = 'some string';

$options = array(
  'search id' => 'module_name',
  'parse mode' => 'terms',
);

$query = search_api_query('node_index', $options)
  ->keys($keywords)
  ->range($offset,...

Как упаковать картинки в ZIP архив

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

/**
 * Create a zip archive, which contains images.
 *
 * @param object $node
 *   The node object.
 *
 * @return bool|stdClass
 *   Zip archive, if was created, FALSE otherwise.
 */
function _example_zip_create($node) {
  if (module_exists('entity') && $wrapper = entity_metadata_wrapper('node', $node...

Как создать пользовательский AJAX progress type

В Drupal 7 по умолчанию существует два AJAX progress type: 'throbber' (используется по умолчанию) и 'bar'. Установить AJAX progress type можно следующим образом:

$form['actions']['submit']['#ajax'] = array(
  'callback' => 'example_ajax_submit',
  'progress' => array('type' => 'bar'),
);

Для примера, я покажу, как сделать, чтобы во время работы AJAX у кнопки, на которой навешен AJAX обработчик менялось название. Пользовательский AJAX progress type я назвал ...

Как программно создать image style

Пример кода, который позволяет создать image style программно:

/**
 * Implements hook_image_default_styles().
 */
function example_image_default_styles() {
  $styles = array();

  $styles['example_style_one'] = array(
    'label' => 'Style one (610x300)',
    'effects' => array(
      array(
        'name' => 'image_scale',
        'data' => array('width' => 610, 'height' => 300, 'upscale' => TRUE),
        'weight' => 0,
      ),
    ),
  );
  $styles['example_style_two'] = array(
    'label' => '...

Создаем пользовательскую AJAX команду

Сегодня я покажу, как правильно создавать пользовательские AJAX команды. В качестве примера, я создам команду, которая будет менять цвет ссылок. Команда будет называться color_links.

Для начала в своем модуле в *.js файле создаем команду:

(function($) {

  /**
   * Command to change color of links.
   */
  Drupal.ajax.prototype.commands.color_links = function(ajax, response, status) {
    var wrapper = response.selector;
    var hex = response.hex;

    $(wrapper).find("a").css({ color : hex...