dede 手机 搜索页

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

DedeCMS 的移动端(手机站)搜索功能,其核心文件和逻辑与 PC 端有所不同,下面我将从文件位置、核心逻辑、自定义修改常见问题四个方面为你进行详细说明。


核心文件位置

手机站的搜索功能主要涉及以下几个文件,它们通常位于你手机站的模板目录下,/templets/default/ 或你自定义的手机模板目录。

文件名 路径示例 功能说明
search.php /m/search.php 手机搜索的入口文件,处理搜索请求、调用搜索逻辑,并最终加载搜索结果页模板。
search.htm /templets/default/search.htm 手机搜索结果页的模板文件,用于展示搜索到的文章列表、分页等信息。
head.htm /templets/default/head.htm 手机站的头部文件,通常包含搜索框的 HTML 代码。
footer.htm /templets/default/footer.htm 手机站的底部文件。

注意:如果你的网站开启了“静态目录部署”,这些文件可能会被复制到 /m/ 目录下,请务必检查你实际访问的路径。


核心逻辑与流程

手机搜索的执行流程如下:

  1. 用户输入关键词:用户在手机站的搜索框(通常在 head.htm 中)输入关键词,并点击“搜索”。
  2. 提交请求:表单数据(关键词 q)被提交到 /m/search.php
  3. search.php 处理
    • 接收并过滤关键词 q
    • 调用 DedeCMS 内置的搜索函数 SearchByKey()
    • SearchByKey() 函数会根据关键词在数据库的 dede_archives (文章表)、dede_arctype (栏目表) 等表中查询匹配的记录。
    • 将查询到的结果(文章ID、标题、发布时间等)存入一个数组中。
    • 将结果数组传递给模板引擎。
  4. 加载模板search.php 加载并解析 search.htm 模板文件。
  5. 展示结果:在 search.htm 模板中,通过循环 {dede:list}{dedarclist} 等标签,将 PHP 传递过来的搜索结果数据渲染成 HTML 页面,展示给用户。

如何自定义修改

1 修改搜索结果页模板 (search.htm)

这是最常见的自定义需求,你可以编辑 /templets/default/search.htm 文件来改变搜索结果的展示样式。

常用标签说明:

  • {dede:global name='keyword'/}: 显示用户当前搜索的关键词。
  • {dede:global name='totalresult'/}: 显示搜索到的总结果数。
  • {dede:list pagesize='10'}: 核心标签,用于循环输出搜索结果。
    • pagesize='10': 设置每页显示的文章数量。
    • {dede:list}{/dede:list} 之间,你可以使用以下子标签:
      • [field:title/]: 文章标题。
      • [field:arcurl/]: 文章链接。
      • [field:pubdate function="MyDate('Y-m-d',@me)"/]: 文章发布日期,MyDate 是日期格式化函数。
      • [field:description function="cn_substr(@me, 200)"/]: cn_substr 是截取字符串函数,这里截取200字符。
      • [field:litpic/]: 文章缩略图。

search.htm 示例代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">搜索结果 - {dede:global name='keyword'/} - {dede:global name='cfg_webname'/}</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 引入手机端样式文件 -->
    <link rel="stylesheet" href="{dede:global name='cfg_cmspath'/}/static/css/style.css">
</head>
<body>
    <!-- 头部 -->
    {dede:include filename="head.htm"/}
    <div class="main">
        <div class="search-result-box">
            <h2>搜索 "<strong>{dede:global name='keyword'/}</strong>" 的结果</h2>
            <p class="result-count">找到 <strong>{dede:global name='totalresult'/}</strong> 条相关结果</p>
            <!-- 文章列表开始 -->
            {dede:list pagesize='10'}
            <div class="item">
                <a href="[field:arcurl/]">
                    <h3>[field:title/]</h3>
                    <p class="desc">[field:description function="cn_substr(@me, 200)"/]...</p>
                    <div class="info">
                        <span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
                    </div>
                </a>
            </div>
            {/dede:list}
            <!-- 文章列表结束 -->
            <!-- 分页开始 -->
            <div class="page">
                {dede:pagelist listsize='5' listitem='info,index,end,pre,next,pageno'}
            </div>
            <!-- 分页结束 -->
            {if $totalresult == 0}
            <div class="no-result">
                <p>抱歉,没有找到与 "<strong>{dede:global name='keyword'/}</strong>" 相关的内容。</p>
                <p>建议您:</p>
                <ul>
                    <li>检查输入的关键词是否正确</li>
                    <li>尝试使用更简洁的关键词</li>
                    <li>尝试使用同义词或相关词</li>
                </ul>
            </div>
            {/if}
        </div>
    </div>
    <!-- 底部 -->
    {dede:include filename="footer.htm"/}
</body>
</html>

2 修改搜索入口 (head.htm)

通常在 head.htm 中会有一个搜索框,你需要确保它的 action 属性指向 /m/search.php

head.htm 中的搜索框示例:

<div class="search-box">
    <form action="/m/search.php" method="get">
        <input type="text" name="q" placeholder="请输入关键词..." required>
        <button type="submit">搜索</button>
    </form>
</div>

3 修改搜索逻辑 (search.php)

如果你需要修改搜索的核心逻辑,比如改变搜索的字段、权重或者添加新的搜索条件,你需要编辑 /m/search.php

search.php 关键代码解析:

<?php
require_once(dirname(__FILE__)."/../include/common.inc.php");
require_once(DEDEINC."/arc.search.class.php");
// 获取并过滤搜索关键词
$keyword = FilterSearch(stripslashes($q));
// 实例化搜索类
$search = new Search($keyword, 'default', 'title');
// 设置搜索参数(可选)
// $search->AddChannel(1); // 只在栏目ID为1的栏目中搜索
// $search->SetResultType('all'); // 搜索所有类型
// 执行搜索
$keywords = $search->GetKeyword();
$GettkCount = $search->GetCount();
$GettkList = $search->GetList();
// 赋值给模板
$pagelist = $search->GetPageList();
$dlist = $search->GetArcList();
// 加载模板
include(DEDETEMPLATE.'/default/search.htm');
?>

自定义修改示例:

假设你想让搜索同时搜索标题和文章内容,而不仅仅是标题。

  1. 打开 /m/search.php
  2. 找到 new Search($keyword, 'default', 'title'); 这一行。
  3. 将第三个参数 'title' 修改为 'body',或者使用 'all' 来搜索所有可搜索的字段。
// 修改前(只搜索标题)
// $search = new Search($keyword, 'default', 'title');
// 修改后(搜索标题和内容)
$search = new Search($keyword, 'default', 'all');

常见问题与解决方案

问题1:手机站搜索结果为空,但 PC 站有结果。

原因分析:

  • 模板文件问题/m/search.php/templets/default/search.htm 文件不存在或路径错误。
  • 标签不匹配search.htm 中使用了 {dede:list},但搜索结果可能需要使用 {dede:arclist},虽然 {dede:list} 在新版 DedeCMS 中通常也能工作,但兼容性可能有问题。
  • 权限问题:服务器上 /m/search.php 文件没有执行权限。

解决方案:

  1. 检查 /m/search.php 文件是否存在,并确保有执行权限。
  2. 检查 search.htm 是否在正确的模板目录下。
  3. 尝试将 search.htm 中的 {dede:list} 替换为 {dede:arclist}
    <!-- 尝试使用 arclist -->
    {dede:arclist titlelen=40 row=10}
    <a href="[field:arcurl/]">[field:title/]</a>
    {/dede:arclist}

问题2:搜索结果样式错乱。

原因分析:

  • CSS 样式文件未正确引入或样式冲突,手机站和 PC 站的 CSS 是分开的。

解决方案:

  1. 检查 search.htm<head> 部分,是否正确引入了手机专用的 CSS 文件。
  2. 使用浏览器开发者工具(F12)的“设备模拟”模式,检查搜索结果页的 HTML 结构和对应的 CSS 样式,定位问题样式并修改。

问题3:搜索分页不工作。

原因分析:

  • search.php 中没有正确调用分页函数。
  • search.htm 中分页标签 {dede:pagelist} 写法有误。

解决方案:

  1. 确保 search.php 中有 $pagelist = $search->GetPageList(); 这行代码。
  2. 确保 search.htm 中有 {dede:pagelist listsize='5' listitem='info,index,end,pre,next,pageno'} 这样的标签,并且没有被注释掉。

DedeCMS 手机搜索页的定制,核心在于掌握三个文件的作用:

  1. search.php (逻辑控制):处理请求,调用搜索类,准备数据。
  2. search.htm (模板展示):负责将数据以 HTML 的形式展示给用户。
  3. head.htm (入口):提供用户输入关键词的表单。

通过修改这三个文件,你可以完全控制手机搜索的样式和行为,遇到问题时,优先检查文件路径、权限和标签的正确性。

-- 展开阅读全文 --
头像
dede后台修改css
« 上一篇 03-25
织梦模板如何修改网站颜色?
下一篇 » 03-25

相关文章

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

目录[+]