您的位置:首页 > 其它

Magento操作Cookie 并且使用观察者&事件来禁用单页面全页缓存(EE FPC)

2012-08-17 15:34 399 查看
Groupon(http://www.groupon.hk/)的首次访问会弹出一个框让客户输入电子邮件来订阅他们的最新咨询,只要提交表单或者点已经提交的按钮该框就会消失 并且以后访问都不会出现 大家应该见过 最近按照公司的要求需要在magento里面开发类似的效果。 首先明确这其中使用的原理是cookie 那magento该怎么操纵cookie呢 其实在core的model里面有一个cookie类 它简单地封装了php原本的setcookie函数
效果是一样的 只需要用两个functoin来get和set即可 示例代码如下

<?php
/**
* set cookie
* name and value are mandatory; other parameters are optional and can be set as null
* $period = cookie expire date in seconds
*/
Mage::getModel('core/cookie')--->set($name, $value, $period, $path, $domain, $secure, $httponly);
/**
* get cookie with a specific name
* $name = name of the cookie
*/
Mage::getModel('core/cookie')->get($name);
/**
* get all cookies as an array
*/
Mage::getModel('core/cookie')->get();
/**
* delete/remove cookie
* $name is mandatory; other parameters are optional and can be set to null
*/
Mage::getModel('core/cookie')->delete($name, $path, $domain, $secure, $httponly);
?>


其实setcookie在magento里面比较简单 但是后来我发现和我网站本身的EE FPC(企业版全页缓存)会发送冲突 使用了FPC后 页面会在不刷新缓存的情况下永远不会发生变化 (为此我调试了很久才发现有这个问题)那么cookie的功能就无法施展 看来只有在这个页面禁用FPC了 做法是创建自定义Observer和Event来完成。关于观察者事件和模块创建过程 大家可以参考我之前的文章。http://www.blog.csdn.net/ddjohn

首先在模块的config.xml里面创建自定义的观察者

<events>
<controller_action_predispatch>
<observers>
<yip_setcookie_disable_groupsale>
<class>Yip_Setcookie_Model_Observer</class>
<method>processPreDispatch</method>
</yip_setcookie_disable_groupsale>
</observers>
</controller_action_predispatch>
</events>


然后Observer.php如下:

<?php
class Yip_Setcookie_Model_Observer
{
/**
* Disable FPC for group sale page
* used for event: controller_action_predispatch
*
* @param Varien_Event_Observer $observer
* @return Yip_Setcookie_Model_Observer
*/
public function processPreDispatch(Varien_Event_Observer $observer)
{
$action = $observer->getEvent()->getControllerAction();
$requestUri = $action->getRequest()->getRequestUri();

// Check to see if $requestUri is equel to group sale page uri
if(strstr($requestUri, "your-page-url"))
{
$request = $action->getRequest();
$cache = Mage::app()->getCacheInstance();

// Tell Magento to 'ban' the use of FPC for this request
$cache->banUse('full_page');
}

return $this;
}
}
这样做便在单个页面禁用了FPC 并且cookie可以使用自如了。cheers!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐