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即可 示例代码如下
其实setcookie在magento里面比较简单 但是后来我发现和我网站本身的EE FPC(企业版全页缓存)会发送冲突 使用了FPC后 页面会在不刷新缓存的情况下永远不会发生变化 (为此我调试了很久才发现有这个问题)那么cookie的功能就无法施展 看来只有在这个页面禁用FPC了 做法是创建自定义Observer和Event来完成。关于观察者事件和模块创建过程 大家可以参考我之前的文章。http://www.blog.csdn.net/ddjohn
首先在模块的config.xml里面创建自定义的观察者
然后Observer.php如下:
效果是一样的 只需要用两个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!
相关文章推荐
- sssp整合&分页之完成添加操作之显示页面&使用JPA二级缓存
- jsp 页面 Cookie 操作及判断
- Auzre微软云Redis后台StackExchange.Redis使用KeySpaceNotification实现缓存过期前操作/处理一些事件
- 页面静态化3 --- 使用PHP页面缓存机制来完成页面静态化(下)操作一个案例(新闻管理系统)
- Jsp页面关于BootStrap模态框和<a href onclick>事件不能同时使用,以及传参的问题
- javaweb之response随机生成图片验证码加载到web页面中(本实例使用了禁止浏览器缓存头),并且单击使用javascript换图片
- 有关Filter(过滤器)实现禁用缓存和使用缓存操作的实现
- 2013-01-28 09:46 PHP阻止页面后退如何用PHP实现禁用浏览器的后退,使后退的页面失效或链接到别的地方?使用php禁止浏览器缓存?
- Oracle 远程访问配置 在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标 C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素” C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper Decimal类型截取保留N位小数向上取, Decimal类型截取保留N位小数并且不进行四舍五入操作
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEvent
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterF
- Magento如何使用和设置Cookie&Session
- 有关Filter(过滤器)实现禁用缓存和使用缓存操作的实现
- 使用js事件机制进行通用操作&特定业务处理的协调
- 数据库操作(初期)&&清除缓存的简单使用
- 有关采用Filter实现禁用缓存和使用缓存操作实现与分析
- 有关采用Filter实现禁用缓存和使用缓存操作实现与分析
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterF
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。