Hei Blog

Movable Typeのこと、いろいろメモっとこうと思ってブログつくりました。

MT7のコンテンツタイプで選択した他のコンテンツタイプの内容を出力する方法


MT7でコンテンツタイプの中に他のコンテンツタイプのデータを選択するフィールドを作成したときのデータを出力する方法がリファレンスを見てもピンとこなかったのですが、Facebookにシックス・アパートの高山さんが投稿されていた内容を見てようやく理解できたのでメモしておきます。

リファレンスの内容はこんな感じ

コンテンツタイプの中のデータを表示するので mt:ContentFieldValue のところを見たのですが、下記のように書いてあります。
mt:ContentField ブロックの中で mt:ContentFieldValue を使ってコンテンツタイプの値を出力する場合の説明です。

コンテンツタイプ
リンクされているコンテンツデータの ID

コンテンツデータの内容を表示したい場合は、 MTContentField ブロック内で、各種コンテンツタイプのタグを利用してください。

この「コンテンツデータの内容を表示したい場合は、 MTContentField ブロック内で、各種コンテンツタイプのタグを利用してください。」の部分、これがどういうことなのかイマイチわかっていませんでした。

とりあえず mt:ContentFieldValue を出力してみた

サンプルとして、「出演者」というコンテンツタイプの中に「セッション」というコンテンツタイプを紐づけるフィールドを作成してみました。

どうやって選択したコンテンツタイプに紐づくデータを出力するのかが理解できなかったので、まずは mt:ContentField ブロックの中で mt:ContentFieldValue を出力してみました。
ソースは下記のような感じです。

<mt:ContentField content_field="セッション">
  <mt:ContentFieldValue />
</mt:ContentField>

すると、セッションのコンテンツタイプの「データ識別ラベル」に設定している「セッションタイトル」というフィールドの値が出力されました。
(さきほどのリファレンスに mt:ContentFieldValue で「リンクされているコンテンツデータの ID」が出力されるとあったのは間違いでしょうか・・・?)

なので、 mt:ContentFieldValue では「データ識別ラベル」に設定している値しか取得できず、他のデータは取得できないと思い、それをいったん変数に格納してから mt:Contents ブロックで直接指定した中でデータを表示すればよいのではないかという結論に達しました。
そのソースが下記のような形です。

<mt:ContentField content_field="セッション">
  <mt:ContentFieldValue setvar="session_name" />
  <mt:Contents content_type="セッション" field:コンテンツフィールドの名前またはコンテンツフィールドのユニークID="$session_name">
    セッションタイトル:<mt:ContentFieldValue />
    <mt:ContentField content_field="会場・開始時間">会場・開始時間:<mt:ContentFieldValue /></mt:ContentField>
    <mt:ContentField content_field="セッション概要">セッション概要:<mt:ContentFieldValue nl2br="1" /></mt:ContentField>
  </mt:Contents>
</mt:ContentField>

これで、いちおうは出力したいものは出力できました。
(実際には他のHTMLも含まれていましたが、わかりづらいので省きました)

Facebookの高山さんの投稿でピンときた

それからしばらくたって、シックス・アパートの高山さんがFacebookで

コンテンツタイプ、アセット、タグ、カテゴリなどリンクしているフィールドの内容は、mt:ContentFieldValue ではIDが表示されますが、mt:ContentField ブロックの中でそれぞれのタグが使えるのです。アセットなた mt:AssetXX とか。

と書き込みされているのを発見。
Assetとかは慣れているせいかリファレンスを見ただけでも理解できていたのですが、コンテンツタイプもそういうことか!と。

というわけでたどりついたのが下記のソースです。
わざわざ mt:Contents で直接指定しなくてもよかったんですね・・・

<mt:ContentField content_field="セッション">
  セッションタイトル:<mt:ContentFieldValue />
  <mt:ContentField content_field="会場・開始時間">会場・開始時間:<mt:ContentFieldValue /></mt:ContentField>
  <mt:ContentField content_field="セッション概要">セッション概要:<mt:ContentFieldValue nl2br="1" /></mt:ContentField>
</mt:ContentField>

さきほどの session_name とか変数に入れていた部分もいらないし、なんて面倒なことをしていたんだ!と軽く笑えました(笑)

これで前回書いた mt:ContentsField の分岐の記事と合わせると、コンテンツタイプまわりの出力はだいたいいけるかなーという気がしています。


スポンサードリンク




コメント

お名前 必須

名前を入力してください。

メールアドレス

正しいメールアドレスを入力してください。

URL

正しいURLを入力してください。

タイトル

タイトルを入力してください。

タイトルに不適切な言葉が含まれています。

コメント必須

コメントを入力してください。

コメントに不適切な言葉が含まれています

パスワード必須

パスワードを入力してください。

パスワードは半角小文字英数字で入力してください。

Cookie

RSS 2.0 Login