实战给AW_Blog插件添加缓存

            aheadworks公司的Blog插件可以算是Magento所有免费插件中最有名也是使用最广泛的一个插件了,就我自己来说,也是每个项目的必备插件(我一般用来做为新闻插件使用)。今天拿它做例子演示下给Block添加缓存(Cache)。

    

   这个截图是我某个项目使用aw_blog插件的实例,使用AW_Blog_Block_Blog这个block文件在首页输出某个新闻类别下的新闻列表,aw_blog插件本身是没给输出内容做过缓存处理的,也就是说,即便你一天或几天才更新一次新闻,页面每次载入时依然要从数据库里把这些数据取一遍,这个是比较没必要的。

下面来给这个Block加上缓存,Magento本身已经提供了一套给Block添加缓存的写法,只需要简单的加几句代码就可以

protected function _construct()
    {
        $this->addData(array(
            'cache_lifetime'=> 86400,
            'cache_tags'    => array(AW_Blog_Model_Post::CACHE_TAG)
        ));
}

其中cache_lifetime指缓存周期,这里我设置的是86400秒,也就是一天,cache_tags指给该缓存设定的标签,这里我设置的是post这个model的一个常量。做完这一步,这个block文件的缓存就好了,页面载入时,这块内容不会再每次去数据库取数据,而是直接载入缓存好的html,减少了页面载入所消耗的时间。

到这一步,整个工作才完成了一半,为什么这么说呢?这里可以做个实验,在加完以上的代码并刷新过一次页面后,数据已经写进缓存文件里了,这时候去后台新增或修改一篇新闻,你会发现前台页面的内容并没有跟着改变,而是维持之前的内容。那么什么时候才会变成新的内容呢,一天之后,因为之前给缓存设置的有效时间是一天,一天之内的有效期内,页面都会去读取缓存文件而不是数据库。这时候你可以这样处理,在后台修改过内容后,手动刷新后台的缓存,让效果实时可见,或者用更好的方案,通过程序控制,在每次新闻内容新增或修改时自动刷新对应的缓存。

打开AW_Blog_Model_Post这个文件,在头部定义一个常量

const CACHE_TAG       = 'aw_blog';

在底部添加如下代码

  public function cleanCache()
    {
        Mage::app()->cleanCache(self::CACHE_TAG);
        return $this;
    }

    	public function _beforeSave(){
      $this->cleanCache();

		return parent::_beforeSave();
	}

该常量即是之前给Blog添加的缓存的cache_tags,_beforeSave函数是所有Model类继承自父类的方法,可以在该Model对应的对象实体保存数据时触发,这里重写_beforeSave,去调用一个cleanCache函数,cleanCache函数里只有一句重要的代码,就是Mage::app()->cleanCache(self::CACHE_TAG),这个方法可以清除指定标签(tag)的缓存,比如这里,它只会清除tag为aw_blog的缓存,而不是全部系统缓存。

从完整的流程来说,首先前台页面第一次载入时,该Block会将内容缓存进缓存文件,然后当后台保存新闻时,通过cleanCache会清除指定Tag的缓存,这之后再次载入页面时就会生成新的缓存文件。这样就做到了缓存新闻内容以提高速度的同时,依然可以在后台做出数据改变时在页面实时显示新的数据。

新闻数据在页面上一般所占空间不大,即使缓存起来可能也不会对加载速度有很明显的提升,这里只是以此为例子展示下Magento所提供的Block缓存机制。这个例子很简单,如果要对其他东西做缓存可能会有各种更复杂的流程,这里不再探讨。

PS:本文的前提是你在后台已经把Magento的缓存打开了

参考文章:http://www.magentocommerce.com/wiki/5_-_modules_and_development/block_cache_and_html_ouput

     

时间: 2024-11-17 04:36:25

实战给AW_Blog插件添加缓存的相关文章

实战给AW_Blog插件添加缓存(续)

两年前的文章(实战给AW_Blog插件添加缓存)描述了一个Block Cache的实例,最近发现代码其实写的有点累赘,后台保存时自动触发刷新缓存并不需要自己去写刷新的动作,系统原生的Model继承类Mage_Core_Model_Abstract里已经有实现这个动作的代码,只需要简单的配置下变量就能实现.修改后的方案如下(Block类的所需修改代码不变) 打开AW_Blog_Model_Post这个文件,在头部定义一个常量,再定义一个变量 const CACHE_TAG = 'aw_blog';

增强AW_Blog插件之后台文章列表添加分类栏

AW_Blog插件是Magento必备的免费插件之一,一般来说我是用来做新闻插件,甚至是用来作为一个简单的CMS,来补强Magento孱弱的文章发布管理功能.当然以CMS的角度来衡量,AW_Blog还是太简陋了,其中一点就是,虽然AW_Blog提供了文章分类的功能,添加文章时可以选择属于哪个分类,但是在后台的文章列表页面,并没有分类这一栏,这让管理这些文章带了不少麻烦,特别是在文章数量比较多的时候.所以这里提供一个AW_Blog的增强补丁供大家下载,上传覆盖原有的AW_Blog文件后,文章列表的

增强AW_Blog插件之后台文章编辑新增一图片字段

上一次讲了给AW_Blog插件后台文章列表添加分类栏,今天继续来加强AW_Blog,给每个文章新增一个独立的图片字段.为什么要新加一个字段呢,文章内容里不是也可以添加图片吗?这是因为某些情况下,独立的图片字段是必需的,如果要把AW_Blog当做一个简单的CMS来用的话,如下图: 这里跟文章相关的图片,如果没有独立的图片字段,那就只能想办法从文章内容中抓取图片出来,不仅难度很高(专业CMS都有这个功能),而且无法保证图片比例的一致性,这时候有一个单独的图片字段的话就可以针对性的上传要显示的图片.

谷歌浏览器怎么使用infinity插件添加个性化新标签页?

谷歌浏览器怎么使用infinity插件添加个性化新标签页?   1.首先打开[Chrome浏览器],在网址输入框内输入网址,网址在下图 2.进入infinity官网以后,找到[下载离线Crx文件]并点击下在,上面提供下载了. 3.下载完成之后,要先找到Chrome浏览器的下载目录(浏览器默认文件夹都如下图所显示) 4.然后回到Chrome浏览器,再右上角X下面有一个三点的菜单,并点击,找到[工具]→[拓展程序]点击一下

eclipsercp-EclipseRCP 向原有插件添加新菜单项

问题描述 EclipseRCP 向原有插件添加新菜单项 point="org.eclipse.ui.popupMenus"> objectClass="org.eclipse.ui.IEditorInput" nameFilter = "*.*" id="zzzz.contribution1"> label="New menu" path="additions" id=&qu

jQuery 如何给Carousel插件添加新的功能_jquery

本文是小编自己写的一个给carousel插件添加新功能,关于Carousel插件的教学视频.参考别的网站,当鼠标放在下排按钮上或者点击之后,Carousel就会跟这个按钮相同下标的li作为第一帧显示. 所有的代码都在这里https://github.com/wwervin72/jQuery-Carousel 那么说干就干,首先我们要做的就是要把这些按钮显示出来.于是我们就需要在Carousel的原型对象prototype上添加一个方法,用于生成切换幻灯片的按钮. switchSlideBtn :

jQuery Validate表单验证插件 添加class属性形式的校验_jquery

本文实例介绍了jQuery Validate 表单验证插件,添加class属性形式的校验,分享给大家供大家参考,具体内容如下 效果如下: 一.jQuery表单验证插件,添加class属性形式的校验 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>jQuery表单验证插件----添加cla

wordpress的wp-pagenavi插件添加nofollow

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 阿峰发现好多朋友的SEO博客站都是使用wordpress程序做的,不得不说wordpress程序非常适合制作博客站,阿峰的站就是用wordpress程序做的.WordPress分页插件WP-PageNavi(中文名:分页导航)是非常受欢迎的分页插件,并且还支持WordPress多站点,阿峰的SEO博客用的就是这个插件. wp-pagenavi

为Eclipse插件添加日志框架

两种增强Eclipse日志功能的方法 为什么要采用日志? 良好的开发人员都知道精心设计.测试和调试的重要性.虽然 Eclipse 可以帮助开发人员实现这些任务,但是它怎样处理日志呢?很多开发人员相信对于良好的软件开发实践来说,日志是不可或缺的一部分.如果您曾经修正过他人部署过的程序,您无疑也会同意这一点.幸运的是,日志对于性能的影响很小,大部分情况下甚至根本不会对性能产生任何影响,而且由于日志工具非常简单易用,因此学习曲线也非常平滑.因此,对于现有的优秀工具,我们没有理由不在应用程序中添加日志功