Нодус: Кастомизация списка терминов

Компонент: Nodus

Есть возможность для списка терминов словарей таксономии переопределить или добавить новые поля и формы для фильтрации.

Переопределение состава полей списка

Для переопределения столбцов таблицы или добавления нового необходимо при объявлении полей у требуемых указать параметр 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;
	}
...

}

Следует обратить внимание на два момента. Во-первых, массив параметров необходимо принимать по ссылке, во-вторых, связанное с во-первых, нужно обязательно удалить из массива параметров все добавленные вами поля, иначе может возникнуть ошибка. О причинах этого подробнее можно прочитать здесь.

Метки: Нодус
26.06.2014
Все статьи