天天看點

為Jekyll+GitHub Pages添加全文搜尋功能

為Jekyll+GitHub Pages添加全文搜尋功能

動态示範如下:

為Jekyll+GitHub Pages添加全文搜尋功能

源碼庫:

program-in-chinese/team_website

找到此JS工具:

christian-fei/Simple-Jekyll-Search

, 按安裝說明先完成了對題目/類别/日期的搜尋, 本地運作不錯. 再接再厲添加了對描述和全文(post.content)的搜尋, 詳見

全文索引.json

發現生成的json檔案中, 特殊字元如引号使得json文法出錯:

為Jekyll+GitHub Pages添加全文搜尋功能

發現前人對同樣問題的解決方法

"full-text search" donot work! · Issue #63 · christian-fei/Simple-Jekyll-Search

, 另參考

, 在

_plugins

下添加腳本

特殊字元過濾.rb

:

module Jekyll
  module C字元過濾器
    def remove_chars_cn(輸入)
      輸入.gsub! '\\','\'
      輸入.gsub! /\t/, '    '
      輸入.gsub! '@',''
      輸入.gsub! '$',''
      輸入.gsub! '%',''
      輸入.gsub! '&',''
      輸入.gsub! '"',''
      輸入.gsub! '{',''
      輸入.gsub! '}',''
      輸入
    end
  end
end

Liquid::Template.register_filter(Jekyll::C字元過濾器)           

module名稱如果沒有大寫字母開頭, 報文法錯誤如下, 猜測原因與

Scala疑似中文命名問題後續

類似, 不過Ruby好像将中文字元認作了非大寫的:

特殊字元過濾.rb:2: class/module name must be CONSTANT (SyntaxError)           

方法remove_chars_cn未能中文, 由于Jekyll的Liquid腳本語言貌似不支援Unicode辨別符, 會報錯:

Liquid Warning: Liquid syntax error (line 6): Unexpected character 删 in "{{ post.description | strip_html | strip_newlines | 删除特殊字元 }}" in 全文索引.json           

在本地運作通過後, 将包括插件在内的修改送出到GitHub後, 發現網站加載json檔案時報錯"invalid JSON", 檢視取json的請求響應内容後, 各種嘗試後初步認定是插件未成功運作, 一通搜之後發現, GitHub Pages不支援任意插件的運作:

jekyll plugin not work on github

解決方法就是本地jekyll生成網站源碼後, 将網站源碼送出到repo裡.

參考

Configuration Options

_config.yml

中将輸出目錄改為

docs

destination: docs           

再将原本的jekyll檔案都移到repo根下, 運作生成後送出, 搞定.

繼續閱讀