爲Jekyll+GitHub Pages添加全文搜索功能

動態演示以下:
[上傳失敗, 請自行搜索原文]html

源碼庫: program-in-chinese/team_websitegit

找到此JS工具: christian-fei/Simple-Jekyll-Search, 按安裝說明先完成了對題目/類別/日期的搜索, 本地運行不錯. 再接再礪添加了對描述和全文(post.content)的搜索, 詳見全文索引.jsongithub

發現生成的json文件中, 特殊字符如引號使得json語法出錯:
web

發現前人對一樣問題的解決方法"full-text search" donot work! · Issue #63 · christian-fei/Simple-Jekyll-Search, 另參考christian-fei/Simple-Jekyll-Search, 在_plugins下添加腳本特殊字符過濾.rb:json

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好像將中文字符認做了非大寫的: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 githubpost

解決方法就是本地jekyll生成網站源碼後, 將網站源碼提交到repo裏.網站

參考Configuration Options_config.yml中將輸出目錄改成docs:ui

destination: docs

再將本來的jekyll文件都移到repo根下, 運行生成後提交, 搞定.

相關文章
相關標籤/搜索