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.
|
|
<?php /** * Рутовый класс для любого действия. * Описывает основной функционал для работы с классами действий. * $Id$ */ 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; } } } ?>
|