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; } } } ?>