Skip to content

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

Open

Description

@gracix

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

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

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


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

---
記事本文

という構造になります。

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

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

Activity

  1. kb-masaki commented on Jan 24, 2014

    @kb-masaki

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

    includes: [ posts.yml ]

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

  2. gracix commented on Jan 24, 2014

    @gracix
    Author

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

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

    たとえばプラグインで

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

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

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

  3. kb-masaki commented on Jan 24, 2014

    @kb-masaki

    あー、テンプレートファイルの中に変数をセットしたいみたいなイメージでしょうか?
    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は素直に配列アサインできなくてトリッキーなコードになってますが。。。

  4. gracix commented on Jan 24, 2014

    @gracix
    Author

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

    テンプレートではなくて記事ファイルです。
    たとえば 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 で先にテンプレートと記事を読み込んで、
    ブロックで出力する方法を考えています。

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

  5. gracix commented on Jan 24, 2014

    @gracix
    Author

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

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

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

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

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

  6. kb-masaki commented on Jan 24, 2014

    @kb-masaki

    あー、なるほど。

    あまり綺麗なやり方ではないですが、 _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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions