Valeriy (27.06.2011 18:02) писал:
Суть модуля: при переходе пользователя на сайт, появлеться popup окно с информацией. Появляеться она один раз. (данные заносятся в сессию, и далее проверяеться на наличие в ней перемнной). Все работает хорошо, если отключен кеш.
При включенном - блок или всегда показывается, или никогда.
Пока пробелму решил так (в конструкторе блока):
Mage::app()->cleanCache();
Но ето, насколько я понимаю, чистится весь кеш, что не очень хорошо.
Можно ли как нибудь выключть кеширование для определенного модуля?
Валерий, мадженто ведет себя совершенно верно. Как и задумывалось. А вот ваш подход не совсем правильный учитывая архитектуру мадженты.
Советую вам при инициализации блока устанавливать ключ кэширование с учетом переменной воздейсвующей на вывод. Если их несколько то включите их в образование ключа кэширования обязательно. Я сам себя не понял, поэтому на примере :-)
<?php
class {Namespace}_{Modulename}_Block_{Path_To_Blockname} extends Mage_Core_Block_Template
{
const CACHE_KEY = 'modulename';
protected function _construct()
{
$dependant = Mage::getSingleton('customer/session')->isLoggedIn() ? 'loggedId' : 'loggedOut'; // переменная влияющая на кэш
parent::_construct();
$this->setCacheKey(self::CACHE_KEY . '_' . $dependant);
}
//.. ............ ............
//.. ............ ............
//.. ............ ............
}
?>
А если переменная влияющая на кэш не доступна во время инициализации блока, то можно так.
<?php
class {Namespace}_{Modulename}_Block_{Path_To_Blockname} extends Mage_Core_Block_Template
{
const CACHE_KEY = 'modulename';
public function getCacheKey()
{
$dependant = Mage::getSingleton('customer/session')->isLoggedIn() ? 'loggedId' : 'loggedOut'; // переменная влияющая на кэш
return self::CACHE_KEY . '_' . $dependant;
}
//.. ............ ............
//.. ............ ............
//.. ............ ............
}
?>
А вобще мадженто проверяет есть ли у блока кэш перед непосредственным рендерингом блока.