dede自定义搜索模型不存在

99ANYc3cd6
预计阅读时长 12 分钟
位置: 首页 DEDE建站 正文

问题根源分析

“搜索模型”在DedeCMS中,指的是你可以对哪些数据表进行搜索,系统默认的搜索模型是针对“文章”(#@__archives表)的,当你添加了自定义模型(产品”、“下载”、“图集”等),并希望它们也能被网站的全局搜索框搜索到时,就需要将这些新模型“注册”到搜索系统中。

“自定义搜索模型不存在”错误,核心原因就是 你的自定义模型没有被成功添加到DedeCMS的搜索配置中


解决方案(按优先级顺序排查)

请按照以下步骤逐一检查和操作,90%以上的问题都能在前两步解决。

第一步:重新生成搜索模型(最常见、最有效)

这是解决此问题的首选方法,适用于绝大多数情况,尤其是当你刚刚新建或修改了自定义模型后。

  1. 登录后台:使用管理员账号登录你的DedeCMS后台。

  2. 进入搜索模型管理

    • 在后台菜单中,找到并点击 【系统】 -> 【核心设置】
    • 在核心设置页面,找到并点击 【搜索设置】 选项卡。
  3. 生成新模型

    • 在搜索设置页面,你会看到一个名为 “搜索模型” 的区域。
    • 点击 “选择搜索模型” 下拉框,选择你刚刚创建的那个自定义模型(产品”、“软件”等)。
    • 点击 “开始生成” 按钮。
  4. 等待生成完成

    • 系统会开始处理,这个过程可能需要几分钟,具体取决于你网站的数据量,请耐心等待,不要刷新或关闭页面。
    • 看到 “成功生成索引数据!” 的提示后,说明操作成功。
  5. 清空缓存并测试

    • 为了确保新配置生效,建议去后台的 【系统】 -> 【一键更新网站】 -> 【更新缓存】 中清空一下系统缓存。
    • 然后到网站前台,使用搜索功能测试一下,看是否已经可以搜索到你自定义模型下的内容了。

为什么这一步能解决? DedeCMS的搜索功能依赖于一个索引文件,当你添加新模型后,这个索引文件里并没有新模型的信息,通过“生成搜索模型”操作,系统会读取你模型的数据表结构,并为其创建相应的索引,这样搜索功能才能识别并查询它。

第二步:检查并手动添加模型

如果第一步无效,或者你发现“搜索模型”下拉框里根本没有你的自定义模型,那么你需要手动添加它。

  1. 确认模型名称

    • 去你的自定义模型管理后台(核心】->【内容模型管理】),确认你的模型名称是什么,以及它对应的数据表前缀是什么(通常是 #@__yourmodelname)。
  2. 编辑搜索配置文件

    • 通过FTP或文件管理器,登录你的网站服务器。
    • 找到并打开以下文件: dede/search_module.php (路径中的 dede 是你的后台目录,如果你修改过,请使用你自己的后台目录名)
    • 在这个文件中,你会看到一些 case '模型名': 的代码块,这就是定义各个搜索模型的地方。
  3. 添加你的自定义模型

    • 在文件的 switch($modelname) 语句块中,仿照已有的模型,添加你自己的模型配置。
    • 示例:假设你新建了一个名为 product(产品)的模型,其数据表为 #@__product,你需要添加如下代码:
    // 在 switch($modelname) { ... } 内部添加
    case 'product':
        $t1 = 'dede_arctype'; //栏目表
        $t2 = 'dede_product'; //你的自定义模型表,请确保表名正确
        $t3 = 'dede_archives'; //主表
        $sql = "SELECT arc.*,tp.typename,tp.corank,tp.isdefault,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath
                FROM `$t2` arc
                LEFT JOIN `$t3` ON arc.id = `$t3`.aid
                LEFT JOIN `$t1` tp ON arc.typeid = tp.id
                WHERE {$orwhere} $andquery ORDER BY arc.sortrank DESC";
        break;
    • 代码解释
      • case 'product': 这里的 'product' 必须和你在【内容模型管理】里设置的“模型表名”完全一致。
      • $t2 = 'dede_product'; 这里的表名 dede_product 是你的自定义数据表名,请务必核对正确。
      • $sql 语句是查询语句,用于从你的表中搜索数据,你可以根据需要修改 SELECT 的字段。
  4. 保存文件并重复第一步

    • 保存 search_module.php 文件。
    • 回到DedeCMS后台,重复 第一步 的操作,重新生成一下你刚添加的搜索模型。

第三步:检查数据表和字段

如果以上两步都无效,问题可能出在数据库层面。

  1. 检查数据表是否存在

    • 通过phpMyAdmin等数据库管理工具,登录你的数据库。
    • 检查是否存在你的自定义模型对应的数据表(#@__product),如果表不存在,说明模型根本没有成功创建。
  2. 检查关键字段是否存在

    • 确保你的自定义数据表中存在 title (标题) 和 keywords (关键词) 这两个字段,DedeCMS的默认搜索主要依赖这两个字段,如果缺少,搜索功能将无法正常工作。

第四步:检查模板调用

问题不在于搜索功能本身,而在于搜索结果页的模板没有正确调用和显示这些模型的内容。

  1. 检查搜索结果页模板

    • 确认你使用的搜索结果页模板(通常是 search.htm)中,包含了用于显示所有模型内容的代码块。
    • 通常模板里会有类似 {dede:php} ... {/dede:php} 的PHP代码,用于循环和显示搜索结果,确保这部分逻辑是完整的,能够处理不同模型类型的数据。
  2. 检查自定义模型的字段

    • 如果搜索结果能出来,但显示的字段是空的(比如产品价格、规格等),那是模板里调用字段的方式不对,而不是“模型不存在”的问题,这需要你修改模板,使用正确的字段标签,如 [field:price/]

总结与排查清单

遇到“Dede自定义搜索模型不存在”错误时,请按以下清单快速排查:

  1. 【首要操作】 进入后台 【系统】->【核心设置】->【搜索设置】,选择你的自定义模型,点击 【开始生成】。 (解决90%的问题)
  2. 如果下拉框里没有你的模型,则手动编辑 /dede/search_module.php 文件,在 switch 语句中添加你的模型配置。
  3. 检查数据库中是否存在你的自定义数据表,以及表里是否有 titlekeywords 字段。
  4. 检查搜索结果页模板 search.htm 是否能正确显示和调用你的模型数据。

希望这份详细的指南能帮助你解决问题!如果还有疑问,可以提供更多错误截图或你的自定义模型名称,我可以给出更具体的建议。

-- 展开阅读全文 --
头像
dede如何调用文章第一张图片?
« 上一篇 01-11
C语言学生信息管理系统如何实现核心功能?
下一篇 » 01-11

相关文章

取消
微信二维码
支付宝二维码

目录[+]