搜索(Search)


Couch 支持通过模板的所有定义的可编辑区域(以及一些系统字段 - 即标题和名称字段)搜索它们,并返回包含这些单词的所有页面。

首先我们先看一下官方提供的快捷创建一个搜索框:

<cms:search_form />

他会生成一个form表单,里面包含 <input name='s' type='search' />  

您可以创建和使用自己的表单,而不是使用由search_form标签创建的表单。只需确保用户将在其中输入关键字的文本框命名为“s”。

获取搜索结果,使用search标签,他包含两个参数:masterpage, limit

<cms:search masterpage='blog.php' limit='10' >
    <h3><a href="<cms:show k_page_link />"><cms:show k_search_title /></a></h3>
    <cms:show k_search_excerpt />
</cms:search>

搜索blog项目下内容,列出10条。

搜索原理是在网址后加一个名为s的关键词参数,/?s=关键词

因此,如果使用以下 URL 调用放置搜索片段的页面,则搜索标记将搜索两个词 - “hello”和“world” -
http://www.yoursite.com/search.php? s=hello+world
您可以将搜索标签的关键字参数设置为要搜索的词。这种方法使得使用变量来指定搜索词成为可能。事实上,我们甚至可以从 URL 的查询字符串中获取值,并通过关键字参数将其传递给搜索标签-

<cms:search masterpage='blog.php' limit='10' keywords="<cms:gpc 's' />" >
    <h3><a href="<cms:show k_page_link />"><cms:show k_search_title /></a></h3>
cms:show k_search_excerpt /> </cms:search>

在上面的示例中,我们使用gpc标签从 URL 中获取名为 's' 的查询字符串参数,并将其值设置为要搜索的关键字,从而使示例的行为与搜索标签没有任何关键字的情况完全相同


默认搜索结果页是index.php, 如果不是博客网站,这样确实不方便,我们可以指定任何搜索结果页,参见以下代码:

<cms:search_form msg='Enter keywords' processor="<cms:show k_site_link />search.php" />

这样,search.php成为搜索结果页面,可以使用processor参数为搜索表单指定任何结果页面,其中msg是搜索框的默认文字,不填的话默认是 "search",
提示:我们可以自行编辑form结构,不必使用search_form标签,只需要保证input name='s',可以参考默认标签生成的代码。

下面给出一个官方完整搜索框 + 搜索结果的代码

<cms:search_form />

<cms:search limit='10' >
    <cms:if k_paginated_top >
        <div>
            <cms:if k_paginator_required >
                Page <cms:show k_current_page /> of <cms:show k_total_pages /><br>
            </cms:if>
            <cms:show k_total_records /> Pages Found -
            displaying: <cms:show k_record_from />-<cms:show k_record_to />
        </div>
    </cms:if>
    <h3><a href="<cms:show k_page_link />"><cms:show k_search_title /></a></h3>
    <cms:show k_search_excerpt />
    <hr>
    <cms:paginator />
</cms:search>

Couchcms使用了Mysql的全文搜索,但是也有其缺点:即不支持4个字母以下的搜索(认为其不重要),且中文搜索出现匹配问题。

所以我们可以对其官方提供的搜索的功能进行少许改造让其更高级一点(ajax自动完成),让用户输入即使一个字或单词后出现搜索结果,提示他继续输入或者选择过滤结果。

下面我们对他进行改造:ajax下拉搜索自动完成