许多用户希望在DEDE系统中实现自定义字段搜索功能,但官方并未提供相关支持。经过研究,我成功实现了这一功能,并在此分享适用于DEDE 5.0版本的教程(DEDE 5.1版本可能类似)。以下是具体步骤:
一、打开数据库,找到 dede_full_search 表,在其中添加你需要的自定义字段。例如,我在网站中添加了 myskill、myexchange、mygoods 和 myexgoods 这四个字段。
/* 示例字段 */
ALTER TABLE `dede_full_search` ADD COLUMN `myskill` VARCHAR(255);
ALTER TABLE `dede_full_search` ADD COLUMN `myexchange` VARCHAR(255);
ALTER TABLE `dede_full_search` ADD COLUMN `mygoods` VARCHAR(255);
ALTER TABLE `dede_full_search` ADD COLUMN `myexgoods` VARCHAR(255);
二、打开 /member/article_add_action. 文件,找到“//更新全站搜索索引”部分,在相关代码段中插入刚才添加的字段。例如:
// 示例代码
' myskill ' => $myskill,
' myexchange ' => $myexchange,
' mygoods ' => $mygoods,
' myexgoods ' => $myexgoods
建议字段名与之前定义的一致,以减少后续麻烦。
三、打开 /include/inc_arcsearch_view.php 文件,搜索 titlekeyword,找到如下代码:
// 原始代码
if($this->SearchType != "titlekeyword"){
$kwsqlarr[] = " dede_full_search.title like '%$k%' ";
} else {
$kwsqlarr[] = " dede_full_search.title like '%$k%' ";
$kwsqlarr[] = " dede_full_search.addinfos like '%$k%' ";
$kwsqlarr[] = " dede_full_search.keywords like '%$k%' ";
}
根据需求添加自定义字段搜索逻辑。例如:
// 修改后的代码
if($this->SearchType != "skill"){
$kwsqlarr[] = " dede_full_search.myskill like '%$k%' ";
$kwsqlarr[] = " dede_full_search.myexchange like '%$k%' ";
} else {
$kwsqlarr[] = " dede_full_search.myexchange like '%$k%' ";
$kwsqlarr[] = " dede_full_search.myskill like '%$k%' ";
}
if($this->SearchType != "goods"){
$kwsqlarr[] = " dede_full_search.mygoods like '%$k%' ";
$kwsqlarr[] = " dede_full_search.myexchange like '%$k%' ";
} else {
$kwsqlarr[] = " dede_full_search.myexchange like '%$k%' ";
$kwsqlarr[] = " dede_full_search.mygoods like '%$k%' ";
}
这里使用了两个 if-else 语句,分别处理 myskill 和 myexchange,以及 mygoods 和 myexgoods。
四、修改搜索框代码。原代码如下:
修改后:
注意:value 的值应与第三步中定义的 SearchType 对应。
五、再次打开 /include/inc_arcsearch_view.php 文件,找到“处理一些特殊字段”的部分,添加以下代码:
// 添加的代码
$row["myskill"] = $this->GetRedKeyWord(cn_substr($row["myskill"],$infolen));
$row["myexchange"] = $this->GetRedKeyWord(cn_substr($row["myexchange"],$infolen));
$row["mygoods"] = $this->GetRedKeyWord(cn_substr($row["mygoods"],$infolen));
$row["myexgoods"] = $this->GetRedKeyWord(cn_substr($row["myexgoods"],$infolen));
这样可以确保搜索结果页的关键字显示为红色。
六、最后一步,打开 templets/default/search.htm 模板文件,在搜索页调用自定义字段。例如:
[field:myskill /]
如果需要同时调用多个字段,建议在字段间添加空格或其他分隔符,避免显示问题。
以上步骤详细介绍了如何在DEDE系统中实现自定义字段搜索功能。虽然过程稍显复杂,但能够显著提升网站的搜索体验。