Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

記事ファイルにタイトルやメタデータを書きたい #2

Open
gracix opened this issue Jan 24, 2014 · 6 comments
Open

Comments

@gracix
Copy link

gracix commented Jan 24, 2014

要望なのですが、各記事ファイルにタイトルやメタデータを書きたいと思います。

現在は source/vars.yml で一括設定になっていますが、
できれば記事ファイルに書きたいです。

PieCrustというサイトジェネレータでは


---
title: aaa
tags; [aaa, bbb, ccc]

---
記事本文

という構造になります。

こういった使い方ができればデータが1ファイルでまとまるので
見やすいなと思います。

よろしくお願いいたします。

@cw-masaki
Copy link

vars.yml には includes: というキーで外部のymlファイルをインクルードする仕組みがあるので、それではいかがでしょう?

includes: [ posts.yml ]

と記述すれば、source/posts.yml のキーを変数として取り込めます。

@gracix
Copy link
Author

gracix commented Jan 24, 2014

なるほど。
でもやっぱり本文とデータは2ファイルになってしまいますよね・・・

できれば本文と一緒に書きたいです。

たとえばプラグインで

データファイルの設定を読み込み > 設定部分をメインファイルへ > 設定部分を削除して本文を処理エンジンへ引き渡し

みたいなことはできそうでしょうか?
前処理部分のような感じで。

自分でもプラグインを考えてみます。

@cw-masaki
Copy link

あー、テンプレートファイルの中に変数をセットしたいみたいなイメージでしょうか?
Smartyだと {assign} 関数でテンプレート内でセットすることはできますが、
それで代用できませんか?

http://www.smarty.net/docs/ja/language.function.assign.tpl

{* -------------------------------------- *}
{assign var="title" value="Some title"}
{assign var="tags" value=","|explode:"tag1,tag2,tag3"}
{* -------------------------------------- *}
<section>以下コンテンツ</section>

とかどうでしょう。
Smartyは素直に配列アサインできなくてトリッキーなコードになってますが。。。

@gracix
Copy link
Author

gracix commented Jan 24, 2014

テンプレートファイルの中に変数をセットしたいみたいなイメージでしょうか?

テンプレートではなくて記事ファイルです。
たとえば index.tpl などです。

  • 記事タイトル
  • 記事メタデータ
  • 記事本文

が1ファイルになっているイメージです。

頂いたコードも試してみました。

{* -------------------------------------- *}
{assign var="title" value="Some title"}
{assign var="tags" value=","|explode:"tag1,tag2,tag3"}
{* -------------------------------------- *}
 <section>以下コンテンツ</section>

index.tplに書き込んでみましたが、_base.tplや_header.tplが先に読まれるので
title やtags が Undefined になってしまいます。

extends で先にテンプレートと記事を読み込んで、
ブロックで出力する方法を考えています。

基本設計に反するんで複雑になってしまいそうですね・・・

@gracix
Copy link
Author

gracix commented Jan 24, 2014

{block}を試してみました。
そうすると

記事の中で_base.tplをextendsしたい
_base.tplでは処理前に$_content_tplが必要

と循環参照になってしまい、出力が止まりました :p

やはりtitleやヘッダのmeta内容などは記事を前処理して
テンプレートに渡す必要がありそうです。

現状は vars.yml に書くしかないという感じです。(当たり前か)

@cw-masaki
Copy link

あー、なるほど。

あまり綺麗なやり方ではないですが、 _base.tpl は純粋に

{include file=$_content_tpl}

だけにしてもらって、

index.tpl 側で

{assign var="title" value="Some title"}
{include file="_header.tpl"}
<h1>{$title}</h1>
{include file="_footer.tpl"}

とすれば一応できるかと思います。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants