MovableType
カテゴリセットのカテゴリ情報をコンテンツデータで拡張する方法
カテゴリに情報を持たせたい。
MT6ではカテゴリにカスタムフィールドが追加できたため、カテゴリごとにキャッチフレーズやカテゴリ用の画像を追加することできましたが、
MT7ではカテゴリセットのカテゴリに、任意のフィールドを追加することができません。
この要件を実現するサンプルテンプレートをご紹介します。
サンプルテンプレート
カテゴリ用のコンテンツデータを作成し、カテゴリから参照させるテンプレートを作成します。
コンテンツデータ「エリア」を作成し、以下の構成でフィールドを追加します。
・テキスト:カテゴリ名
・テキスト:キャッチフレーズ
・テキスト:説明文
・テキスト:キーワード
・アセット:画像
コンテンツデータ「エリア」の情報を、ハッシュ「エリアカテゴリ」に登録します。
MTSitesタグには他テンプレートからも参照できるように「ignore_archive_context="1"」を設定し、
「ユニークID」にはコンテンツデータに作成したカテゴリ名のユニークIDを設定してください。
このテンプレートはサイト共通のテンプレートに追記すると便利です。
<mt:SetVarTemplate name="エリア">
<mt:Sites site_ids="1" ignore_archive_context="1" limit="1">
<mt:Contents content_type="エリア" field:ユニークID="$area" limit="1">
<mt:SetVar name="undef(エリアカテゴリ)">
<mt:SetHashVar name="エリアカテゴリ">
<mt:SetVarBlock name="キャッチフレーズ">
<mt:ContentField content_field="キャッチフレーズ"><mt:ContentFieldValue></mt:ContentField>
</mt:SetVarBlock>
<mt:SetVarBlock name="説明文">
<mt:ContentField content_field="説明文"><mt:ContentFieldValue></mt:ContentField>
</mt:SetVarBlock>
<mt:SetVarBlock name="キーワード">
<mt:ContentField content_field="キーワード"><mt:ContentFieldValue></mt:ContentField>
</mt:SetVarBlock>
<mt:SetVarBlock name="画像">
<mt:ContentField content_field="画像"><mt:AssetURL></mt:ContentField>
</mt:SetVarBlock>
</mt:SetHashVar>
</mt:Contents>
</mt:Sites>
</mt:SetVarTemplate>
カテゴリ別テンプレートや、MTCategoriesタグ内部で、以下の様に使用します。
ハッシュにする意味は、特にありませんが、別のコンテンツデータから読み込まれている雰囲気が可読性につながると思います。
好みなので、もちろんMTSetVarタグでも良いです。
<mt:CategoryLabel setvar="CategoryLabel">
<mt:Var name="エリア" area="$CategoryLabel">
<mt:if name="エリアカテゴリ{キャッチフレーズ}">
<h2><mt:Var name="エリアカテゴリ{キャッチフレーズ}"></h2>
<p><mt:Var name="エリアカテゴリ{説明文}"></p>
<p><mt:Var name="エリアカテゴリ{キーワード}"></p>
<img src="<mt:Var name="エリアカテゴリ{画像}">">
</mt:if>
サンプルではカテゴリ名で検索を行っていますが、カテゴリIDを検索条件にするのも良いと思います。
用途に合わせて対応しましょう!