dede 搜索页 调用

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

第一步:理解搜索页的工作原理

当用户在首页或其他页面提交搜索表单后,请求会发送到 search.php,这个文件负责处理搜索逻辑:

dede 搜索页 调用
(图片来源网络,侵删)
  1. 获取搜索关键词 (keyword)。
  2. 根据关键词在数据库中查找匹配的文章。
  3. 将搜索结果和分页信息传递给模板文件 search.htm
  4. search.htm 负责将数据渲染成最终的 HTML 页面。

要调用搜索页的内容,主要有两个层面:

  1. 修改 search.php:改变搜索的逻辑,比如修改搜索的字段、排序方式等。
  2. 修改 search.htm:改变搜索结果的显示样式,比如调用文章标题、缩略图、发布时间等。

第二步:调用搜索结果(修改 search.phpsearch.htm

这是最常见的需求,即自定义搜索结果的展示。

修改 search.php 文件

打开 /plus/search.php 文件,找到 //搜索处理 附近的部分,你可以在这里修改 SQL 查询语句,以决定搜索哪些字段以及如何排序。

示例:修改搜索的字段

dede 搜索页 调用
(图片来源网络,侵删)

默认情况下,DedeCMS 可能只搜索标题和正文,如果你想增加搜索摘要 (description) 字段,可以修改如下:

// 原始代码可能类似这样
// $query = "SELECT arc.id,arc.title,arc.typeid,arc.ismake,arc.channel,arc.arcrank,arc.click,arc.litpic,arc.pubdate,arc.senddate 
//         FROM dede_archives arc 
//         WHERE arc.title LIKE '%$keyword%' OR arc.body LIKE '%$keyword%'";
// 修改后,增加 description 字段
$query = "SELECT arc.id,arc.title,arc.typeid,arc.ismake,arc.channel,arc.arcrank,arc.click,arc.litpic,arc.pubdate,arc.senddate,arc.description 
          FROM dede_archives arc 
          WHERE arc.title LIKE '%$keyword%' OR arc.body LIKE '%$keyword%' OR arc.description LIKE '%$keyword%'";

示例:修改搜索结果的排序

默认可能按发布时间倒序,你可以修改为按点击量倒序:

// 在执行查询前,修改 ORDER BY 部分
$query = "SELECT ..."; // 你的查询语句
$query .= " ORDER BY arc.click DESC"; // 在查询字符串末尾添加排序
$rs = $dsql->Execute('me', $query);

修改 search.htm 模板文件

打开 /templets/default/search.htm 文件(如果你使用了自定义模板,请找到对应的模板文件),这里使用 DedeCMS 的模板标签来循环显示搜索结果。

核心代码:{dede:arclist}

search.htm 中,通常使用 {dede:arclist} 标签来遍历 search.php 传递过来的数据。

完整的 search.htm 示例:

{dede:include filename="head.htm"/}
<div class="search-page">
    <h2>搜索结果:“{dede:global name='keyword'/}”</h2>
    <!-- 如果没有搜索结果 -->
    {dede:global name='resultnum'/} 条结果
    {dede:global name='error'/}
    <!-- 循环输出搜索结果 -->
    <ul class="search-result-list">
        {dede:arclist titlelen='50' row='10' typeid='all'}
        <li>
            <a href="[field:arcurl/]" target="_blank">[field:title/]</a>
            <div class="search-info">
                <span class="search-date">发布时间:[field:pubdate function="MyDate('Y-m-d H:i',@me)"/]</span>
                <span class="search-click">点击:[field:click/]</span>
            </div>
            <p class="search-summary">[field:description function='cn_substr(@me, 200)'/]...</p>
        </li>
        {/dede:arclist}
    </ul>
    <!-- 调用分页 -->
    <div class="page-nav">
        {dede:pagelist listsize='5' listitem='info,index,next,end,pre'/}
    </div>
</div>
{dede:include filename="foot.htm"/}

代码解释:

  • {dede:global name='keyword'/}: 显示用户搜索的关键词。
  • {dede:global name='resultnum'/}: 显示搜索到的结果总数。
  • {dede:arclist ...}: 这是最重要的标签,用于列出文章。
    • titlelen='50': 标题长度限制为50个字符。
    • row='10': 每页显示10条结果。
    • typeid='all': 在所有栏目中搜索。
  • [field:arcurl/]: 文章的链接地址。
  • [field:title/]: 文章标题。
  • [field:pubdate ... /]: 发布时间,通过 function 参数自定义格式。
  • [field:click/]: 文章点击量。
  • [field:description ... /]: 通过 cn_substr 函数截取200个字符。
  • {dede:pagelist ...}: 调用分页导航。

第三步:调用热门搜索关键词

这个功能通常放在搜索框下方,展示网站内搜索频率最高的词。

修改 search.htm 模板

在搜索框下方添加如下代码:

<div class="hot-search">
    <h3>热门搜索</h3>
    {dede:hotwords num='10' subday='30' /}
</div>

修改 search.php 文件

打开 /plus/search.php,找到 //热门关键字 部分,确保它没有被注释掉。

// 热门关键字
$hotquery = "SELECT keyword,count AS count FROM dede_search_keywords ORDER BY count DESC LIMIT 0,10";
$rs = $dsql->Execute('me',$hotquery);
$dsql->SetQuery("UPDATE dede_search_keywords SET count=count+1 WHERE keyword='$keyword'");
$dsql->ExecuteNoneQuery();

{dede:hotwords} 标签会自动调用这部分数据并生成链接。


第四步:调用“相关搜索”关键词

相关搜索是指在当前搜索结果页,推荐一些与当前关键词相关的其他搜索词。

修改 search.php 文件

search.php 的末尾,在 include(DEDETEMPLATE.'/search.htm'); 之前,添加以下代码:

// 获取相关搜索关键词
$relkeyword = '';
$query = "SELECT keyword FROM dede_search_keywords WHERE keyword LIKE '%$keyword%' AND keyword <> '$keyword' ORDER BY count DESC LIMIT 0,8";
$rs = $dsql->Execute('me', $query);
while($row = $rs->GetArray()){
    $relkeyword .= "<a href='/plus/search.php?keyword=".urlencode($row['keyword'])."'>".$row['keyword']."</a> ";
}
$GLOBALS['relkeyword'] = $relkeyword;

修改 search.htm 模板

在页面合适的位置(例如搜索结果下方)添加:

<div class="related-search">
    <h3>相关搜索</h3>
    {dede:global name='relkeyword'/}
</div>

第五步:高级调用——自定义搜索频道

DedeCMS 支持按不同频道(如文章、软件、商品等)进行搜索,这需要更复杂的逻辑,但基本原理相同。

  1. 修改 search.php:增加对 channelid 参数的判断,并在 SQL 查询中根据不同的 channelid 连接不同的数据表(如 dede_archives, dede_downloads 等)。
  2. 修改 search.htm:使用 {dede:php} 标签或多个 {dede:arclist} 标签,根据不同的频道类型调用不同的模板片段来显示结果。

这是一个比较高级的功能,通常需要对 DedeCMS 有较深的理解,对于大多数网站,使用前几种方法已经足够。

功能需求 修改文件 关键代码/标签
自定义搜索结果展示 plus/search.php
templets/default/search.htm
修改 SQL 查询语句
{dede:arclist}
调用热门搜索 plus/search.php
templets/default/search.htm
确保 SQL 未被注释
{dede:hotwords}
调用相关搜索 plus/search.php
templets/default/search.htm
手动查询并赋值给 $GLOBALS
{dede:global name='relkeyword'}

操作建议:

  1. 备份!备份!备份! 在修改 search.php 和模板文件之前,务必备份原始文件。
  2. 从简单开始:先尝试修改 search.htm 中的 {dede:arclist} 标签,看看效果。
  3. 逐步深入:熟悉基本修改后,再尝试修改 search.php 中的逻辑。

希望这份详细的指南能帮助你成功调用 DedeCMS 搜索页的内容!

-- 展开阅读全文 --
头像
织梦首页调用文件是哪个?
« 上一篇 今天
C语言Windows编程如何入门?
下一篇 » 今天

相关文章

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