Hexo Blog 03:繼續探索 NexT
前一篇系列文章:更換 Hexo 主題,初探 NexT 最後建出了最基本的 NexT 主題 Blog,看起來簡潔有力,但還是缺很多 Blog 的常見功能。本來以為要到處搜尋 Plugins 之類的,但 NexT 的官方文檔 已經列出了大量的選項與 Plugins,很多功能只要在 config 中啟用就好。
下面我會列出非常必須或啟用後覺得特別有感的功能,並提供我自己的設定給各位參考,此外非常建議大家優先閱讀官方文檔自行嘗試。
成品
跟著我設定會變成這樣
環境
Hexo: 6.3.0
hexo-cli: 4.3.0
NexT: 8.14.0
主題樣式
NexT 提供了四種主題樣式,每種都可以對應黑暗模式,大家可以善用本地預覽來挑選自己喜歡的。
(身為眼睛天天被摧殘的碼農,我是一定要開啟黑暗模式的啦!)
1 | # Schemes |
側邊欄位置
預設在左邊,我因為其他版面配置考量,所以改成右邊。
有一些功能顯示的位置跟側邊欄位置相關,像是:返回最上按鈕、書籤。
1 | sidebar: |
側邊欄 (sidebar)
首頁文章折疊與閱讀全文按鈕
首頁預設是把每篇文章完整呈現出來,其實滿不符合一般人的期望,開啟此功能可以只顯示文章摘要,讓想看完整文章的讀者可以點擊 閱讀全文
按鈕進入該文章頁面閱讀。
修改設定檔
_config.next.yml 1
2
3# Read more button
# If true, the read more button will be displayed in excerpt section.
read_more_btn: true在文章設置斷點
在文章的 Markdown 檔案中插入
<!-- more -->
標記,這樣標記之前的內容會顯示在首頁,標記之後的內容則會隱藏。
閱讀全文按鈕
訪客人次/總閱讀次數
NexT 提供了 不蒜子 的網站記數功能,只要 enable:
設為 true
就能啟用。
1 | # Show Views / Visitors of the website / page with busuanzi. |
頁面底部的訪客人數與閱讀次數
文章閱讀次數 (Firestore)
使用 firestore 功能實現的文章閱讀次數,但其實應該說是文章訪客人數,同個瀏覽器重複進入文章是不會增加記數的。
需要去 Google Firebase 建立新專案,並且取得 apiKey
與 projectId
。
按照 NexT 文檔 就可以完成。
要注意的是 apiKey
必須進入 Authentication
頁面啟用該功能後才會生成。
之後需要進入 Firestore Database
頁面建立新資料庫,讀取規則需照如下設定:
1 | rules_version = '2'; |
之後再調整主題設定就好:
1 | # Another tool to show number of visitors to each article. |
文章標題下方的眼睛是 firestore 計算的文章訪客人數
這功能設置起來是真的滿麻煩,目前也不是很彈性,想快速有這種功能只要將前面 不蒜子 的網站記數功能 post_views:
設為 true 就好了。
但使用 firestore 的方式可以將專案結合其他 Google 的統計功能。
程式碼區塊複製按紐
預設程式碼區塊是沒有複製按鈕的,不過也只要 enable:
設為 true
就能啟用。
1 | codeblock: |
返回最上按鈕調整
其實預設就有開啟這功能,不過我比較喜歡有顯示百分比的。
可以選擇要不要放在側邊欄裡面,如果不要的話就會出現在側邊欄另一邊的下面。
1 | back2top: |
顯示瀏覽百分比的返回最上按鈕
頁面載入進度條
顯示在瀏覽器上方,讓頁面載入時有個視覺回饋。
1 | # Progress bar in the top during page loading. |
閱讀進度條
顯示在瀏覽器上方 (同頁面載入進度條) 或下方,跟返回最上按鈕的百分比是一樣意思,就是多一種視覺回饋,預設是藍色。
1 | # Reading progress bar |
閱讀進度條設成 left 跟 top 後,跟頁面載入進度條其實是差不多的東西
書籤
記住讀者的閱讀位置,這樣下次到訪時會從記錄的位置開始。
啟用後側邊欄另一邊的上面會有個書籤的圖標,點擊後就會記錄了。
也能設成自動記錄,但我個人覺得自動記錄很惱人,所以採用手動模式。
2022/12/20 更新:後來覺得這個功能整個惱人,所以關掉了。
1 | # Bookmark Support |
文章字數統計/閱讀時間估計
這是 Blog 中很常見的功能,但預設是沒啟用的。
照 官方文檔 操作即可啟用:
安裝
command line tool 1
2$ npm install hexo-word-counter
$ hexo clean調整專案設定
_config.yml 1
2
3
4
5
6
7
8
9# Hexo Word Counter: https://github.com/next-theme/hexo-word-counter
symbols_count_time:
symbols: true # 文章字數統計,顯示在文章標題下方
time: true # 文章閱讀時間估計,顯示在文章標題下方
total_symbols: true # 全文章字數統計,顯示在頁面最下方
total_time: true # 全文章閱讀時間估計,顯示在頁面最下方
exclude_codeblock: false # 排除程式碼區塊
wpm: 275 # 每分鐘閱讀幾個字
suffix: "mins."調整主題設定
_config.next.yml 1
2
3
4
5
6
7
8
9# Post meta display settings
post_meta:
item_text: false # 文章標題下方的標示是否顯示說明文字
# Post wordcount display settings
# Dependencies: https://github.com/next-theme/hexo-word-counter
symbols_count_time:
separated_meta: false # 文章標題下方的標示是否獨立一行顯示
item_text_total: true # 頁面最下方的標示是否顯示說明文字
文章標題下方的文章字數統計與閱讀時間估計
頁面最下方的全文章字數統計與全文章閱讀時間估計
關於 (About)、標籤 (Tags) 與 分類 (Categories) 頁面
NexT 預設沒有幫使用者建立這三個常用的頁面,不過建立步驟也很簡單,使用的是 NexT Custom Pages 機制:
使用建立新頁面指令:
1 | $ hexo new page custom-name |
指令中的 custom-name
分別換成 about
、tags
與 categories
就能創造出不同的三種頁面(此指令可以自訂任何頁面,不限於這三種)。
該指令會在 Blog 專案根目錄中的 source 資料夾中建立 custom-name/index.md 檔案。
修改 custom-name/index.md:
關於(about)頁面的 front-matter 只需要自訂 title 即可,接著下面可以像一般 post 文章一樣寫入自定義內容。
about/index.md 1
2
3
4title: 關於
Hi 歡迎你來到這一頁,在這文字媒介式微的時代,你能看到我在這寫的廢話真的算緣分。(除了
type: tags
與type: categories
的 Custom Pages 都能當成一般文章編輯內容)標籤(tags)頁面 與 分類(categories)頁面的 front-matter 還需要加上 type,並且下面不能加上自定義內容(加了也沒用)。
tags/index.md 1
2
3
4
title: 標籤
type: tagscategories/index.md 1
2
3
4
title: 分類
type: categories(NexT 主題對這兩種 type 的 Custom Pages 做了特殊處置,即顯示所有 tags 或顯示所有 categories。)
修改主題設定檔:
將本來被註解的 about、tags 與 categories 開啟。
1 | # Usage: `Key: /link/ || icon` |
完成上述操作後,重新部署 Blog 就能看到側邊欄的 menu 會出現 關於、標籤 與 分類 按鈕,點擊後可以進入各獨立頁面。
站內搜尋
可以在站內搜尋自己文章,啟用後側邊欄會有個放大鏡圖標的搜尋鈕。
照 官方文檔 操作即可啟用:
安裝
command line tool 1
$ npm install hexo-generator-searchdb
調整專案設定
_config.yml 1
2
3
4
5
6# Local Search: https://github.com/next-theme/hexo-generator-searchdb
search:
path: search.xml
field: post
content: true
format: html調整主題設定
_config.next.yml 1
2
3
4
5
6
7
8
9
10
11
12
13# Local Search
# Dependencies: https://github.com/next-theme/hexo-generator-searchdb
local_search:
enable: true
# If auto, trigger search by changing input.
# If manual, trigger search by pressing enter key or search button.
trigger: auto
# Show top n results per article, show all results by setting to -1
top_n_per_article: 1
# Unescape html strings to the readable one.
unescape: false
# Preload the search data when the page loads.
preload: false
站內搜尋範例
相關文章
在每篇文章的側邊欄列出關聯的文章 (NexT 8.14.0 之前是在每篇文章最後,並且有很多問題),這功能我是覺得滿推薦啟用的。
照 NexT 文檔 操作才會成功,若是直接照 插件 README 設定會失敗,因為 NexT 已經進行實現了,我們只需要安裝跟啟用就好。
- 安裝
1 | $ npm install hexo-related-posts |
- 調整主題設定來啟用
1 | # Related popular posts |
相關文章範例
結語
啟用以上功能後,Blog 頁面整個豐富了起來,但目前還是只能供讀者閱讀而已,下次再加上能讓讀者與作者交流的功能。
下一篇系列文章:NexT 主題加入留言與聊天室機制
參考資料
Hexo × NexT × Firestore 顯示瀏覽人次