You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
3.2 KiB

<?php
/**
* Рутовый класс для любого действия.
* Описывает основной функционал для работы с классами действий.
*
* @copyright
* @link
* @package Majestic
* @subpackage Action
* @since
* @version SVN: $Id$
* @filesource $URL$
*/
abstract class Action
{
public $template; //шаблон действия
public $template_dir = '.'; //путь к шаблону действия
public $class; //имя дочернего класса
protected $templater; //шаблонизатор
public function __construct()
{
$this->class = get_class($this);
$this->template = substr($this->class, 0, -strlen(ACTION_POSTFIX));
if (CACHE_ENABLE && ($cache_name = $this->getCacheKey()) !== false) {
$cache = new Cache($this->class.'_'.$cache_name, $this->getCacheTime());
if ($cache->isCached()) {
$this->restore($cache->load());
} else {
$this->init();
$cache->save($this->store());
}
} else {
$this->init();
}
}
/**
* Выдает результат действия.
*
* @return string
*/
public function display()
{
$this->templater = Load::templater(ACTION_TPL_PATH.'/'.$this->template_dir);
$this->prepare();
return $this->templater->fetch($this->template.'.tpl');
}
/**
* Инициализация данных действия.
* Тут должна быть ВСЯ работа с установкой данных,
* дабы потом они нормально закешировались.
* Этот метод НЕ исполняется при срабатывании кеша.
*
*/
abstract protected function init();
/**
* Подготовка данных для шаблона.
* Этот метод выполняется ВСЕГДА
*/
protected function prepare() {}
/**
* Возвращает имя файла для кеширования
* Переопределяется в доченрих классах.
*
* @return false/string - имя файла кеша либо false если кеш запрещен
*/
protected function getCacheKey()
{
return false;
}
/**
* Возвращает время жизни кеша в секундах
* При отрицательном значении кеш вечен.
* Переопределяется в доченрих классах.
*
* @return false/integer - время жизни кеша либо false если кеш запрещен
*/
protected function getCacheTime()
{
return 0;
}
/**
* Выдает строку для кеширования.
*/
protected function store()
{
return serialize(get_object_vars($this));
}
/**
* Разбирает строку кеша, созданную методом store
*/
protected function restore($data)
{
foreach(unserialize($data) as $key => $val) {
$this->$key = $val;
}
}
}
?>