如果您试图在模板/phtml文件中或块类内部使其工作,那么会很困难。主要是因为Magento(积极地)缓存您的PHTML块以提高性能,从而撤销任何与Cookie检查相关的程序流控制语句。我没有直接/冗长/深入的解释,但这就是我一次又一次遇到的情况。
然而,您的解决方案应该是正确的,但您需要在控制器的preDispatch方法中进行检查,以避免上述侵略性缓存,因为控制器永远不会被缓存。(在您链接的问题中,
Nick的解决方案中显示了如何执行此操作。)
Mage::getSingleton('core/session', array('name' => 'adminhtml'))->start();
$admin_logged_in = Mage::getSingleton('admin/session', array('name' => 'adminhtml'))->isLoggedIn();
Mage::getSingleton('core/session', array('name' => $this->_sessionNamespace))->start();
如果您确实需要在PHTML文件或命名块中执行上述检查,请查看以下代码,了解如何关闭块级缓存并
可能使其正常工作。我之前所做的是禁用页脚块的缓存(其中子块,而不是phtml,包含用于检查特定cookie的代码)。
首先,块调用(在local.xml、模块布局更新xml或任何可以进行布局更新的地方找到。我更喜欢将我的自定义内容分成模块,因此模块布局更新xml是最好的选择):
<reference name="footer">
<action method="unsetData"><key>cache_lifetime</key></action>
<action method="unsetData"><key>cache_tags</key></action>
<block type="newsletterpopup/popup" name="newsletterpopup_footer" template="newsletterpopup/popup.phtml"/>
</reference>
这是newsletterpopup的块类:
<?php
class Launchpad_Newsletterpopup_Block_Popup extends Mage_Core_Block_Template {
public function canRender() {
}
public function afterRender() {
}
}
而phtml可能是这样的:
<?php if($this->canRender()): ?>
<?php endif; ?>
祝你好运!