搜索框与筛选条
搜索框、结果页的关键词高亮、多条件筛选条 —— 以及空结果的写法。
适用范围:搜索页 search.html、列表页(筛选条)。
搜索框
<!-- [搜索页] search 与 keyword 等价,search 更好读 -->
<form class="search" action="/search" method="get">
<input type="search" name="kw" value="{naicha:search}" placeholder="搜索内容">
<button type="submit">搜索</button>
</form>
结果列表与高亮
{naicha:if var="listTotal" gt="0"}
<p class="muted">共 {listTotal} 条结果</p>
{naicha:list keyword="{naicha:search}" num="10" page="{naicha:param name='page'}" order="relevance"}
<a href="{list.url}">{list.title highlight="{naicha:search}"}</a>
<p>{list.summary highlight="{naicha:search}" excerpt="80"}</p>
{/naicha:list}
{naicha:page}
{naicha:else}
<p>没有找到与「{naicha:search}」相关的内容。</p>
{/naicha:if}
highlight 是先转义、再插标签的(顺序反了就是 XSS 入口),
所以它能安全地用在用户可控的关键词上。order="relevance" 只在带关键词时有意义。
多条件筛选条
<!-- [列表] 筛选条:站点设置里开启筛选功能后用它 -->
{naicha:filters show="sort,year,tag"}
<!-- 想让它真的生效,列表标签要开 filters: -->
{naicha:list cid="{naicha:param name='cid'}" num="10" filters="1"}
…
{/naicha:list}
cid为哪个栏目生成筛选(不写就用当前栏目)show显示哪几个维度,如 sort,year,tag;没写的维度不显示(show="year" 就只有年份)它自己读当前地址判断「选了哪些」,并生成保留其它参数的链接。
⚠️
filters="1" 只加在「响应地址栏筛选」的那个主列表上。
侧栏的「最新 5 篇」这类局部列表不要开 —— 否则用户点一个筛选,侧栏内容也跟着变,看着莫名其妙。
