Нодус: Кастомизация списка терминов
Есть возможность для списка терминов словарей таксономии переопределить или добавить новые поля и формы для фильтрации.
Переопределение состава полей списка
Для переопределения столбцов таблицы или добавления нового необходимо при объявлении полей у требуемых указать параметр in_list. Значением этого параметра может быть массив с описанием поля или true.
Например:
// app/components/Nodus/app/Taxonomy/Test.php class Component_Nodus_Taxonomy_Test extends Component_Nodus_Taxonomy implements Core_ModuleInterface { ... public function fields() { return array( 'super' => array( 'caption' => 'Super!!!', 'type' => 'input', 'sqltype' => 'varchar(255)', 'tab' => 'common', 'in_list' => true, ), ); } ... }
Или, например, поле в списке должно иметь свое описание.
// app/components/Nodus/app/Taxonomy/Test.php class Component_Nodus_Taxonomy_Test extends Component_Nodus_Taxonomy implements Core_ModuleInterface { ... public function fields() { return array( 'super' => array( 'caption' => 'Super!!!', 'type' => 'input', 'sqltype' => 'varchar(255)', 'tab' => 'common', 'in_list' => array( 'caption' => 'Super-Super', ), ); } ... }
Для изменения содержимого столбцов (например, нужно вывести поле с привязкой к терминам таксономии) можно воспользоваться методом того же словаря admin_term_on_row, первым параметром которого будет объект текущего термина.
// app/components/Nodus/app/Taxonomy/Test.php class Component_Nodus_Taxonomy_Test extends Component_Nodus_Taxonomy implements Core_ModuleInterface { ... public function admin_term_on_row($term) { $term->title = '111111'; } ... }
Настройка фильтрации
Также можно переопределить форму для фильтрации. Для этого при описании полей нужно указать параметр in_filters, значения которого аналогичны in_list
Например:
// app/components/Nodus/app/Taxonomy/Test.php class Component_Nodus_Taxonomy_Test extends Component_Nodus_Taxonomy implements Core_ModuleInterface { ... public function fields() { return array( 'super' => array( 'caption' => 'Super!!!', 'type' => 'input', 'sqltype' => 'varchar(255)', 'tab' => 'common', 'in_list' => true, 'in_filters' => true, ), ); } ... }
Непосредственно для фильтрации списка нужно воспользоваться методом admin_mapper у того же словаря. В качестве аргументов передаётся маппер, который и предстоит фильтровать, и массив параметров для фильтрации.
// app/components/Nodus/app/Taxonomy/Test.php class Component_Nodus_Taxonomy_Test extends Component_Nodus_Taxonomy implements Core_ModuleInterface { ... // массив параметров принимает по ссылке public function admin_mapper($mapper, &$parms = array()) { if (isset($parms['super'])) { $mapper = $mapper->where('super LIKE :super', '%' . $parms['super'] . '%'); unset($parms['super']); // обязательно удаляем параметр } return $mapper; } ... }
Следует обратить внимание на два момента. Во-первых, массив параметров необходимо принимать по ссылке, во-вторых, связанное с во-первых, нужно обязательно удалить из массива параметров все добавленные вами поля, иначе может возникнуть ошибка. О причинах этого подробнее можно прочитать здесь.