Skip to content
butschster edited this page Feb 23, 2013 · 2 revisions

Behaviors ( тип страницы)

В стандартной комплектации KodiCMS страницы выполняют всего одну функцию - вывод контента из частей страниц.

Но иногда нам нужно вывести данные из собственного модуля, например - мы сделали модуль новостей и хотим выводить по URL http://site/news/my-first-news.html - новость со slug my-first-news из своего модуля. Именно для этого и существуют behavoirs - они позволят обращаться к своим данным по определенным условиям.

Как это работает

После того, как вы установили для определенной страницы (/news/) новый тип, например news, то при попытке в браузере зайти по URL /news/ либо /news/..., то система начнет искать класс Behavior_News и если он существует - вызовет его, если нет - выкинет Exception.

Также будет произведен поиск класса Model_Page_Behavior_News, если он будет найдет, то он будет объектом страницы news, если нет, то Model_Page_Front.

Все behaviors должны наследоваться:

  • Behavior_News от Behavior_Abstract и иметь метод execute().
  • Model_Page_Behavior_News от Model_Page_Behavior

При вызове класса Behavior_News в него передается по ссылке объект страницы news, а также uri относительный от /news/, т.е. если мы вызвали URL /news/articles/1234.html, то uri будет articles/1234. После того, как все параметры были переданны, происходит поиск нужного роута из списка указанных, если роутов не указано, то uri разбирается по знаку / и параметры будут доступны по числовому ключу, а именно array(0 => 'articles', 1 => '1234') и далее вызван метод execute

Model_Page_Behavior немного меняет логику вывода частей страниц, т.е. при вызове $page->content() в шаблоне сайта - сначала будет искаться метод Model_Page_Behavior_News::content_body и если найден, то вызван, иначе будет показана часть страницы part::body, то удобно если нужно выводить собственный контент.

Роуты

За основу роутов взят принцип роутов Kohana, только несколько проще.

Например:

protected $_routes = array(
	'/<category>/<news_id>' => array(
		'method' => 'get_news',
		'regex' => array(
			'news_id' => '[0-9]+'
		)
	),
	'/<category>' => array(
		'method' => 'get_category_news'
	),
);

Также как в роутах Kohana, все, что обрамлено скобками, является параметрыми и при разборе роута - будут являтся ключами сегментов uri.

У каждого роута есть параметр с ключом method, который указывает какой метод текущего класса запустить, если uri совпадет с текущим роутом, по умолчанию он равен execute.

Параметры можно получить через метод param, например $this->param('category'), вторым параметром метода указывается значение по умолчанию, в точности как в контроллерах.

Роут найден, метод вызван, что дальше

В момент вызова метода мы можем поменять текущие параметры страницы, например установить новые хлебные крошки, либо сменить meta_keywords, title и т.д., т.е. как то повлиять на вывод текущей страницы ну и соотвественно передать в объект страницы нужные параметры.

На этом статья закончена, если что то не понятно, задавайте вопросы

Clone this wiki locally