写在头部:不想看我碎碎念的可以点击这里直接跳到解决方法
注意:如果你的网站的搜索模板不支持动态标签的调用,本方法可能不适合
由于帝国的搜索模板不支持动态标签的调用,所以我们基本上都会去搜索 帝国cms搜索模板支持动态标签
网上能搜索到的解决方法基本就一个,例如我写的这篇《帝国CMS搜索模板支持动态标签调用》,但是当你使用多个搜索模板的时候,却有一个很严重的bug。
一、bug复现
新闻搜索框:要使用新闻搜索模板
案例搜索框:要使用案例搜索模板
首先点击新闻搜索,搜索结果页使用新闻搜索模板,正常。
然后点击案例搜索,搜索结果页使用新闻搜索模板,不正常。
删除栏目缓存,更新数据库缓存。。。再次尝试
首页点击案例搜索,搜索结果页使用案例搜索模板,正常。
然后点击新闻搜索,搜索结果页使用案例搜索模板,不正常。
bug总结:当你更新完缓存以后,第一次搜索所使用的搜索模板是哪个模板,接下来的任何搜索都会使用这个模板
二、解决过程
这显然不是我们想要的,正常的情况是,我们点击新闻搜索,就用新闻搜索模板,点击案例搜索,就用案例搜索模板
经过N多次的测试,查找。突然想到我最开始为了让搜索模板支持动态标签调用,所以修改了搜索文件的源代码,也就是 /e/search/result/index.php 这个文件。是不是这个文件影响的呢?
我首先将这个文件备份,然后去帝国官网,下载了原版的帝国cms安装包,然后将原版的/e/search/result/index.php这个文件覆盖掉我修改过的文件(大家切记做好备份?),再次测试,发现正常了。
OK,原因找到了,/e/search/result/index.php 这个文件的修改,影响了帝国cms的正常搜索流程。
然后我就去网上各种找找找,发现都是提出这个问题的,并没有解决办法。
好吧,既然没有现成的解决方法,那就自己来吧
三、解决办法
打开/e/search/result/index.php
找到:
//页面支持标签
$tempr[temptext]=DtNewsBq('list'.$tempid,$tempr[temptext],0);
修改为:
//页面支持标签
$tempr[temptext]=DtNewsBq('list'.$search_r['tempid'],$tempr[temptext],0);
成品图:
好了,清除完缓存然后去试试吧~
ps: 本方法未经过大量验证,如果仍然有问题可以留言告诉我~
再ps:后来发现网上有大佬也写过类似的办法,大家可以点这个链接看看