Извините, я не переиграл ранее.Быстро, я хотел бы представить один способ поймать это на ваше рассмотрение.Для простоты я просто сконцентрируюсь на кэшировании ваших выходных данных с помощью внешнего интерфейса Output.
В вашем application.ini вы можете настроить свой отлов следующим образом:
resources.cachemanager.myviewcache.frontend.name = Output
resources.cachemanager.myviewcache.frontend.customFrontendNaming = false
resources.cachemanager.myviewcache.frontend.options.lifetime = 7200
resources.cachemanager.myviewcache.frontend.options.caching = true
resources.cachemanager.myviewcache.frontend.options.automatic_serialization = true
resources.cachemanager.myviewcache.backend.name = Apc
Обратите внимание, что я использую Apc в качестве бэкэнда.Вы можете использовать файловый бэкэнд, если у вас нет или не хотите использовать Apc.
При этом я бы кешировал ваши посты и комментарии отдельно.Например, в _posts.phtml
вы можете сделать что-то похожее на следующее:
// first cache an output related to the body of your post with key being associated
// with your post.
if (!($this->viewCache()->start('post_' . (string) $this->object->post_id))) {
echo $this->object->title;
echo $this->object->text;
}
// now I cache an output of a comments associated with a give post
if (!($this->viewCache()->start('post_comments_' . (string) $this->object->post_id))) {
echo $this->partialLoop('_comments.phtml',$this->object->getComments());
}
В этом примере viewCache () помощник вида выглядит следующим образом:
class My_View_Helper_ViewCache extends Zend_View_Helper_Abstract {
/**
*
* @return Zend_Cache_Frontend_Output
*/
public function viewCache() {
return Zend_Registry::get('outputCache');
}
}
В то время как я установилoutputCache
в реестр в Bootstrap.php:
protected function _initPutChachesIntoRegistry() {
$this->bootstrap('cachemanager');
$cacheManager = $this->getResource('cachemanager');
Zend_Registry::set('outputCache', $cacheManager->getCache('myviewcache'));
}
Обратите внимание, что кэши связаны с ключами, которые, в свою очередь, относятся к данному сообщению и его комментариям.При этом, когда вы получаете новый комментарий, вы просто сбрасываете кеш, связанный с данным постом.Например, в действии вы можете удалить кэш комментариев для сообщения с $ post_id = 5 следующим образом:
$this->view->viewCache()->remove('post_comments_' . $post_id);
Надеюсь, что это поможет вам или, по крайней мере, даст вам некоторые идеи, как это сделать.