家人们我真的哭死,上个月接了个企业站的优化单,首页做了精选推荐、热门排行、最新更新三个板块,结果上线第一天就被甲方爸爸追着骂:你这网站是只有3篇内容吗?三个板块撞了两篇就算了,翻来覆去给用户看同样的东西,留客率能高才怪!
我吭哧吭哧搞了三天才把帝国CMS标签排除已调用内容设置玩明白,说穿了这玩意儿就是你网站的“打饭监督员”——你想啊,你开个食堂,窗口1卖硬菜推荐,窗口2卖热门小炒,窗口3卖当日新菜,总不能把同一盘土豆炖牛肉同时往三个窗口摆吧?来吃饭的人看见直接就走了,网站用户也是同理,翻三屏都是看过的内容,直接秒退。帝国CMS标签排除已调用内容设置就是帮你记清楚哪些内容已经“端出去过”,后面的调用自动绕开,完美解决重复问题。
一开始我以为帝国CMS标签排除已调用内容设置就是加个notid参数那么简单,结果踩了N多坑,头发掉了十几根,先给你们把最常见的坑列出来:
所有操作的前提就是先建个空数组当“账本”,把每次调用过的内容ID都记在里面,这个数组一定要写在所有调用标签的最前面,不然后面的标签读不到数据。我把我一直在用的代码直接放出来,复制就能用:
``` // 定义空数组存储已调用的内容ID,放在页面最顶部 $already_call = array(); // 第一个调用板块,比如首页精选推荐 [e:loop={'news',10,18,0,'isgood=1','id desc'}]这里要注意,数组名你随便改,只要后面调用的时候对应上就行,我习惯用$already_call,好记。
有了“小黑本”之后,后面的调用只要把数组里的ID拼成字符串,加到notid的参数里就行,直接抄下面的代码:
``` // 把数组里的ID拼成逗号分隔的字符串,方便帝国CMS识别 $not_id = implode(',', $already_call); // 第二个调用板块,比如热门排行,排除已经调用过的ID [e:loop={'news',10,18,0,"id not in ($not_id) and isgood=0",'onclick desc'}]
这里有个必考点:每次调用完一定要把当前板块的ID也加到数组里!我当初就是漏了这一步,第二个板块和第三个板块还是撞了两篇内容,搞了半天才发现问题,你们可千万别犯这个低级错误。
如果有第三个、第四个板块,重复上面的步骤就行,每次调用前先把已经存的ID拼到notid里,调用完再把新的ID加进去,保证所有板块的内容100%不重复。
很多人做站会同时调用多个模型的内容,比如首页既有新闻又有图片还有视频,这时候帝国CMS标签排除已调用内容设置要稍微改一下,给每个模型单独建“小黑本”就行,举个例子:
``` // 分别建两个数组存不同模型的ID $news_call = array(); $photo_call = array(); // 先调用新闻模型 [e:loop={'news',5,18,0}]这样就算两个模型有相同的ID也不会冲突,完美解决跨模型重复的问题。
改完代码先别急着生成静态页,先开动态预览页测一遍,就是后台预览的那个动态地址,要是动态页已经没有重复内容了,再生成全站静态页。要是还有重复,就对着这三点排查:
要是你做的是列表页分页的帝国CMS标签排除已调用内容设置,记得把数组存在session里,不然第二页还会重复调用第一页的内容,这个小细节90%的教程都没提,我当初做列表页的时候踩了老大的坑,给你们顺便提一嘴。
说真的,帝国CMS标签排除已调用内容设置看起来是个小功能,但是做好了用户体验直接上一个台阶,我上次改完那个企业站,用户平均停留时长直接涨了23%,甲方爸爸现在有项目都优先找我,香得很。做网站就像种庄稼,你多抠点细节,收成肯定不会差,大家有啥设置上的问题可以评论区留个言,我看到了就给你解答,都是过来人,能帮一把是一把,大家一起搞钱才是硬道理!
下一篇: 帝国CMS标签置顶优先调用原理与实战指南
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图