search.htm 是搜索结果页的模板文件,当用户在你的网站使用搜索功能时,系统会自动调用这个模板来展示搜索到的内容。

下面我将从几个方面为你全面解析它:
文件位置
search.htm 文件通常位于你当前使用主题(模板)的目录下。
- 默认路径:
/templets/default/search.htm - 自定义路径:
/templets/你的主题名称/search.htm
如果你修改了默认模板,但没有在自定义主题下创建 search.htm,那么系统会回退到默认模板路径去寻找。
核心结构解析
一个标准的 search.htm 文件通常包含以下几个关键部分:

a. 搜索表单
这是搜索结果页的“输入口”,让用户可以输入新的关键词进行搜索,它通常位于页面顶部。
<form name="formsearch" action="{dede:global name='cfg_phpurl'/}/search.php" method="get">
<div class="form-search">
<input type="hidden" name="kwtype" value="0" />
<input type="hidden" name="searchtype" value="titlekeyword" />
<input type="text" name="q" class="search-keyword" placeholder="在这里搜索...">
<button type="submit" class="search-submit">搜索</button>
</div>
</form>
action="{dede:global name='cfg_phpurl'/}/search.php":指定搜索表单提交的目标地址。cfg_phpurl是系统配置的PHP文件目录,通常是/plus或/php。name="q":这是搜索关键词的标准字段名,织梦的搜索程序就是通过读取$_GET['q']来获取用户输入的关键词的。这个字段名不要轻易修改。name="kwtype":关键词类型。0:精确匹配(默认)1:模糊匹配
name="searchtype":搜索范围。titlekeyword:仅搜索标题和关键词(最常用)keyword:仅搜索文章关键词title:仅搜索文章标题arcbody:仅搜索文章内容
b. 搜索结果列表
这是页面的主体部分,用于循环展示所有搜索到的文章列表,它使用织梦的 在搜索结果页, 一个更完整的搜索结果列表标签应该是这样的: 关键属性解释: 当搜索结果很多,需要分页显示时,就需要分页导航标签。 这是一个功能完整、结构清晰的 A1: 在 A2: 使用 A3: 这需要稍微修改一下,你不能直接在 修改后的搜索表单: 修改后的 这时, 这样,当用户选择了某个栏目并搜索时, A4: 你需要在 这样,当用户搜索“织梦教程”时,页面标题就会变成“搜索结果: 织梦教程 - 你的网站名”,对SEO更友好。 希望这份详细的解析能帮助你完全理解和使用织梦的 arclist 标签或 loop
{dede:arclist titlelen='100' orderby='pubdate' idlist=''}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span class="info">([field:pubdate function="MyDate('Y-m-d', @me)"/])</span>
<p>[field:description function="cn_substr(@me, 100)"/]...</p>
</li>
{/dede:arclist}
{dede:arclist} 标签在搜索页面的特殊用法:arclist 标签有一个非常重要的内置属性 typeid,它的值不是栏目ID,而是用来接收搜索关键词的。
typeid='0':表示搜索所有栏目。typeid='-1':表示不搜索任何栏目(通常不用)。q 参数值(即用户输入的关键词)传递给 arclist 的 keyword 属性。{dede:arclist
typeid='0'
keyword='[field:keyword/]' len='60'
infolen='160'
listsize='10'
orderby='pubdate'
idlist=''
}
<div class="result-item">
<h3><a href="[field:arcurl/]" target="_blank">[field:title/]</a></h3>
<p class="summary">[field:description/]...</p>
<div class="info">
<span>来源:[field:typename/]</span>
<span>时间:[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</div>
</div>
{/dede:arclist}
typeid='0':搜索全站。keyword='[field:keyword/]':这是核心!它将URL中的搜索关键词 q 的值,作为 keyword 参数传递给 arclist,实现搜索功能。[field:keyword/] 在这里会自动获取当前搜索的关键词。titlelen长度。infolen:摘要长度。listsize:每页显示的结果数量(与分页标签配合)。orderby='pubdate':按发布时间排序,也可以是 hot (点击量)、scores (评分) 等。c. 分页导航
<div class="dede_pages">
<ul>
{dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno'}
{/dede:pagelist}
</ul>
</div>
{dede:pagelist}:织梦的分页标签。listsize='4':显示4个页码按钮(如 ... 2 3 [4] 5 6 ...)。listitem='...':定义分页栏显示哪些元素。
info:显示总页数、总记录数等信息。index:显示首页。pre:显示上一页。next:显示下一页。pageno:显示页码。end:显示尾页。
一个完整的
search.htm 示例search.htm 模板文件,你可以直接使用或在此基础上修改。<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">搜索结果 - {dede:global name='cfg_webname'/}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- 引入你的CSS文件 -->
<link rel="stylesheet" href="/templets/你的主题名称/css/style.css">
</head>
<body>
<header>
<!-- 你的网站头部,Logo,导航等 -->
{dede:include filename='header.htm'/}
</header>
<div class="main-container">
<div class="breadcrumb">
<a href="/">首页</a> > <span>搜索结果</span>
</div>
<!-- 搜索框 -->
<div class="search-box">
<form name="formsearch" action="{dede:global name='cfg_phpurl'/}/search.php" method="get">
<div class="form-search">
<input type="hidden" name="kwtype" value="0" />
<input type="hidden" name="searchtype" value="titlekeyword" />
<input type="text" name="q" class="search-keyword" placeholder="请输入关键词" value="{dede:global name='keyword'/}">
<button type="submit" class="search-submit">搜索</button>
</div>
</form>
</div>
<!-- 搜索结果提示 -->
<div class="search-result-info">
<p>为您找到 <strong>{dede:global name='resultcount'/}</strong> 条与 "<strong>{dede:global name='keyword'/}</strong>" 相关的结果</p>
</div>
<!-- 搜索结果列表 -->
{dede:arclist
typeid='0'
keyword='[field:keyword/]'
titlelen='60'
infolen='160'
listsize='10'
orderby='pubdate'
idlist=''
}
<div class="result-item">
<h3><a href="[field:arcurl/]" target="_blank">[field:title/]</a></h3>
<p class="summary">[field:description/]...</p>
<div class="info">
<span>来源:[field:typename/]</span>
<span>时间:[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</div>
</div>
{/dede:arclist}
<!-- 如果没有搜索到结果 -->
{dede:global name='itemindex' runphp='yes'}
if(@me == 1) {
@me = '<div class="no-result">抱歉,没有找到与 "<strong>{dede:global name="keyword"/}</strong>" 相关的结果。</div><div class="search-suggest">建议您:<br>1. 检查输入的关键词是否正确<br>2. 尝试使用其他关键词或更简洁的关键词搜索</div>';
} else {
@me = '';
}
{/dede:global}
<!-- 分页导航 -->
{dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno'/}
</div>
<footer>
<!-- 你的网站底部 -->
{dede:include filename='footer.htm'/}
</footer>
</body>
</html>
常见问题与高级技巧
Q1: 如何让搜索结果按相关度排序,而不是按时间?
arclist 标签中,将 orderby 属性改为 rank。{dede:arclist ... orderby='rank' ...}
rank 就是按相关度排序,这通常能带来更好的搜索体验。Q2: 如何修改搜索结果的摘要长度?
infolen 属性控制。infolen='200' 表示摘要长度为200个字符。{dede:arclist ... infolen='200' ...}
Q3: 如何实现“搜索并指定栏目”?
search.htm 里硬编码栏目ID,因为用户可能想搜索所有栏目,通常的做法是在搜索表单里增加一个栏目选择的下拉框。<form name="formsearch" action="{dede:global name='cfg_phpurl'/}/search.php" method="get">
<input type="text" name="q" placeholder="关键词">
<!-- 增加一个栏目选择下拉框 -->
<select name="typeid">
<option value="0">全站搜索</option>
{dede:channel type='son' noself='yes'}
<option value='{typeid}'>{typename}</option>
{/dede:channel}
</select>
<button type="submit">搜索</button>
</form>
arclisttypeid 的值就不是固定的 '0' 了,它需要从URL参数中获取。{dede:arclist
typeid='{dede:global name='typeid'/}'
keyword='[field:keyword/]'
...
}
typeid 的值就是所选栏目的ID,arclist 就只会在该栏目下搜索。Q4: 为什么搜索结果页的标题是 "搜索结果",而不是包含关键词的标题?
<title> 标签里动态获取关键词。search.htm 模板!
