Sculpin でホムペを再構築したときのメモ post

Sculpin でホムペを再構築してからだいたい一ヶ月ぐらい経ちました。

元のページは、 Markdown で作ったり はてな記法で書いてたり色々あったので全ページをクロールしてダウンロードした .html から .md への変換スクリプトを書きページを再構成しました。

手順としては

  1. 全ページをクロール
  2. .html をスクリプトで .md に変換&リンクを再構成(実際の変換スクリプトは www.sharkpp.net/convert/ - GitHub を参照)
  3. Sculpin で構築しやすいように再構成
  4. Github へ push したら自動で更新する仕組みを実装( Sculpin を実行するために xrea.com 上で libxml2 を構築する方法www.sharkpp.net/site - GitHub を参照)
  5. 公開

という感じです。

いろいろ自分好みなページを作る中で Sculpin の挙動を調べたメモを記録として残しておきます。

コマンドライン

構築

$ php sculpin.phar generate

または

$ php sculpin.phar generate --env=prod

構築&テストサーバー起動

$ php sculpin.phar generate --watch --server

Sculpin で使用できる変数

ページ内で使用できる変数

変数名 概要
site sculpin_site.yml の値
page ページ自体
formatter テンプレートエンジン名( twig など)
converters
relative_root_url ページ自体から見たルートへの相対パス
data Frontmatter (各ページ先頭での指示) で宣言されたコンテンツ
layout レイアウト名

site 変数

app/config/sculpin_site.yml で指定した値が設定されます。

キー 概要
.posts use: ["posts"]
.subtitle app/config/sculpin_site.yml で指定した値
.url サイトのURL。引数 --url で指定した値。
.author app/config/sculpin_site.yml で指定した値
.env 引数 --env で指定した値。dev など
.calculated_date ページの生成日時

page 変数

ページ自体の情報を参照できる変数。

---
title: "Sculpin でホムペを再構築"
date: 2015-06-28 18:00
tags: [雑記,php,xrea.com,Sculpin]
categories: [ブログ]
user_data: [hoge,fuga]

---

user_data の用な感じで自由に値を指定することも出来ます。

post.datadata は同じ内容を参照しているようです。

data 変数

Frontmatter (各ページ先頭での指示) で use: XXX として宣言されたコンテンツが読み込まれます。

Tips的なめも

ブログページ意外を参照する変数や方法は無い

Sculpin 自体には SculpinPostsBundle から生成される blogs/YYYY/MM/DD/XXXX を参照するような感じで、ブログページ以外の単体ページを参照する仕組みは標準ではなさそうです。 ただ、拡張として内部の情報を参照する形で作れば出来そうな感じではあるようです。

.htaccess 自体をコピーすることは出来ない

あれっと思いましたが、 Is it expected behavior that .htaccess file is not carried over from source dir to destination? - Issue #121 - sculpin/sculpin を見ると .htaccess 自体をページ生成時にコピーすることは出来ない様です。 が、ちょっと考えると htaccess.twig というファイルを作り

---
permalink: .htaccess
---
# hoge fuga

とすればいいようです。

記事へのリンクを張るにはメタ情報が必要

ヘッダとして

# Sculpin でホムペを再構築

の様にしても記事へのリンクが張られなかった。 タグ情報とかも結局入れるのでこのような形にする

---
title: "Sculpin でホムペを再構築"

---

タイトルはダブルコーテーションで囲うべし

タイトルの頭に記号が含まれると

$ php sculpin.phar generate --watch --server
     ! FileSource:FilesystemDataSource:.../source:_posts/2013-01-24-user-jp-follow-up.md Reference "-user.jp(?ユーザのためのハブサイト)のその後を追跡調査" does not exist at line 0. !
    Detected new or updated files
    Generating: 100% (215 sources / 0.04 seconds)
               :

の様に処理できない場合がある模様。 なので、ダブルコーテーションで囲うことでこの問題を回避出来る。

デフォルトで全てのページに拡張子を付けるには?

設定を下記のようにする。

# app/config/sculpin_kernel.yml
sculpin:
    permalink: :basename.html

ただし、ページネーションやページ内に埋め込まれているリンクは別個修正する必要がある。

Twig Extensions を使う方法

truncate などを使用するために必要な Twig Extensionssculpin.phar 自体には組み込まれていますが、デフォルトでは無効となっていてそのままでは利用できないようです。

利用するには app/config/sculpin_services.yml を作り設定を行う必要があります。

sculpin_services.yml の利用方法は SculpinPostsBundle — Sculpin — PHP Static Site Generator あたりに書いてありますが、残念ながらドキュメントからのリンクが張られていないようです。

また、残念なことに sculpin_services_{ENV}.yml の用な感じで環境ごとに拡張の有効/無効を切り替えて使用することは出来ないようです。

# app/config/sculpin_services.yml
services:
    twig.extension.text:
        class: Twig_Extensions_Extension_Text
        tags:
            - { name: twig.extension }

と、このようなファイルを作ることで

<div>{{ post.contents | truncate }}</div>

このように使用することが可能になります。

参考


 /  変更履歴  /  Permalink  /  このエントリーをはてなブックマークに追加
カテゴリ: ブログ  /  タグ: 雑記, php, xrea.com, Sculpin