- 搜索结果页模板:
search.htm - 搜索表单页模板:
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为 1 和 2 的栏目下搜索:
// 在 $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}
希望这份详细的指南能帮助你完美地实现织梦网站的搜索功能!
