Нодус:Редактирование итема из структуры

Компонент: Nodus

При формировании структуры сайта в качестве узлов можно использовать материалы нодуса. При этом редактировать материалы из структуры по умолчанию невозможно. Но можно организовать редактирование и запись в БД изменений в материале непосредтсвенно из навигационной структуры сайта.

Данный метод работает начиная с TAO v2.1.48 (пример действителен для Nodus с версии 3, для более ранних нужно поменять имена соответствующих событий).

1. Необходимо создать модуль, в котором будут описано дополнительное поле с ссылкой на форму редактирования материала.

Для этого создадим модуль с имененем Structure.php и опишем следующие методы:

// /app/lib/Structure.php

class App_Structure implements Core_ModuleInterface
{
	static function initialize()
	{
		Events::add_listener("nodus.app.admin.structure.tree_fields", 'App.Structure::structure_columns');
		Events::add_listener("nodus.app.admin.structure.on_row", 'App.Structure::structure_row');
	}

	static function structure_columns(&$fields)
	{
		$fields['edit_item'] = array(
			'caption' => 'Запись в БД',
			'formatter' => 'Slick.Formatters.Raw'
		);
	}

	static function structure_row($row, $controller)
	{
		$url = '';
		if (preg_match('~^:([0-9]+)~', $row->url, $m)){
			$url = WS::env()->urls->nodus->admin_edit_url($m[1]);
		}
		if ($url) {
			$row['edit_item'] = '<a href="'.$url.'">Редактировать</a>';
		}
	}
}

2. Подключим модуль в index.php.

// www/index.php

Core::load('App.Structure');

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

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