要望なのですが、各記事ファイルにタイトルやメタデータを書きたいと思います。 現在は source/vars.yml で一括設定になっていますが、 できれば記事ファイルに書きたいです。 PieCrustというサイトジェネレータでは ``` --- title: aaa tags; [aaa, bbb, ccc] --- 記事本文 ``` という構造になります。 こういった使い方ができればデータが1ファイルでまとまるので 見やすいなと思います。 よろしくお願いいたします。
Activity
kb-masaki commentedon Jan 24, 2014
vars.yml には includes: というキーで外部のymlファイルをインクルードする仕組みがあるので、それではいかがでしょう?
includes: [ posts.yml ]と記述すれば、
source/posts.ymlのキーを変数として取り込めます。gracix commentedon Jan 24, 2014
なるほど。
でもやっぱり本文とデータは2ファイルになってしまいますよね・・・
できれば本文と一緒に書きたいです。
たとえばプラグインで
データファイルの設定を読み込み > 設定部分をメインファイルへ > 設定部分を削除して本文を処理エンジンへ引き渡し
みたいなことはできそうでしょうか?
前処理部分のような感じで。
自分でもプラグインを考えてみます。
kb-masaki commentedon Jan 24, 2014
あー、テンプレートファイルの中に変数をセットしたいみたいなイメージでしょうか?
Smartyだと {assign} 関数でテンプレート内でセットすることはできますが、
それで代用できませんか?
http://www.smarty.net/docs/ja/language.function.assign.tpl
とかどうでしょう。
Smartyは素直に配列アサインできなくてトリッキーなコードになってますが。。。
gracix commentedon Jan 24, 2014
テンプレートではなくて記事ファイルです。
たとえば index.tpl などです。
が1ファイルになっているイメージです。
頂いたコードも試してみました。
index.tplに書き込んでみましたが、_base.tplや_header.tplが先に読まれるので
title やtags が Undefined になってしまいます。
extends で先にテンプレートと記事を読み込んで、
ブロックで出力する方法を考えています。
基本設計に反するんで複雑になってしまいそうですね・・・
gracix commentedon Jan 24, 2014
{block}を試してみました。
そうすると
記事の中で_base.tplをextendsしたい
_base.tplでは処理前に$_content_tplが必要
と循環参照になってしまい、出力が止まりました :p
やはりtitleやヘッダのmeta内容などは記事を前処理して
テンプレートに渡す必要がありそうです。
現状は vars.yml に書くしかないという感じです。(当たり前か)
kb-masaki commentedon Jan 24, 2014
あー、なるほど。
あまり綺麗なやり方ではないですが、 _base.tpl は純粋に
{include file=$_content_tpl}だけにしてもらって、
index.tpl 側で
とすれば一応できるかと思います。