カスタムフィールドの基本的な使い方(後編)
カスタムフィールドの情報を表示する
カスタムフィールドの情報を表示するには、フィールドモジュールを使う方法と、各ビルトインモジュールを使う方法があります。
フィールドモジュールを使う方法
フィールドモジュールの中にカスタムフィールドの変数を記述すると内容を出力することができます。
ブログのカスタムフィールドを表示する(Blog_Field)
URLが http://www.example.com/blogName/ のときにblogNameブログのカスタムフィールドを表示することができます。
<!-- BEGIN_MODULE Blog_Field --> {blogField} <!-- END_MODULE Blog_Field -->
カテゴリーのカスタムフィールドを表示する(Category_Field)
URLが http://www.example.com/blogName/categoryName/ のときにcategoryNameカテゴリーのカスタムフィールドを表示することができます。
<!-- BEGIN_MODULE Category_Field --> {categoryField} <!-- END_MODULE Category_Field -->
エントリーのカスタムフィールドを表示する(Entry_Field)
URLが http://www.example.com/blogName/categoryName/entryName.html のときにentryName.htmlエントリーのカスタムフィールドを表示することができます。
<!-- BEGIN_MODULE Category_Field --> {entryField} <!-- END_MODULE Category_Field -->
ユーザーのカスタムフィールドを表示する(User_Field)
URLが http://www.example.com/blogName/uid/3/ のときにユーザーID3のカスタムフィールドを表示することができます。
<!-- BEGIN_MODULE User_Field --> {userField} <!-- END_MODULE User_Field -->
ビルトインモジュールの中で表示する方法
今回のチュートリアルでは前回用意したエントリーのカスタムフィールドを元に、Entry_Headlineを利用して、表示させる方法を紹介します。
ビルトインモジュールとカスタムフィールド
一部のビルトインモジュールでは、フィールドモジュールを使わなくてもカスタムフィールドの情報を利用することができます。
リファレンス:ビルトインモジュールの変数表を参照すると、左図のような記述を含むモジュールがいくつかあります。これは、そのループ内でカスタムフィールドを利用できるという表記です。
左図の例では、entry:loop内でエントリーのカスタムフィールドを出力できるという意味になります。
- Entry_List
- Entry_Headline
- Entry_Photo
- Entry_Summary
- Entry_Body
- Entry_ArchiveList
- Entry_TagRelational
- Entry_Calendar
- Category_EntrySummary
- Category_EntryList
以上のモジュールは、entry:loop内でエントリーのカスタムフィールドを出力できます。また、Category_EntryListについてはcategory:loop内でカテゴリーのカスタムフィールドを出力することもできます。
色々な出力方法
カスタムフィールドの出力には、色々な方法があります。まずは単純な出力をしてみましょう。前回のチュートリアルでは、「今聴いている音楽」というカスタムフィールドをlisteningという名前で登録しました。
<!-- BEGIN_MODULE Entry_Headline --><ul><!-- BEGIN entry:loop --> <li><span>{date#y}.{date#m}.{date#d} | {listening}の日</span> : <a href="{url}">{title}</a> <!-- BEGIN category:veil --> 【{categoryName}】<!-- END category:veil --></li><!-- END entry:loop --> </ul><!-- END_MODULE Entry_Headline -->
{listeining}という記述で、カスタムフィールドの情報を出そうとしています。カスタムフィールドの名前を { } (波括弧) で囲って記述することで、その情報を出すことができます。
■ touchブロックで出力内容を後から編集可能にする
<p> <!-- BEGIN flag:touch#possible -->可能です<!-- END flag:touch#possible --> <!-- BEGIN flag:touch#impossible -->不可能です<!-- END flag:touch#impossible --> </p>
上記の例では、flagというカスタムフィールドの情報がpossibleまたはimpossibleであった場合で出力内容を切り替えています。カスタムフィールドの情報をそのまま表示してしまうと、このような定型的な出力が必要なときに、後からの修正が行えなくなってしまいます。
そこで、このようなtouchブロックを使った記述をすることで、そのカスタムフィールドの情報によって出力される情報を後から修正することができます。
■ veilブロックで無駄な出力を抑制する
<!-- leadtext という名前でエントリーの説明文のカスタムフィールドがあります --> <ul><!-- BEGIN entry:loop --> <li>{title}<span>{leadtext}</span></li> <!-- END entry:loop --></ul> <!-- もしも leadtext に入力が無いエントリーが存在するとこのようになります --> <ul> <li>タイトル<span>説明文です</span></li> <li>たいとる<span></span></li> <li>TITLE<span>LEADTEXT</span></li> </ul>
出力結果の2つ目のli要素に、空のspanが出力されてしまっています。このように、場合によっては無駄なタグが出力されてしまうというときは表示されないこともある部分を囲うように記述を加えます。
<!-- leadtext という名前でエントリーの説明文のカスタムフィールドがあります --> <ul><!-- BEGIN entry:loop --> <li>{title}<!-- BEGIN leadtext:veil --><span>{leadtext}</span><!-- END leadtext:veil --></li> <!-- END entry:loop --></ul>
{leadtext}を囲うようにveilブロックを追加しました。このようなブロックで囲うことで、その中の情報が空のときには、ブロックの中が丸ごと無視されます。そうすることで、付随するタグなどが無駄に出力されることがなくなります。