Drupal 7

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

Как создать пользовательский 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 я назвал example_progress. Установим наш progress type:

$form['actions']['submit']['#ajax'] = array(
  'callback' => '...
Benya

Как программно создать 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' => 'Style two (460x290)',
    'effects' => array(
      array(
        'name' => '...
Benya

Создаем пользовательскую 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 });
  }
})(jQuery);

Далее в *.module создаем команду:

/**
 * Creates a Drupal Ajax '...
Benya

Как перевести "Order total" в Drupal Commerce

В Drupal Commerce имеется очень неприятная проблема, с которой приходится сталкиваться каждый раз при создании очередного магазина. Проблема тянется очень давно. Почитать начало можно тут, там же ссылки, по которым можно перейти и почитать ишью. Решение, которое предлагается, мне не нравится, потому что ставить дополнительные модули, несущие громоздкий функционал для перевода пары строк - помоему маразм, патчить модули - тоже не интересно, каждый раз при выходе новой версии модуля - тратить время на патч модуля мне как то не интересно.

Какие же есть решения?

Первое решение...

Benya