- 修改搜索程序文件:让搜索程序能够读取和处理自定义字段。
- 修改搜索模板文件:让搜索结果页能正确显示自定义字段的内容。
下面我将为你提供详细的、可操作的步骤。

第一步:修改搜索程序文件(核心步骤)
这一步的目的是告诉Dede的搜索引擎,除了默认的 title (标题) 和 body (内容) 字段外,还要去查询你指定的自定义字段。
核心文件: /plus/search.php
操作步骤:
-
备份文件:在修改任何文件之前,请务必备份
/plus/search.php文件,以防出错。
(图片来源网络,侵删) -
打开文件:使用FTP或主机控制面板的文件管理器,打开
/plus/search.php文件。 -
定位关键代码:找到处理搜索逻辑的核心代码段,通常在文件中下部,包含
arc_search类的实例化和查询执行的部分。 -
修改
arc_search.class.php的调用: 在search.php中,找到类似下面这行代码:$arcsearch = new arcSearch($typeid,$keyword,$type,$channelid,$orderby,$table,$mid,$kwtype,$scode,$ptime,$searchtime);
这行代码实例化了
arcSearch类,我们需要修改这个类,让它能接收并处理自定义字段。
(图片来源网络,侵删) -
修改
arcSearch.class.php文件: 这是实现功能最关键的一步,我们需要修改arcSearch类,它位于/include/arc.search.class.php。同样,先备份这个文件!
a. 修改构造函数
function __construct()在构造函数中,找到定义this->AddSql的地方,这个变量最终会生成SQL查询语句,我们需要在这里添加对自定义字段的支持。找到类似这样的代码段:
// ... 其他代码 ... if($this->typeid > 0) { $this->AddSql .= " And arc.typeid='$typeid' "; } // ... 其他代码 ... $this->AddSql .= " And (arc.title like '%$keyword%') "; // ... 其他代码 ... $this->AddSql .= " Or (arc.body like '%$keyword%') "; // ... 其他代码 ...我们需要在这里加入自定义字段的查询,假设我们要搜索的自定义字段是
zuozhe(作者) 和dizhi(地址)。修改方法:在
Or (arc.body like '%$keyword%')这一行后面,添加你的自定义字段查询。// ... 其他代码 ... $this->AddSql .= " Or (arc.body like '%$keyword%') "; // 【核心修改】在这里添加自定义字段的搜索 // 假设你的自定义字段是 zuozhe (作者) 和 dizhi (地址) // 注意:字段名前要加上 'add.' 前缀 $this->AddSql .= " Or (arc.add.zuozhe like '%$keyword%') "; $this->AddSql .= " Or (arc.add.dizhi like '%$keyword%') "; // ... 其他代码 ...
重要提示:
- 字段名:
zuozhe和dizhi是你自己在后台模型里定义的字段名。 - 前缀:自定义字段在
dede_archives表中存储在addtable(附加表) 里,Dede在查询时会用add.前缀来引用它。 - 多个字段:如果你有多个字段需要搜索,就用
Or连续添加即可。
b. 修改
GetKeywordSql()方法(可选,但推荐) 这个方法用于处理高亮关键词,为了让高亮功能也能在自定义字段上生效,最好也在这里同步修改。找到
GetKeywordSql方法,在里面也添加相同的字段逻辑。// 在 GetKeywordSql 方法中找到处理 body 的地方,在其后添加 $keywordSql .= " Or (arc.body like '%$keyword%') "; // 【核心修改】同步添加自定义字段的高亮逻辑 $keywordSql .= " Or (arc.add.zuozhe like '%$keyword%') "; $keywordSql .= " Or (arc.add.dizhi like '%$keyword%') ";
- 字段名:
-
完成修改:保存并上传你修改好的
arc.search.class.php和/plus/search.php文件。
第二步:修改搜索模板文件
修改完程序后,搜索功能已经可以找到包含自定义字段关键词的文章了,在搜索结果页(search.htm)上,这些自定义字段的内容并不会自动显示出来,你需要手动在模板中调用它们。
核心文件: /templets/default/search.htm (或者你当前使用的搜索模板)
操作步骤:
-
打开模板文件:打开你的搜索结果模板文件。
-
定位结果循环区域:找到
{dede:arclist}标签,这是循环输出搜索结果的地方。 -
调用自定义字段:在
{dede:arclist}标签内部,使用{dede:field}标签来调用你需要的自定义字段。假设你的自定义字段是
zuozhe(作者) 和dizhi(地址),你可以这样添加:<div class="result-item"> <h3><a href="[field:arcurl/]">[field:title/]</a></h3> <p class="intro">[field:info/]...</p> <!-- 【核心修改】在这里添加自定义字段的显示 --> <p class="meta"> 作者:{dede:field name='zuozhe'/} | 来源:{dede:field name='dizhi'/} </p> </div>说明:
[field:zuozhe/]或{dede:field name='zuozhe'}这两种写法都可以调用自定义字段。- 确保字段名
zuozhe和dizhi与你在后台定义的完全一致。
-
保存并刷新:保存模板文件,然后清空一下网站缓存(后台-系统-SQL命令工具-执行
Delete From dede_arccache),然后重新进行搜索测试。
总结与注意事项
- 备份是王道:在修改任何核心文件前,请务必备份。
- 字段名要准确:确保在代码中调用的自定义字段名与你在后台内容模型中定义的字段名完全一致,区分大小写。
- 性能考虑:每增加一个自定义字段的搜索,都会让SQL查询变得更复杂,对数据库的负载也会略有增加,不要添加过多不必要的字段进行搜索。
- SEO URL:如果你的搜索页面使用了伪静态(如
/search/关键词.html),请确保后台的“栏目设置”中开启了“使用动态页”选项,或者在后台“系统”->“核心设置”中关闭“使用rewrite”。 - 测试:修改后,请务必进行充分测试,确保搜索功能正常,且返回的结果正确。
通过以上两步,你就可以成功地为DedeCMS 5.7的搜索功能添加自定义字段的搜索和显示了。
