在创建一个静态博客网站时,对于网站的搜索功能来说是一个很重要的设计。虽然jekyll本身没有内置的搜索功能,但是我们可以通过使用一些可选的jekyll插件或通过集成第三方服务来添加搜索功能。
下面就以最经典的hydeout主题为例来介绍一下,具体步骤:
1.先下载Simple-Jekyll-Search这个插件到本地
开源地址:https://github.com/christian-fei/Simple-Jekyll-Search
2.创建search.json文件
首先在根目录下创建一个search.json的文件,然后复制下面的代码到这个文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
<!--请自己手动取掉反斜杠,或者直接复制到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文件,添加如下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| --- 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页面,可以添加以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
| <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插件,我们可以很轻松地添加搜索功能。同时,为了让搜索结果显示得更加友好,我们还为搜索结果设置了一个模板,并添加了搜索结果为空时的处理。以上几个简单步骤就可以让你的博客网站拥有搜索功能。