织梦自定义搜索管理如何高效配置?

99ANYc3cd6
预计阅读时长 23 分钟
位置: 首页 织梦建站 正文
  1. 创建搜索表单:在前台页面放置一个可以提交搜索请求的表单。
  2. 创建搜索结果页:一个专门用来展示搜索结果的动态页面。

下面我将分步为你详细解释如何管理和配置。

织梦自定义搜索管理
(图片来源网络,侵删)

第一步:理解核心文件

在动手之前,你需要了解几个关键文件,它们都在 /templets/default/ 目录下(如果你使用的是其他模板,则在你自定义的模板目录下):

  • search.php:这是搜索结果页的程序文件,无论你创建多少个自定义搜索,它们的请求最终都会由这个文件来处理,它负责接收搜索关键词、解析搜索条件、从数据库中查询数据,并最终调用模板文件来展示结果。
  • search.htm:这是默认的搜索结果页模板,当你没有指定其他模板时,search.php 就会调用这个文件来展示结果。
  • search_keywords.txt:记录热门搜索关键词的文件。
  • pubsearch.php:用于在首页等位置调用全站搜索的表单文件。

第二步:创建自定义搜索表单

这是用户在前台看到并输入关键词的界面,你可以创建多个不同的搜索表单,分别用于不同的场景(全站搜索、文章搜索、产品搜索等)。

使用系统标签(最简单)

织梦提供了专门的搜索表单标签,可以直接在模板中使用。

全站搜索表单 这个表单会搜索网站所有的内容(文章、软件、商品等)。

织梦自定义搜索管理
(图片来源网络,侵删)
<form name="formsearch" action="{dede:global.cfg_cmsurl/}/search.php">
    <input type="hidden" name="kwtype" value="0" />
    <input type="hidden" name="searchtype" id="searchtype" value="titlekeyword" />
    <input type="text" name="q" class="search-keyword" id="search-keyword" placeholder="请输入搜索关键词" />
    <button type="submit" class="search-submit">搜索</button>
</form>

按栏目搜索表单 这个表单只搜索指定的栏目及其子栏目。

<form name="formsearch" action="{dede:global.cfg_cmsurl/}/search.php">
    <input type="hidden" name="kwtype" value="0" />
    <input type="hidden" name="searchtype" id="searchtype" value="titlekeyword" />
    <!-- 这里指定了只搜索ID为2的栏目及其子栏目 -->
    <input type="hidden" name="typeid" value="2" />
    <input type="text" name="q" class="search-keyword" id="search-keyword" placeholder="在指定栏目搜索" />
    <button type="submit" class="search-submit">搜索</button>
</form>

类型搜索表单 这个表单可以指定只搜索文章(arc)、软件(soft)、商品(product)等特定类型的内容。

<form name="formsearch" action="{dede:global.cfg_cmsurl/}/search.php">
    <input type="hidden" name="kwtype" value="0" />
    <input type="hidden" name="typeid" value="2" />
    <!-- 这里指定了只搜索文章类型 -->
    <input type="hidden" name="channeltype" value="1" />
    <input type="text" name="q" class="search-keyword" id="search-keyword" placeholder="搜索文章" />
    <button type="submit" class="search-submit">搜索</button>
</form>

参数说明:

  • action: 指向 search.php,固定写法。
  • name="q": 搜索关键词的输入框名称,必须为 q
  • name="typeid": 指定栏目ID,如果填写,则只在该栏目及其子栏目内搜索,不填写则全站搜索。
  • name="channeltype": 类型
    • 1: 普通文章
    • 2: 图集
    • 3: 下载软件
    • 4: 产品
    • ... 以此类推,可以在后台“频道模型”中查看。
  • name="searchtype": 搜索方式。
    • titlekeyword: 标题或关键词(默认)
    • keyword: 仅关键词
    • title: 仅标题
  • name="kwtype": 高级搜索选项,通常用 0 即可。

第三步:创建自定义搜索结果页

这是展示搜索结果的核心,你可以为不同的搜索需求创建完全不同的结果页模板。

织梦自定义搜索管理
(图片来源网络,侵删)

步骤 1:创建新的结果页模板文件

/templets/default/ 目录下,复制一份 search.htm,并重命名,我们创建一个专门用于“产品搜索”的结果页,命名为 search_product.htm

search_product.htm 中,你可以自定义HTML结构和样式,比如只显示产品图片、价格等。

步骤 2:在 search.php 中指定模板

打开 /plus/search.php 文件,找到指定模板的代码段(通常在文件末尾附近)。

// ... (中间是PHP处理逻辑) ...
// 引入模板文件
$dtp = new DedeTagParse();
$dtp->LoadTemplate($cfg_basedir.$cfg_templets_dir."/".$tempfile);
$dtp->Display();

这里的 $tempfile 变量决定了使用哪个模板,默认情况下,它可能是 search.htm,我们需要修改逻辑,让它根据不同的搜索条件调用不同的模板。

search.php 中,你可以通过 $_GET 获取到前端的参数,如 typeidchanneltype,然后进行判断:

// ... (在引入模板之前,添加如下判断逻辑) ...
// 获取搜索参数
$typeid = isset($_GET['typeid']) ? intval($_GET['typeid']) : 0;
$channeltype = isset($_GET['channeltype']) ? intval($_GET['channeltype']) : 0;
// 定义模板文件
$tempfile = 'search.htm'; // 默认模板
// 如果是产品搜索(channeltype=4),则使用产品搜索模板
if ($channeltype == 4) {
    $tempfile = 'search_product.htm';
}
// 如果是软件搜索(channeltype=3),则使用软件搜索模板
elseif ($channeltype == 3) {
    $tempfile = 'search_soft.htm';
}
// 如果只在指定栏目(如ID为5的栏目)搜索,可以使用另一个模板
elseif ($typeid == 5) {
    $tempfile = 'search_news.htm';
}
// 引入模板文件
$dtp = new DedeTagParse();
$dtp->LoadTemplate($cfg_basedir.$cfg_templets_dir."/".$tempfile);
$dtp->Display();

注意:请根据你的实际需求修改 channeltypetypeid 的值以及对应的模板文件名。

步骤 3:在结果页模板中调用搜索数据

无论你使用哪个模板文件(search.htm, search_product.htm 等),内部的数据调用标签都是一样的,织梦会自动将搜索结果传递给模板。

在模板文件中,使用 {dede:arclist} 标签来循环输出搜索结果。

示例 search_product.htm

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">产品搜索结果</title>
</head>
<body>
    <h1>产品搜索结果</h1>
    <p>关键词: {dede:global name='keyword'/}</p>
    <hr>
    <div class="search-result-list">
        {dede:arclist titlelen='40' row='10'}
        <div class="result-item">
            <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
            <p class="summary">[field:description function='cn_substr(@me, 200)'/]...</p>
            <p class="info">价格: [field:price/] | 点击: [field:click/]</p>
        </div>
        {/dede:arclist}
    </div>
    <!-- 分页标签 -->
    <div class="page">
        {dede:pagelist listsize='4'/}
    </div>
</body>
</html>

{dede:arclist} 在搜索结果页中的特殊用法:

  • [field:title]: 文章标题。
  • [field:arcurl]: 文章链接。
  • [field:description]:
  • [field:click]: 点击次数。
  • [field:pubdate function='MyDate('Y-m-d', @me)']: 发布日期,可以使用函数格式化。

第四步:后台管理(可选)

织梦的后台也提供了一些简单的搜索管理功能,虽然不如自定义搜索灵活,但可以用于一些基础设置。

  1. 进入后台搜索工具 -> 关键词搜索

    • 热门搜索管理:可以设置热门搜索关键词,这些词会显示在搜索框下方。
    • 搜索日志:可以查看用户的搜索记录,了解用户搜索了什么词,帮助你优化内容。
  2. 自定义搜索搜索工具 -> 自定义搜索

    这里可以创建一些预设的搜索,并生成调用代码,但通常不如我们上面手动创建的灵活,一般不推荐使用。


总结与最佳实践

  1. 需求分析:明确你的网站需要哪些类型的搜索(如:全站搜索、产品搜索、新闻搜索等)。
  2. 创建表单:为每种搜索类型创建一个独立的HTML表单,通过 typeidchanneltype 等参数区分。
  3. 创建模板:为每种搜索类型创建一个对应的结果页模板(如 search_product.htm),并在模板中用 {dede:arclist} 调用数据,可以自定义展示字段和样式。
  4. 修改程序:修改 /plus/search.php 文件,根据前端传来的参数(typeid, channeltype)动态加载不同的结果页模板。
  5. 测试:分别在前台测试你的各个自定义搜索表单,确保它们能正确跳转到对应的结果页,并显示正确的数据。

通过以上步骤,你就可以完全掌控织梦的搜索功能,为用户提供更精准、更友好的搜索体验。

-- 展开阅读全文 --
头像
织梦如何导入数据库?
« 上一篇 今天
计算机二级C语言真的容易学吗?
下一篇 » 今天

相关文章

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