ゴミ箱.net

汚物は消毒

[webgen]すべてのページに共通の属性を付与する

このページの情報はwebgen 1.4.0をもとにしています。

webgenにおいて、HTMLファイルの元となるページファイルにはmetainfo(メタ情報)ブロックを持たせることができ、そこにYAML形式で好きな属性を指定することができる。
詳細はwebgen導入メモ (3) ページ作成編[webgen]複数のコンテンツブロックを使用するあたりを参照すること。

しかし残念なことに、このmetainfoはページファイルごとに個別に指定しなければならない。
ページ共通のテンプレートを用いている場合であっても、テンプレートファイルにおいてmetainfoを定義し、すべてのページに適用するということはできない。([webgen]テンプレートを入れ子にするも参考。)
たとえばウェブサイト名を1箇所だけmetainfoに記述し、それを全ページに一括で適用するということもできないのだ。

…と言いたいところだが、実際にはそのような場合に1箇所だけmetainfoを記述してすべてのページに適用する抜け道が存在する。

webgenのソースフォルダsrcの下にmetainfoという名称のファイルを作成し、そこにメタ情報を指定すれば全ページに適用されるのだ。
(Windowsだと拡張子なしのファイルはアプリケーションとの関連づけが扱いづらいので、○○.metainfoというファイル名でもよい。ただしファイル名をdefault.metainfoとすると、デフォルト設定を上書きしてしまうらしく、うまく動かなくなるようだ。)

ファイルmetainfoはページファイルやテンプレートファイルと同様にブロックに分けられる。
定義すべきブロックは2つ。pathsブロックとalcnブロックだ。pathsブロックではソースファイルのパスに対する属性、alcnブロックでは生成されたファイルのパスに対する属性をYAML形式で指定する。
以下に書式を示す。

--- paths
ソースファイルのパス1:
属性名1: 属性値1
属性名2: 属性値2
ソースファイルのパス2:
属性名1: 属性値1
属性名2: 属性値2

--- alcn
生成されたファイルのパス1:
属性名1: 属性値1
属性名2: 属性値2
生成されたファイルのパス2:
属性名1: 属性値1
属性名2: 属性値2

ここで、ファイルのパスにはワイルドカードが使える。*はフォルダ階層内の任意の文字列、、**はフォルダ区切りを含む任意の文字列にマッチする。(なおパスがワイルドカードで開始する場合はパスを""で囲む必要がある模様。)
相対パスの場合の起点は現在のフォルダ、絶対パスにした場合の起点はサイトのルートフォルダとなる。

すべてのソースファイルに属性を適用するには、pathsブロックにおいてソースファイルのパスを「/**/*.page」と指定する。(alcnブロックはなくてもかまわない。)
例として、全ページにサイト名を一括で指定したい場合は、ファイル src/metainfo に以下のように設定する。
--- paths
/**/*.page:
siteName: "○○のホームページ"

このとき、ページファイルやテンプレートファイルにおいて{siteName:}のようにタグを記述すれば、タグが「○○のホームページ」に置換されるのだ。
スポンサーサイト

PageTop

コメント


管理者にだけ表示を許可する