教程:在jekyll博客中添加搜索功能
在创建一个静态博客网站时,对于网站的搜索功能来说是一个很重要的设计。虽然jekyll本身没有内置的搜索功能,但是我们可以通过使用一些可选的jekyll插件或通过集成第三方服务来添加搜索功能。
下面就以最经典的hydeout主题为例来介绍一下,具体步骤:
1.先下载Simple-Jekyll-Search这个插件到本地
开源地址:https://github.com/christian-fei/Simple-Jekyll-Search
2.创建search.json文件
首先在根目录下创建一个search.json的文件,然后复制下面的代码到这个文件
<!--请自己手动取掉反斜杠,或者直接复制到vscode里面会自动去掉。
---
layout: null
---
\[
\{\% for post in site.posts \%\}
\{
"title" : "\{\{ post.title | escape \}\}",
"category" : "\{\{ post.category \}\}",
"tags" : "\{\{ post.tags | join: ', ' \}\}",
"url" : "\{\{ site.baseurl \}\}\{\{ post.url \}\}",
"date" : "\{\{ post.date \}\}"
\} \{\% unless forloop.last \%\},\{\% endunless \%\}
\{\% endfor \%\}
\]
-->
3.复制下载好的js文件到站点js目录下
打开Simple-Jekyll-Search/dest/目录,把这两个文件simple-jekyll-search.js和simple-jekyll-search.min.js直接复制到自己博客根目录下的/js/下,没有就新建一个js目录。
4.在_layouts目录下新建一个search.html文件,添加如下内容
---
layout: default
title: 搜索
---
<header>
<h1 class="page-title">{{ page.title }}</h1>
<form>
<label for="search-input">
<h4>请输入标题、相关内容或日期</h4>
<br>
</label>
<input type="text" id="search-input" placeholder="搜索...">
</form>
<br>
</header>
<div class="content">
<div id="results-container">
<ul></ul>
<p class="no-results" style="display:none;">没有搜索到相关文章</p>
</div>
</div>
<script src="/js/simple-jekyll-search.min.js"></script>
<script>
SimpleJekyllSearch({
searchInput: document.getElementById('search-input'),
resultsContainer: document.getElementById('results-container').querySelector('ul'),
json: '/search.json',
searchResultTemplate: '<li><a href="{url}" title="{desc}">{title}</a></li>',
noResultsText: '', // 将此处设置为空字符串
limit: 20,
fuzzy: false,
onSearchComplete: function(searchResults) { // 添加此行
var noResults = document.querySelector('.no-results');
if (searchResults.length === 0) {
noResults.style.display = 'block';
} else {
noResults.style.display = 'none';
}
}
});
</script>
5.如果要单独显示一个search.html页面,可以添加以下代码:
<style>
/* 修改header样式 */
header {
display: flex;
flex-direction: column;
align-items: center;
margin-bottom: 40px;
background-color: #f9f9f9;
padding: 20px;
border-radius: 10px;
}
/* 修改标题样式 */
h1.page-title {
margin-top: 0;
margin-bottom: 20px;
font-size: 32px;
text-align: center;
}
/* 修改提示信息样式 */
h4 {
margin: 0;
color: #666;
font-size: 18px;
margin-bottom: 10px;
}
/* 修改输入框样式 */
#search-input {
width: 100%;
max-width: 500px;
margin-bottom: 20px;
padding: 10px;
font-size: 16px;
border: none;
border-bottom: 2px solid #ccc;
border-radius: 0;
}
/* 修改输入框聚焦样式 */
#search-input:focus {
outline: none;
border-bottom: 2px solid #000;
}
/* 修改搜索结果容器样式 */
#results-container {
display: flex;
justify-content: center;
flex-direction: column;
background-color: #fff;
padding: 20px;
border-radius: 10px;
box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1);
}
/* 修改搜索结果列表样式 */
#results-container ul {
list-style: none;
padding: 0;
margin: 0;
}
/* 修改搜索结果项样式 */
#results-container li {
margin-bottom: 10px;
text-align: center;
font-size: 18px;
}
/* 修改搜索结果链接样式 */
#results-container li a {
color: #333;
text-decoration: none;
transition: all 0.3s ease;
}
/* 修改搜索结果链接悬停样式 */
#results-container li a:hover {
color: #007bff;
}
/* 修改没有搜索结果提示信息样式 */
.no-results {
text-align: center;
font-size: 18px;
color: #666;
}
</style>
<header>
<h1 class="page-title">{{ page.title }}</h1>
<form>
<label for="search-input">
<h4>请输入标题、相关内容或日期</h4>
</label>
<input type="text" id="search-input" placeholder="搜索...">
</form>
</header>
<div class="content">
<div id="results-container">
<ul></ul>
<p class="no-results" style="display:none;">没有搜索到相关文章</p>
</div>
</div>
<script src="/js/simple-jekyll-search.min.js"></script>
<script>
SimpleJekyllSearch({
searchInput: document.getElementById('search-input'),
resultsContainer: document.getElementById('results-container').querySelector('ul'),
json: '/search.json',
searchResultTemplate: '<li><a href="{url}" title="{desc}">{title}</a></li>',
noResultsText: '', // 将此处设置为空字符串
limit: 20,
fuzzy: false,
onSearchComplete: function(searchResults) { // 添加此行
var noResults = document.querySelector('.no-results');
if (searchResults.length === 0) {
noResults.style.display = 'block';
} else {
noResults.style.display = 'none';
}
}
});
</script>
通过安装Simple-Jekyll-Search插件,我们可以很轻松地添加搜索功能。同时,为了让搜索结果显示得更加友好,我们还为搜索结果设置了一个模板,并添加了搜索结果为空时的处理。以上几个简单步骤就可以让你的博客网站拥有搜索功能。
- Author: 作者
- Link: https://www.viliv.xyz/posts/2023-04-29-%E6%95%99%E7%A8%8B%E5%9C%A8jekyll%E5%8D%9A%E5%AE%A2%E4%B8%AD%E6%B7%BB%E5%8A%A0%E6%90%9C%E7%B4%A2%E5%8A%9F%E8%83%BD/
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.