-
Notifications
You must be signed in to change notification settings - Fork 35
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
, только несколько проще.
Например:
public function routes() { return array( '/<category>/<news_id>' => array( 'method' => 'get_news', 'regex' => array( 'news_id' => '[0-9]+' ) ), '/<category>' => array( 'method' => 'get_category_news' ), ); }
Также как в роутах Kohana, все, что обрамлено скобками, является параметрыми и при разборе роута - будут являтся ключами сегментов uri.
У каждого роута есть параметр с ключом method
, который указывает какой метод текущего класса запустить, по умолчанию он равен execute
.
Параметры можно получить через метод param
, например $this->param('category')
, вторым параметром метода указывается значение по умолчанию, в точности как в контроллерах.