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

本文介绍如何在Magento中实现特定页面禁用全页缓存(FPC)并设置cookie,以解决缓存导致的cookie功能失效问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.youkuaiyun.com/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!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值