最近一项目碰到个小需求,用户的“访问记录”(即用户浏览过指定内容类型的页面,按照访问时间显示在指定区块中) 
本来以为是个小毛毛雨,自带的block中应该有吧。。。结果让我很失望,不仅自带区块中没有,搜遍了modules,也没有相近功能的。结合相关功能,想了下,利用watch dog 表应该可以,输出的结果很不好,因为包括了系统页面的地址,就是说如果访问了出错页面,同样也会登上浏览记录,而且该表中任意页面记录都有独立的id,意味我访问10次404页面,watch dog 的输出结果也会按照访问时间排出该404页10次。。。最大的一个问题,还不能有效的theme。。。只有放弃。 为了实现,drupal 搜索大法。。。不懈搜索后,找到篇不错的文章,并且也顺利测试通过,分享给大家: 1.下载、安装 rules, flag, views 2.配置flag : (1) 创建1个名为 recently_viewed 的flag,配置如下图 
(2) 然后在到rules - > Triggered rules 页面,创建一个名为 Re-flag node recently_viewed 的rule, 其中 IF 选项卡 添加 1个Check a truth value的conditio,图示如下: 
在check a truth value 配置页面,Truth value:* 项填入 <?php echo $page ?>,如下图: 
接下来在 DO 选项卡 添加2个action,分别名为 Unflag viewed content, under "Recently viewed"(意义是打开页面先执行unflag) 
以及Flag viewed content, under "Recently viewed"(意义为打开页面执行flag),如下图 
(3) 通过views 建立需要输出的字段并可theme,这里只需要输出带链接到文章的标题就行了,当然也可以加上文章缩略图、建立时间等等字段,根据需求而定。如图: 
建立views中主要注意的是,建立之前的flag 的 Relationships,设置如上图,然后Sort criteria排序方式按照flag的时间降序排列。其他的设定都可根据自己的需求而定。 所有的步骤结束,那么你的“浏览记录”也就生成了,呵呵。
ps:经测试,如果用panel构建的node页面框架的话,那么上面的方法将完全失效,panel同rules和flag都有兼容性的问题。还有一定,就是如果是要让匿名用户也具有“浏览记录”的话,需要在增加一个Session api模块,安装后会有用户访问权限的选项自动增加到flag设置中去。
猪跑啦独家原创专稿,欢迎您转载本文,转载请注明来源。 |