Мы хотели бы добавить динамический блок на страницу продукта. Проблема в том, что страница продукта имеет полное кэширование страниц (и мы не можем отключить это из-за проблем с производительностью). Мы хотим отображать различную информацию на каждой странице продукта на основе зарегистрированной учетной записи пользователя и варьироваться от продукта к продукту.
Я создал отдельный блок, который имеет собственное кэширование, но отображает тот же блок с предыдущей страницы продукта. Я пытаюсь изменить метод кэширования, чтобы он не сохранял кеш с предыдущей страницы продукта.
Он работает в первые несколько раз, когда я перехожу на страницы продукта, но затем неожиданно начинает отображать страницу с ошибкой Magento, в которой говорится: "На веб-сайте произошла ошибка при получении http://www.mycompany.com/productpage.html Он может быть недоступен для обслуживания или неправильно настроен."
Вот что я сделал до сих пор. Я создал приложение/код/локальный/MyCompany/MyModule/PageCache/etc/config.xml для добавления MyCompany_PageCache_Model.
Затем я создал файл, который управляет кэшированием в app/code/local/MyCompany/MyModule/PageCache/Model/Container/MyFile.php с помощью следующих функций:
protected function _getCacheId()
{
return 'CONSTANT_CACHE' . md5($this->_placeholder->getAttribute('cache_id'));
}
protected function _saveCache($data, $id, $tags = array(), $lifetime = null)
{
return false;
}
protected function _renderBlock()
{
$blockClass = $this->_placeholder->getAttribute('block');
$template = $this->_placeholder->getAttribute('template');
$block = new $blockClass;
$block->setTemplate($template);
$block->setLayout(Mage::app()->getLayout());
return $block->toHtml();
}
Я также создал cache.xml под Каталогом /etc с моим заполнителем для CONSTANT_CACHE.
Является ли приведенный выше синтаксис неправильным, или есть более простой способ сделать это?