Как сделать, чтобы команда ctools_modal_command_dismiss срабатывала через несколько секунд

Сегодня я покажу, что нужно сделать, чтобы модальное окно закрывалось с задержкой. Для этого мы напишем небольшой модуль, в котором создадим новую AJAX команду, которая будет использоваться вместо ctools_modal_command_dismiss().

Шаг 1. Создаем в своем модуле файл *.js и в нем создаем новую команду, у меня она будет называться example_modal_dismiss:

(function ($) {

  /**
   * Command to dismiss the modal.
   */
  Drupal.ajax.prototype.commands.example_modal_dismiss = function(ajax, response, status) {
    setTimeout(function () {
      Drupal.CTools.Modal.dismiss();
      $('link...
Benya

Как запретить чтение, запись и удаление директории tmb в модуле elFinder file manager

Пример кода, который позволяет запретить чтение, запись и удаление директории tmb при использовании модуля elFinder file manager:

/**
 * Implements hook_elfinder_connector_init().
 */
function example_elfinder_connector_init($options) {
  $options['perms']['/^' . $options['tmbDir'] . '/'] = array(
    'read' => FALSE,
    'write' => FALSE,
    'rm' => FALSE,
  );
  return $options;
}

Код проверен на модуле версии 7.x-0.8 и библиотеке elFinder версии 1.2

Benya

Создаем свой стиль для Colorbox

Сегодня мы поговорим о том, как можно добавить пользовательский стиль для модуля Colorbox. В одном из последних проектов мне потребовалось написать свой стиль и я сразу же подумал, что никаких проблем не будет, ведь у модуля есть страница настроек, на которой можно выбирать стили, а значит должно быть и API для добавления стилей. Я очень сильно ошибался, как оказалось, у модуля нет нормального API. Придется ухищрятся...

Для начала определимся, что стиль в общем случае состоит из двух файлов: CSS и JS. Последний в свою очередь может отсутствовать. Переходим к созданию стиля.

Шаг 1...

Benya

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

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

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

if (!empty($results)) {
  // Загружаем индекс.
  $index = search_api_index_load('node_index');
  $items = $index->loadItems(array_keys($results['results']));

  $view_mode = 'teaser';
  $...
Benya

Как программно изменить тип пейджера во 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);
  }
}
Benya

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

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

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

name = Module name
description = Style plugin example.
core = 7.x
package = "Panels"
 
dependencies[] = panels

Шаг 2. В файл module_name.module имплементируем хук hook_ctools_plugin_directory():

/**
 * Implements...
Benya

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, 10);

// Для поиска по каким то конкретным филдам, необходимо воспользоваться методом...
Benya

Как упаковать картинки в 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)) {

    // Директория, в которую сохранится...
Benya