Центр документации
Карта сайта

Новая документация

Расширенная настройка
Разработчикам (API)

Обновленная документация 

Разработчикам (API)

Фильтр

Фильтр является частным случаем формы, поэтому он обладает ее возможностями, настроенными специальным образом:

  1. Отображение управляющих элементов фильтра (поле ввода, календарь, выпадающий список)
  2. Отправка введенных данных (фильтрация элементов компоненты табличного списка)

Создание формы

Компонента формы поддерживает следующие возможности:

  1. Класс контроллера, наследуемый от AMI_ModFilter
  2. Класс отображения, наследуемый от AMI_ModFilterView
  3. Класс модели, наследуемый от AMI_Filter (следует обратить внимание, что фильтр не работает с моделью элемента – у фильтра своя специфическая модель)

Пример классов компонент фильтра:

class AmiSample_FilterAdm extends AMI_ModFilter{
}

class AmiSample_Filter extends AMI_Filter{
    public function __construct(){
        $this->addViewField(
            array(
                'name'          => 'nickname',
                'type'          => 'input',
                'flt_type'      => 'text',
                'flt_default'   => '',
                'flt_condition' => 'like',
                'flt_column'    => 'nickname'
            )
        );
    }
}

class AmiSample_FilterView extends AMI_ModFilterView{
    public function __construct(){
        parent::__construct();
        $this->addPlaceholders(array('nickname' => 'datefrom.before'));
    }

    protected function getModLocalePath(){
        return '_local/plugins_distr/' . $this->getModId() .  '/templates/filter.lng';
    }
}
Описание методов, использованных в примере, будет приведено ниже.

Определение списка и порядка полей

Для добавления поля фильтра необходимо использовать метод addViewField. Пример:

$this->addViewField(
            array(
                'name'          => 'nickname',
                'type'          => 'input',
                'flt_type'      => 'text',
                'flt_default'   => '',
                'flt_condition' => 'like',
                'flt_column'    => 'nickname'
            )
        );

Параметром метода является ассоциативный массив. В зависимости от типа добавляемого поля, необходимо указывать различные элементы в массиве.
Общие параметры:

КлючЗначениеКомментарий
nameСтрокаНазвание поля
typeinput, checkbox, datetime, date, select, radio, hiddenТип поля
flt_typestatic, hidden, text, date, select, radio, submit, button, checkbox, subcats_search, flagmap, Vsplitter, Hsplitter, Sblock, Fblock, search, sql, timestamp, numericТип обработки поля
valueСтрокаТекущее значение
flt_defaultСтрокаЗначение по умолчанию
flt_conditionlike|=|<=|>=Условие фильтрации
flt_columnСтрокаНазвание поля модели, по которому идет фильтрация
htmlСтрокаHTML код элемента управления
Порядок элементов формы задается при помощи формирования позиций элементов (ссылка на раздел про позиции в компоненте списка), аналогично заданию порядка столбцов в табличном списке. При добавлении поля создается позиция элемента. Если параметр position не указан явно, то позиция элемента добавляется там, где происходило последнее добавление элементов.

Для создания собственного элемента управления, необходимо передать значение html в массиве параметров. Пример:
$this->addField(array('name' => 'my_ctrl', 'html' => $ctrlHtml));

Примеры реализации

Задача. Есть модель, содержащая 3 свойства: id, nickname, birth. Необходимо создать классы компонента фильтра, отображающих 3 эти поля: nickname – поле ввода (фильтрация по значению), birth – 2 поля календаря (от – до).

class AmiSample_FilterAdm extends AMI_ModFilter{
}

class AmiSample_Filter extends AMI_Filter{
    public function __construct(){
        $this->addViewField(
            array(
                'name'          => 'nickname',
                'type'          => 'input',
                'flt_type'      => 'text',
                'flt_default'   => '',
                'flt_condition' => 'like',
                'flt_column'    => 'nickname'
            )
        );
        $this->addViewField(
            array(
                'name'          => 'datefrom',
                'type'          => 'datefrom',
                'flt_type'      => 'date',
                'flt_default'   => AMI_Lib_Date::formatUnixTime(AMI_Lib_Date::UTIME_MIN),
                'flt_condition' => '>=',
                'flt_column'    => 'birth'
            )
        );
        $this->addViewField(
            array(
                'name'          => 'dateto',
                'type'          => 'dateto',
                'flt_type'      => 'date',
                'flt_default'   => AMI_Lib_Date::formatUnixTime(AMI_Lib_Date::UTIME_MAX),
                'flt_condition' => '<',
                'flt_column'    => 'birth'
            )
        );
    }
}

class AmiSample_FilterView extends AMI_ModFilterView{
    public function __construct(){
        parent::__construct();
        
        // Add admin filter form placeholder for nickname
        $this->addPlaceholders(array('nickname' => 'datefrom.before'));
    }

    protected function getModLocalePath(){
        return '_local/plugins_distr/' . $this->getModId() .  '/templates/filter.lng';
    }
}
Подробное описание логики работы примера в более сложном виде описано в главе «Пример реализации плагина».

Установка и настройка Руководство пользователя Интеграция дизайна Разработчикам (API) Документация для скачивания
 2000 – 2011 © Amiro.CMS Все права защищены.
Работает на: Amiro CMS