Интеграция модуля с views. Работа с обработчиками. Часть 2

В этой части статьи рассмотрим основные методы которые понадобятся для создания собственных обработчиков.

Основные методы для создания собственных обработчиков

Добавление настроек

function option_definition() {
    $options = parent::option_definition();

    $options['type'] = array('default' => 0);

    return $options;
  }

  function options_form(&$form, &$form_state) {
    parent::options_form($form, $form_state);
    $form['type'] = array(
      '#type' => 'select',
      '#title' => t('Type'),
      '#options' => array('type 1', 'type 2'),
      '#default_value' => $this->options['type'],
    );
  }

В дальнейшем получить значение созданной переменной можно так:  $this->options['type']

Форма extra настроек

Появляется при клике на иконку шестеренки.

  function has_extra_options() { return TRUE; }

  function extra_options_form(&$form, &$form_state) {
    $options = array('value 1', 'value 2', 'value 3');
    $form['subtype'] = array(
      '#type' => 'radios',
      '#title' => t('Subtype'),
      '#options' => $options,
      '#default_value' => $this->options['subtype'],
    );
}

В формах можно использовать спец разметку. Оборачивая дивами <div class="views-left-40"></div> и <div class="views-right-40"></div> элементы форм, можно разносить элементы по разным сторонам формы, наглядный пример это настройки фильтров. Значение 40 означает проценты, может быть 10, 20, 30, 40, 50.

Работа с SQL

Для изменения sql запроса в обработчике используется метод query().

  • Для обнуления всего того, что делают родительские обработчики:
    $this->ensure_my_table();
  • Добавление нового поля:
    $this->query->add_field($this->table_alias, $this->real_field);
    если для вашего запроса требуется вывести не просто поле, а использовать формулу тогда используйте код:
    $this->query->add_field(NULL, "to_char($this->table_alias.$this->real_field, 'DD-MM-YYYY')", $this->table_alias .'_'. $this->real_field);
    вместо поля здесь формула, 3й аргумент - это алиас поля который вы задаете сами, так как используется нестандартный вариант поля.
  • Добавление сортировки:
    $this->query->add_orderby($this->table_alias, $this->real_field, 'DESC');
  • Добавление условия:
    $this->query->add_where(NULL, "$this->table_alias.$this->real_field IS NULL");
    1-й аргумент означает группу условий, NULL - основная группа.

Другие функции для работы с SQL смотрите в файле views\includes\query.inc.