ブログを作る(13) 長いエントリを省略して表示する
2017-06-29
Techブログのトップページが重いなと思っていたので、長いエントリは冒頭だけ表示するようにした。いわゆる「続きを読む」機能である。
「続きを読む」を実装する場合、エントリのどこまでを冒頭と判定するかが問題になる。ブログエンジンによってはエントリ内に特殊な記号を記入することで「続きを読む」の位置を明示するものもあるけれど、いちいち書くのも面倒なので避けたかった。適当によしなにやってほしい。
ということで今回実装したアルゴリズムが以下。
- markdownの先頭10行を冒頭とする。
- ただし最後の行が「#」から始まるときは要約の最後が見出しになって微妙なのでそれも落とす。
- 例外として、エントリが15行以内である場合は充分短いので全体を表示する。
充分短い、の定義は最初は10行以内としていたけど、これだと11行のエントリがあったときも「続きを読む」が表示されて、クリックすると1行増えるだけなので微妙だった。そこで、「何行に丸めるか」と「何行までなら全文表示するか」の行数を別にすることでいい感じになった。
ちなみにこの方法だとcode blockをまたいでしまう可能性があるけど、redcarpet gemだとcode blockが閉じられていない場合は最後までがcode blockだと判断してくれるようで、特に対処は必要なかった。