Sculpin で自動的に「続きを見る」リンクを作る方法 post

なんか、 Sculpin の日本語情報が圧倒的に少ない気がするのでTipsを投下してみます。

このサイトで使っている自動的に「続きを見る」リンク

「続きを見る」リンク

のような感じのリンクを作る方法です。

方向性

方向性としては、

じゅげむと、いろは歌は、、、、
ほげふが

## じゅげむ

寿限無寿限無、、、

## いろは歌

色はにほへど 散りぬるを 、、、、

と、

  1. 最初のセクション(じゅげむと、いろは歌は、、、、の部分)
  2. レベル2ヘッダ(じゅげむの部分)
  3. セクション(寿限無寿限無、、、の部分)
  4. 以下続き

のような感じの投稿内容から

じゅげむと、いろは歌は、、、、
ほげふが

<a href="...">... 続きを見る</a>

のように、最初のセクションを抜き出し、「続きを見る」リンクを作るようにします。

準備

うちのホムペは sculpin/sculpin-blog-skeleton ベースなので、これをベースとして直していく感じになります。

そうでない場合は、適時読み替えてください。

まず Twig で、preg_XXX 系が利用できるようになる拡張をインストールします。

利用するのは、jasny/twig-extensions です。

app/config/sculpin_services.yml に追記 or なければ作成し、Twig 拡張を利用できるようにします。

+ services:
+     twig.extension.text:
+         class: Twig_Extensions_Extension_Text
+         tags:
+             - { name: twig.extension }
+     twig.extension.pcre:
+         class: Jasny\Twig\PcreExtension
+         tags:
+             - { name: twig.extension }

sculpin.json

          "components/jquery": "~1.9.1",
-         "components/highlightjs": "~7.3.0"
+         "components/highlightjs": "~7.3.0",
+         "jasny/twig-extensions": "@dev"
      },
      "config": {

jasny/twig-extensions を追加し

$ php sculpin.phar install

のようにしてインストール。

作成

やっていることは驚くほど簡単です。

source/index.html がトップページ用のテンプレートですが、

         </header>
          <div>
-             {{ post.blocks.content|raw }}
+             {{ post.blocks.content|preg_replace('!^(.+?)(<h.*)?$!sm', '$1') | raw }}
+             {% if post.blocks.content|preg_replace('!^(.+?)(<h.*)?$!sm', '$1') != post.blocks.content %}
+                 &hellip;&nbsp;<a href="">続きを見る</a>
+             {% endif %}
          </div>
          <hr />

と、このような感じにスケルトンから変更します。

やっていることは、

  1. 生成済みコンテンツ(post.blocks.content) に対して、最初のヘッダタグの直前までを抜き出す
  2. 「続きを見る」リンク追加、ただし、コンテンツが省略されていないこと。

と、すごく単純なことです。

これの肝は、最初のセクションにはヘッダタグがない、ということで、これはレベル1のヘッダタグとしてページタイトルが別になるようにしてあるためなので、違う構造であれば試行錯誤は必要ですが、うまいこと正規表現を変えて対応できると思います。

結果

「続きを見る」リンク

やったね!

参考


 /  変更履歴  /  Permalink  /  このエントリーをはてなブックマークに追加
カテゴリ: Sculpin  /  タグ: Sculpin, Twig, php, Tips, Snippet