许多用户希望在DEDE系统中实现自定义字段搜索功能,但官方并未提供相关支持。经过研究,我成功实现了这一功能,并在此分享适用于DEDE 5.0版本的教程(DEDE 5.1版本可能类似)。以下是具体步骤:

 

一、打开数据库,找到 dede_full_search 表,在其中添加你需要的自定义字段。例如,我在网站中添加了 myskillmyexchangemygoodsmyexgoods 这四个字段。

/* 示例字段 */
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 语句,分别处理 myskillmyexchange,以及 mygoodsmyexgoods

 

四、修改搜索框代码。原代码如下:


修改后:


注意: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系统中实现自定义字段搜索功能。虽然过程稍显复杂,但能够显著提升网站的搜索体验。