摘要
很多的博客都需要搜索框,近段时间发现,用到的Swiftype等都需要收费了,所以说”世上没有免费的午餐“,就此我决定放弃使用第三方的搜索,还是规规矩矩的使用本地搜索的功能,虽然使用了本地搜索,但是不甘于其太过简单,经过个人搜索了一大堆搜索框的优化方法,终于建立起一个实用的搜索框。特此分享出来。
正文
前沿
本文所实现的搜索框源代码借鉴于flashlab,flashlab的源代码实现了,搜索框针对本地搜索、百度搜索、谷歌搜索。百度搜索-通过百度针对你网站且关键字收录搜索,谷歌同理,我的搜索框在此基础上做了简单的修改,来,先睹为快,
搜索框实现
前提
本搜索框借助于插件hexo-generator-search,请先安装并启用Search
1 | npm install hexo-generator-search --save |
启用Search
1 | search: |
文件结构
文件描述:
layout/_layout.swig
- 确保localsearch.swig被引入,此文件为页面初始化接口文件layout/_partials/header.swig
- 此文件包含位于导航栏的搜索按钮的实现代码layout/_partials/search.swig
- 此文件包含判断是否使用相关搜索,搜索包含(tinysou、swiftype、localsearch)layout/_partials/search/localsearch.swig
- (重要)此文件是实现搜索显示的INPUT代码文件(即你可以将这里的代码放到你想要显示的搜索input的地方)layout/_scripts/third-party/localsearch.swig
-此文件包含实现搜索的核心JS代码source/css/_common/components/third-party/localsearch.styl
-包含搜索框的样式代码source/css/_common/components/third-party/third-party.styl
-包含样式代码引入页面的代码
注意:
除了上面标注为重要的文件都是标准代码未见,为模板的存在,而标注为重要文件的代码是可以放到其他代码文件位置,主要是让你希望INPUT的搜索框放在哪些你想要显示的页面。
代码实现
如果您已经了解上面的代码文件,并清楚知道文件的位置,在操作前先对你的代码原文件进行备份一下,接着请移步到”flashlab“, 此页面列出以上需要修改的代码文件,请将你的文件按照我给出的此链接位置的说明进行对应替换。通常情况下,将所有以上替换后,并不能确保你的搜索框正常显示,但是没问题,因为以上代码替换后,你已经将要实现的搜索框的代码和接口一并完成,剩下的就是如何调用和放置的问题,此部分我会详细解析
搜索框显示
记得我上面说过的layout/_scripts/third-party/localsearch.swig
,此文件的代码是搜索框显示和调用的代码,你可以将代码拷贝到对应的页面想要显示的代码位置。OK,看下面的例子
代码如下:
1 | <form class="site-search-form" > |
在导航栏显示
编辑layout/_partials/header.swig
定位导航栏代码区,如下找到hasSearch,原意:对是否启用搜索的判断,你可以拷贝上述提示”重要”的代码到此位置,实现导航栏显示搜索框INPUT,通常这样的实现比较适合于”导航栏在页面顶部的位置”,如果你的导航栏在左侧或者右侧,不建议放在这个位置,显然不好看,而且不一定看到搜索框。
1 | {% if hasSearch %} |
右侧浮动显示
技巧:
一个很好的搜索方式,如我的博客,将搜搜框浮动放置到右侧,实现的方法,你可以网上搜搜一大堆对应的浮动样式代码,一般这些样式代码都只会操作特定的属性的标签(div
),你可以将”重要”的代码拷贝到你的浮动框div
中,使得搜索框随同div
浮动显示在右侧。
如果你不想网上找,你也可以使用我的代码:
在你的source/css/_common/components/third-party/localsearch.styl
添加以下样式代码:
1 | #tstart-toolbar-top-jory |
使用我的div(里面已经插入搜索框代码),你可以将此代码放到你的layout/_partials/header.swig
任意位置,但是提示一下:请留意文件中的HTML的div嵌套问题,请不要将此代码嵌套在一些宽度和长度比较少的的div里面,否则你的我提供的div并不能跳出上级的div标签,从而无法达到显示在右侧
1 | <div id="tstart-toolbar-top-jory"> |
建议的位置:
你可以找到一下代码位置,在其下面添加上述代码即可
1 | <div class="site-nav-toggle"> |
代码小优化
你可以加个对应搜索框代码的判断,可以实现是否启用搜索框显示(此操作非必需)
1 | {% if config.search %} |
小结
我给的代码已经可以实现你的搜索框显示和显示在右侧浮动,如果你的搜索框不太好看,请自行解决,多多动手咯
结语
如果你还需要了解更多技术文章信息,请继续关注Jory博客