织梦网站搜索页模板代码如何修改?

99ANYc3cd6
预计阅读时长 30 分钟
位置: 首页 织梦建站 正文
  1. 搜索结果页模板: search.htm
  2. 搜索表单页模板: search.php (这是一个PHP文件,用于接收搜索参数并调用模板)

下面我将为你提供这两个文件的完整代码、代码详解以及一些高级用法。

织梦网站搜索页模板代码
(图片来源网络,侵删)

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

这是用户提交搜索后,看到包含搜索结果的页面,这个文件通常放在你网站的 /templets/default/ 目录下(或者你当前使用的模板目录)。

完整代码示例

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">{dede:global name='keyword'/}_搜索结果_{dede:global.cfg_webname/}</title>
    <meta name="description" content="搜索关键词为{dede:global name='keyword'/}的搜索结果页面">
    <link rel="stylesheet" href="/templets/default/css/style.css">
</head>
<body>
    {dede:include filename="head.htm"/}
    <!-- 搜索结果页主体内容 -->
    <div class="main-container">
        <div class="main-content">
            <h1>搜索结果</h1>
            <p class="search-info">为您找到与 <strong>"{dede:global name='keyword'/}"</strong> 相关的结果 <strong>{dede:global name='resultcount'/}</strong> 条</p>
            <!-- 搜索结果列表 -->
            {dede:list pagesize='10'}
            <div class="result-item">
                <h2><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h2>
                <p class="result-summary">[field:description function='cn_substr(@me, 200)'/]...</p>
                <div class="result-meta">
                    <span>来源:[field:typename/]</span>
                    <span>时间:[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
                </div>
            </div>
            {/dede:list}
            <!-- 搜索结果分页 -->
            {dede:pagelist listsize='5' listitem='info,index,end,pre,next,pageno'}
            <div class="pagelist">
                [pagelist]
            </div>
            {/dede:pagelist}
            <!-- 无搜索结果时的提示 -->
            {dede:global name='resultcount' runphp='yes'}
            if(@me == 0) @me = "<div class='no-result'>抱歉,没有找到与<strong>".trim('{dede:global.name.keyword/}')."</strong>相关的结果。</div>";
            else @me = "";
            {/dede:global}
        </div>
    </div>
    {dede:include filename="footer.htm"/}
</body>
</html>

代码详解

代码片段 说明
{dede:global name='keyword'/} 获取用户输入的搜索关键词。
{dede:global name='resultcount'/} 获取本次搜索到的结果总数。
{dede:list pagesize='10'} 核心标签,用于循环输出搜索结果。pagesize='10' 表示每页显示10条结果。
[field:arcurl/] 输出当前搜索结果文章的链接地址。
[field:title/] 输出文章的标题。
[field:description/] 输出文章的摘要(在后台文章内容编辑时填写)。cn_substr 函数用于截取摘要长度。
[field:typename/] 输出文章所属的栏目名称。
[field:pubdate/] 输出文章的发布日期。MyDate 函数用于格式化日期。
{dede:pagelist ...} 核心标签,用于生成分页导航。listsize 控制显示的页码数量,listitem 控制显示哪些分页元素(首页、上一页、页码等)。
[pagelist] {dede:pagelist} 标签的内部解析输出。
{dede:global name='resultcount' runphp='yes'} 这是一个非常实用的技巧,当 resultcount 为0时,执行PHP代码,显示“无结果”的提示信息。

搜索表单页模板 (search.php)

这个文件不是 .htm 模板,而是PHP处理文件,它负责接收用户从搜索框提交的关键词,然后调用 search.htm 模板来显示结果,这个文件通常放在网站的根目录。

完整代码示例

<?php
require_once (dirname(__FILE__) . "/include/common.inc.php");
require_once DEDEINC."/arc.search.class.php";
// 获取搜索关键词并进行安全处理
$keyword = isset($keyword) && is_string($keyword) ? trim($keyword) : '';
// 实例化搜索类
$arcsearch = new Search($keyword, $typeid, $channelid, $orderby, $subday, $keywordtype, $totalresult, $searchtype);
// 设置每页显示多少条结果
$arcsearch->GetArcList($pagesize);
// 获取分页
$PageNo = isset($PageNo) && is_numeric($PageNo) ? $PageNo : 1;
$PageNo = max($PageNo, 1);
$PageNo = min($PageNo, $arcsearch->GetTotalPage());
$arcsearch->SetPageNo($PageNo);
// 获取和设置模板
$dtp = new DedeTagParse();
$dtp->LoadTemplate($cfg_basedir . $cfg_templets_dir . "/" . $cfg_df_style . "/search.htm");
$dtp->Display();
?>

代码详解

代码片段 说明
require_once (dirname(__FILE__) . "/include/common.inc.php"); 引入织梦的核心文件,必须放在最前面。
require_once DEDEINC."/arc.search.class.php"; 引入织梦的搜索核心类文件。
$keyword = isset($keyword) ? trim($keyword) : ''; 从URL中获取 keyword 参数(search.php?keyword=织梦),并进行简单的过滤。
new Search(...) 实例化搜索类,将各种搜索参数传递给它。
$arcsearch->GetArcList($pagesize); 执行搜索,并将结果加载到内存中。$pagesize 控制每页数量,可以从后台全局参数获取。
$arcsearch->GetTotalPage() 获取总页数。
$dtp->LoadTemplate(...) 加载我们之前创建的 search.htm 模板文件。注意路径要写对
$dtp->Display(); 将解析后的模板内容输出到浏览器。

如何在其他页面调用搜索框?

你可以在网站的头部(head.htm)或底部(footer.htm)中放置一个搜索表单,方便用户随时搜索。

搜索表单代码 (HTML)

<form name="formsearch" action="/search.php" method="get">
    <input type="hidden" name="kwtype" value="0" />
    <input type="hidden" name="searchtype" value="titlekeyword" />
    <input type="text" name="keyword" id="search-keyword" placeholder="请输入搜索关键词..." />
    <button type="submit" id="search-submit">搜索</button>
</form>

表单参数说明

参数 说明
action="/search.php" 表单提交的地址,固定为 search.php
method="get" 使用 GET 方法提交,这样搜索关键词会出现在 URL 中,方便用户收藏和分享。
name="keyword" 必须,接收搜索关键词的输入框名称。
name="kwtype" 搜索类型,0 表示模糊匹配,1 表示精确匹配。
name="searchtype" 搜索范围,titlekeyword 表示搜索标题和关键词,也可以是 title (仅标题) 或 body (仅内容)。

高级用法与常见问题

自定义搜索结果高亮

默认情况下,织梦不会高亮显示搜索关键词,你可以通过修改 /include/arc.searchview.class.php 文件来实现。

织梦网站搜索页模板代码
(图片来源网络,侵删)

找到 ParseTemplets() 函数,在其中找到处理 [field:title/][field:description/] 的地方,用 str_replace 函数将关键词替换为带有 <em> 标签的关键词。

示例(在 arc.searchview.class.php 中修改):

// 在处理 title 的地方附近,添加如下代码
if($this->SearchFields=='title' || $this->SearchFields=='all')
{
    $row['title'] = str_replace($this->GetKeyword(), '<em class="highlight">'.$this->GetKeyword().'</em>', $row['title']);
}
// 在处理 description 的地方附近,添加如下代码
if($this->SearchFields=='body' || $this->SearchFields=='all')
{
    $row['description'] = str_replace($this->GetKeyword(), '<em class="highlight">'.$this->GetKeyword().'</em>', $row['description']);
}

然后在你的CSS文件中定义高亮样式:

.highlight {
    color: #ff4400;
    font-weight: bold;
}

指定栏目搜索

如果你只想在特定栏目下搜索,可以在 search.php 中修改 $typeid 变量。

织梦网站搜索页模板代码
(图片来源网络,侵删)

只想在ID为 12 的栏目下搜索:

// 在 $keyword = ... 之后添加
$typeid = isset($typeid) ? intval($typeid) : '1,2'; // 注意:多个栏目ID用逗号隔开

然后在你的搜索表单中,可以添加一个下拉菜单来选择栏目:

<select name="typeid">
    <option value="1,2">全站</option>
    <option value="1">栏目一</option>
    <option value="2">栏目二</option>
</select>

搜索结果为空时的优化

{dede:global name='resultcount' runphp='yes'} 这个标签非常强大,你可以利用它,在无结果时提供一些热门文章推荐,引导用户浏览。

{dede:global name='resultcount' runphp='yes'}
if(@me == 0) {
    @me = "
        <div class='no-result'>
            <h2>抱歉,没有找到相关结果</h2>
            <p>您可以尝试其他关键词,或者看看我们为您推荐的热门文章:</p>
            <ul class='recommend-list'>
                {dede:arclist titlelen='40' row='5'}
                <li><a href='[field:arcurl/]'>[field:title/]</a></li>
                {/dede:arclist}
            </ul>
        </div>
    ";
} else {
    @me = "";
}
{/dede:global}

希望这份详细的指南能帮助你完美地实现织梦网站的搜索功能!

-- 展开阅读全文 --
头像
C语言中read与fread如何选择使用?
« 上一篇 前天
C语言如何实现简单Web服务器?
下一篇 » 前天

相关文章

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

目录[+]