Перейти к основному содержанию

Создание кастомной сортировки во views 3

Отправлено said от чт, 02/11/2016 - 17:56

Создание кастомной сортировки во вьюс

В модуле

/**
 * Реализация hook_views_api()
 */
function mymodule_views_api() {
  return array('api' => 3);
}

Создаем файл с именем mymodule.views.inc в папке с модулем. Внутри файла

/**
 * Реализация hook_views_data()
 */
function mymodule_views_data() {
  return array(
    'views' => array(
      'discount' => array(
        'title' => 'Сортировка по скидке',
        'group' => t('Global'),
        'help' => 'Описание сортировки',
        'sort'  => array(
          'handler' => 'mymodule_handler_sort_discount',
        ),
      ),
      //.....
    ),
  );
}

Создаем файл с хендлером mymodule_handler_sort_discount.inc внутри которого создаем обработчик наследованный от класса views_handler_sort
 

class mymodule_handler_sort_discount extends views_handler_sort {
  function query() {
    $this->ensure_my_table();

    // делаем join таблиц, нужных для сортировки
    $this->query->add_table('table1');
    $this->query->add_table('table2');

    // добавляем свое хитрое поле, по которому будет осуществляться сортировка
    $this->query->add_orderby(NULL, 'field1 - field2', $this->options['order'], 'formula_result');    
  }
}

В файле mymodule.info подключаем файл с хендлером
 

files[] = mymodule_handler_sort_discount.inc

Усё

Теги