Hexo
主题系列之二:关于如何在主题里修建搜索页面。
首先和前文的「T&C」一样,建立一个在source
下的search
的文件夹,并指向一个新建的search.ejs
文件。
search
的搜索大致分为几个主要的步骤:生成xml
搜索文件,生成搜索框,配置搜索的js
代码,以及弹出搜索结果。若是最后发现结果出不来就需要回头依次排查。
本文的大部分内容都是根据《Hexo: 从零开始编写自己的主题》进行尝试的。
生成xml
文件
可以通过在blog
文件夹唤起Git
的方式,输入:
1 | npm install hexo-generator-search --save |
或者:
1 | npm install hexo-generator-searchdb --save |
这两个插件的效果都是一样的,就是在public
文件夹中生成一个叫做search.xml
的文件。
安装后各需要在站点配置文件中添加相应的代码,这一块不同的插件要求也不一样,甚至前者还需要在主题里配置一个模板,所以这些很容易查到的东西就不再赘述了。
总之,这一阶段成功的标志就是hexo g
后在pubilc
中见到search.xml
,而打开它则是这样的格式:
1 |
|
生成搜索框
这一块算是「表面工夫」,也就是我们需要选定一块风水宝地来画一个框框,以便让用户可以输入想要搜索的关键词。
以我对自己的博客的规划来说,我需要把它放在那个search.ejs
文件中,这样用户一旦点到目录上的search
,就会直接跳转到搜索框中。
搜索框没什么好说的,也就是一堆html
代码,大致如下,除了代表css
渲染的class
可以根据自己的css
配置修改外,其他的诸如id
之类的玩意最好不要动,毕竟这和后面的js
文件,以及结果输出是连在一起的。
1 | <%- js('js/search.js') %> |
其中,placeholder
的意思是在框内显示啥,比如「键入搜索」,或者「站内搜索」啥的,不写也行。
配置JS代码
正如上面的代码中的引入显示的那样,我们选取了js
文件夹下的search.js
作为搜索框的运行逻辑,但不幸的是,search.js
并非天生存在,因此我们需要手动建立一个。
在主题文件夹下的source
的js
下新建search.js
空白文件,并复制粘贴Github代码(感谢这位好心人)
最后,在运行搜索功能会用到的ejs
中(比如我的那个search.ejs
),添加相关代码:
1 | <script src="https://libs.baidu.com/jquery/1.9.0/jquery.js"></script> |
弹出搜索结果
结果的显示代码非常简单:
1 | <div id="local-search-result"></div> |
把它放在你想要显示结果的地方即可,弹出式或者直接显示啥的。
CSS渲染等美化
可以根据自己需要配置搜索框,这点还是比较容易的,但搜索结果如何美化,却需要一定技巧。
祭出我们的大杀器:网页「检查」!
在前文所述的「检查」中,随便在搜索界面输入一个关键词,比如「我」,我们可以看到很多隐藏信息:
1 | <input id="local-search-input" class="search-input" type="search" placeholder=" " aria-label="Search"> |
可以看到,整个搜索结果有class
名为search-result-list
,文章名为search-result-title
,段落为search-result
,关键字「我」名为search-keyword
等等···都是可以通过css
进行美化的。
有时候我们不喜欢的内容无法被css
修改怎么办,比如关键字用斜体还是高亮,列表前面要不要有「点」(无序列表)等等···这些问题都可以通过修改之前那个js
文件实现,把<i>
改为<code>
,删去<ul>
等等···
自此,搜索篇就搞定咯。
若还有啥问题,欢迎骚扰我的邮箱