Создать exposed фильтр программно

Главные вкладки

Аватар пользователя ygerasimov@drupal.org ygerasimov@drup... 12 августа 2009 в 0:10

Задача состоит в том, чтоб в зависимости от аргументов view, создавать определенные exposed фильтры. Каким образом это можно сделать?

Комментарии

Аватар пользователя penexe penexe 12 августа 2009 в 9:52

лучше сделать несколькими display`ми, с разными exposed фильтрами.

function hook_views_pre_build(&$view) {
  if($view->name == 'catalog' && $view->args[0] == 'xxx') {    
    $view->set_display('page_4');
  }
}
Аватар пользователя ygerasimov@drupal.org ygerasimov@drup... 12 августа 2009 в 10:25

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

я сейчас занимаюсь поиском, и нашел, что подобные вещи делаются функцией $view->add_item(...). Павел, может подскажешь, где можно посмотреть какие аргументы нужно передать этой функции и их описание?

заранее благодарю.

Аватар пользователя ygerasimov@drupal.org ygerasimov@drup... 13 августа 2009 в 18:38

я нашел решение:

// $field_name -- имя поля в виде 'field_xxx'
// $filter_label -- заголовок фильтра

$id = $view->add_item($display_id, 'filter', 'node_data_'.$field_name, $field_name.'_value_many_to_one');
$item = $view->get_item($display_id, 'filter', $id);
$item['expose'] = array(
                'use_operator'  => 0,
                'identifier'    => substr($field_name,6,strlen($field_name)-5), // переменная в строке URL. я убрал 'field_'
                'label'         => $filter_label,
                'optional'              => 1,
                'single'                => 1,
                'remember'              => 0,
                'reduce'                => 0,
        );
$item['exposed']              = TRUE;

$item['operator'] = 'or';
$item['value'] = array();
$view->set_item($display_id, 'filter', $id, $item);