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

В транковой версии на github.com появилась возможность выносить объемную обработку евентов из экшена в отдельные файлы.

Эти файлы размещаются в каталоге /classes/actions/[action]/Event[Name].class.php, где [action] — это название экшена, которому принадлежит евент, [Name] — название внешнего обработчика евента.

Рассмотрим более подробно.
Пусть у нас будет экшен ActionBlog.class.php:
<?php

class ActionBlog extends Action {

	public $oUserCurrent=null;

	public function Init() {
		$this->oUserCurrent=$this->User_GetUserCurrent();

		$this->SetDefaultEvent('index');
	}

	/**
	 * Регистрируем евенты
	 *
	 */
	protected function RegisterEvent() {
		/**
		 * Регистрируем внешние обработчики евентов
		 */
		$this->RegisterEventExternal('Topic','ActionBlog_EventTopic');

		$this->AddEvent('index','EventIndex');
		$this->AddEventPreg('/^topic$/i','/^(\d+)\.html$/i','/^$/i','Topic::EventShowTopic');
		$this->AddEventPreg('/^topic$/i','/^list$/i','/^$/i','Topic::EventList');
	}


	protected function EventIndex() {
		/**
		 * Устанавливаем шаблон для вывода
		 */
		$this->SetTemplateAction('index');
	}
}
?>

Читать дальше →

Регистрация нового экшена

Пользовался поиском — но ответа так и не нашел… Подскажите пожалуйста, как зарегистрировать новый Action и привязать к нему соответствующую tpl?

К примеру, я хочу сделать новый раздел сайта site.ru/rules или site.ru/help, то как мне зарегистрировать экшен?

Статичные страницы не предлагайте, не подходит для моего проекта…
Помогите пожалуйста, многим будет полезно. Если инфа уже есть на сайте, не ругайте, а просто ткните носом ссылкой… Заранее спасибо!

Как будет правильнее?

Требуется переопределить методы в нескольких экшенах, буду писать плагин, и в папке с плагином в папке classes/actions будут те файлы экшенов которые мне и нужно переопределить, все вроде верно, но если это будет 3 и более файлов не пострадает ли быстродействие сайта с таким плагином? как лучше это реализовать?

обработка url вида: /blog/123

Привет всем!
Парни где происходит обработка url вида: /blog/123/?
Короче сделал несколь новых экшенов добавил в коллективные и персональные вывод всех постов, а в index щас выводиться все посты, в новом экшене good, выводяться все хорошие. Так вот когда, перехожу в коллективный блог,(/blog/123/) то тут 3 пункта все хорошие и плохие, по умолчанию выделено хорошие, но урл вида /blog/123/, по идеи должен вывести все посты в этом блоге, но нет, а урл /blog/123/good/ должен вывести хорошие но выводит 404.

Отображение блока на странице со статьей

Собственно необходимо отображать дополнительный блок только на странице вида site.ru/blog/blog_name/bla-bla.html — т.е. непосредственно на странице статьи. При добавлении в экшен classes\actions\ActionBlog.class.php блок видно и на странице блога, списка блогов и т.д.

Вопрос: что делать? ;)

Ответ: Использовать в шаблоне блока конструкцию типа:

{if $oUserCurrent}        
{if $oTopic}
содержимое шаблона
{/if}
{/if}

Предопределение путей к экшенам, и еще один момент

Было бы здорово до релиза, пока еще не заверстан новый дизайн, предопределить пути константами. Движок можно конфигурировать под разные задачи и типы сайтов, однако немного не хватает гибкости с путями. Варианты переименования — за слешами.

В темплейтах конструкция "/blog/" встречается довольно часто, можно пройтись и везде поменять пути вручную, но тогда обновление частей движка через SVN — приведет к ошибкам.

define('LSPATH_PROFILE','profile');	//e.g. user
define('LSPATH_PEOPLE','people');	//e.g. users
define('LSPATH_BLOG','blog');		//e.g. community
define('LSPATH_LOG','log');		//e.g. blog
define('LSPATH_MY','my');		//e.g. blog
define('LSPATH_PAGE','page');		//e.g. static

return array(
	'page' => array(		
		LSPATH_PROFILE => 'ActionProfile',
		LSPATH_BLOG => 'ActionBlog',
		LSPATH_PEOPLE => 'ActionPeople',
	)
);


Читать дальше →