织梦移动端搜索无模板,如何实现自定义?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 织梦建站 正文

这个问题非常经典,其根本原因在于 织梦默认的搜索流程是先调用PC端的搜索模板,然后通过手机访问时,系统会尝试加载一个同名的移动端模板文件,但如果这个移动端模板文件不存在,就会导致显示错误或空白。

织梦移动端搜索无模板
(图片来源网络,侵删)

下面我将为您提供从原理分析到具体解决方案的完整步骤。


问题根源分析

织梦DedeCMS的搜索流程大致如下:

  1. 用户在移动端提交搜索关键词。
  2. 系统接收到请求,通过 search.php 文件处理。
  3. search.php 会根据网站的全局设置(如是否开启移动端),判断当前访问是PC还是移动设备。
  4. 关键步骤:系统会去寻找一个名为 search_m.htm 的模板文件,这个文件就是专门为移动端搜索结果页设计的模板。
  5. search_m.htm 文件不存在,系统通常会回退到PC端的搜索模板 search.htm,但由于 search.htm 是为PC布局设计的(宽度大、字体大等),在移动端显示会错乱,甚至因为JS/CSS冲突导致无法正常渲染,最终表现为“无模板”或空白页面。
  6. 如果PC端的 search.htm 也不存在,或者模板调用失败,就会直接报错或显示空白。

解决方案的核心就是:创建并配置一个正确的移动端搜索模板 search_m.htm


解决方案(推荐方法:手动创建模板)

这是最稳定、最可控的方法,能让你完全自定义移动端的搜索结果样式。

织梦移动端搜索无模板
(图片来源网络,侵删)

第1步:创建移动端搜索模板文件

  1. 找到PC端搜索模板: 你需要知道你的PC端搜索模板在哪里,通常位于织梦后台的: 后台 -> 模板 -> 默认模板管理 -> 找到并编辑 search.htm。 记下这个文件的完整路径,/templets/default/search.htm

  2. 复制并重命名: 将 search.htm 文件复制一份。 将复制的文件重命名为 search_m.htm

    • search_m.htm 中的 _m 是移动端的标识,这是织梦识别移动端模板的约定。
  3. 修改模板路径: 将 search_m.htm 文件上传到与 search.htm 完全相同的目录下,如果 search.htm/templets/default/ 目录下,search_m.htm 也必须放在这里。

第2步:修改移动端模板 search_m.htm

现在你需要打开 search_m.htm 文件,将其修改为适合移动端的样式。

织梦移动端搜索无模板
(图片来源网络,侵删)
  1. 引入移动端样式和JS: 在模板的 <head> 部分,确保引入了移动端专用的CSS文件和JS文件,通常这些文件在 /templets/default/ 目录下,style_m.cssjs 目录下的移动端适配脚本。

    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
        <title>{dede:global name='keyword'/} - {dede:global name='cfg_webname'/}</title>
        <!-- 引入移动端CSS -->
        <link rel="stylesheet" href="{dede:global name='cfg_cmspath'/}/templets/default/style_m.css">
        <!-- 可以引入移动端专用的JS,如触摸滑动等 -->
        <script src="{dede:global name='cfg_cmspath'/}/templets/default/js/jquery.min.js"></script>
    </head>
  2. 简化并优化HTML结构: 移动端的HTML结构应该更简洁,你可以参考你网站现有的移动端列表页模板(如 list_m.htm)的结构来修改 search_m.htm

  3. 修改分页代码: 搜索结果页的分页代码通常是 dede:pagelist,你需要将其修改为移动端友好的样式。

    • PC端分页代码 (通常比较复杂):
      <div class="dede_pages">
          <ul>{dede:pagelist listsize='5' listitem='info,index,end,pre,next,pageno'/}</ul>
      </div>
    • 移动端分页代码 (推荐简化版):
      <div class="pagelistbox">
          <ul class="pagelist">
              {dede:pagelist listitem='pre,next,end' listsize='0' runphp='yes'}
                  @me = (preg_match('/<a.*?>上一页<\/a>/i', @me) ? '<li class="pre-page"><a href="'.str_replace('上一页', '', @me).'">上一页</a></li>' : '').
                       (preg_match('/<a.*?>下一页<\/a>/i', @me) ? '<li class="next-page"><a href="'.str_replace('下一页', '', @me).'">下一页</a></li>' : '').
                       (preg_match('/<span.*?>共.*?页<\/span>/i', @me) ? '<li class="pageinfo">'.$_GET['q'].'的搜索结果</li>' : '');
              {/dede:pagelist}
          </ul>
      </div>

      这个PHP代码会智能地提取“上一页”、“下一页”和结果提示,并用简洁的 <li> 标签包裹,方便CSS控制。

  4. 调整搜索结果列表样式: 搜索结果的列表项(dede:list)部分,可以参考你的移动端列表页(list_m.htm)的 {dede:list} 部分,确保标题、发布时间等元素的样式在移动端显示正常。

第3步:清理缓存

完成以上修改后,必须清理缓存,否则看不到效果。

  1. 后台清理: 登录织梦后台,点击顶部菜单的 系统 -> 一键更新网站 -> 更新HTML -> 勾选 更新所有文档更新系统缓存,然后点击 开始更新

  2. 手动删除缓存文件: 通过FTP或文件管理器,删除 /data 目录下的 cache 文件夹内的所有文件,这是最彻底的清理方式。


其他可能的解决方案(备选)

如果手动创建模板对你来说有难度,可以尝试以下方法,但可能不如第一种灵活。

强制使用PC模板并做响应式

如果你的PC端搜索模板 search.htm 已经是响应式设计(即能自适应PC和移动端),那么你就不需要创建 search_m.htm

  1. 检查你的 search.htm 是否包含类似 <meta name="viewport" ...> 的标签,以及CSS中是否使用了媒体查询(@media)。
  2. 如果是响应式的,那么问题可能出在移动端模板的识别上,可以尝试在后台的“系统基本参数” -> “核心设置”里,找到是否有关闭移动端适配的选项,确保它没有被错误开启。

使用现成的移动端模板

如果你使用的是织梦官方的移动端插件或商业移动端模板,这些模板通常会自带 search_m.htm 文件。

  • 检查文件:去你的移动端模板目录里,确认是否存在 search_m.htm
  • 重新上传:如果文件丢失,请从模板包里重新上传一份。
  • 检查标签:确保模板中的标签(如 {dede:list})与你的织梦版本兼容。

排查清单(如果问题仍未解决)

如果按照方法一操作后问题依旧,请按以下清单检查:

  1. 文件名和路径:确认模板文件名是 search_m.htm(注意大小写和下划线),并且上传到了正确的目录。
  2. 模板标签:检查 search_m.htm 中是否有错误的织梦标签,导致模板解析失败,可以先用 {dede:global name='keyword'/} 测试是否能正常输出搜索关键词。
  3. 目录权限:确认网站模板目录(如 /templets/default/)有写入和读取权限(通常是755或644)。
  4. PHP错误:如果服务器开启了错误显示,查看页面源码或服务器错误日志,可能会有具体的PHP错误信息提示哪个文件出错。
  5. 插件冲突:暂时禁用所有非必要的插件,看是否是某个插件导致的冲突。

“织梦移动端搜索无模板”问题的99%的解决方案都是:

  1. 复制PC端搜索模板 search.htm 并重命名为 search_m.htm
  2. 修改 search_m.htm 文件,使其适配移动端布局(引入移动CSS、简化结构、优化分页)。
  3. 清理后台缓存和 /data/cache 目录。

按照这个流程操作,绝大多数情况下都能完美解决问题。

-- 展开阅读全文 --
头像
C语言hashtable如何实现高效查找?
« 上一篇 03-14
dede自适应移动模板如何快速搭建与配置?
下一篇 » 03-14

相关文章

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

目录[+]