カテゴリセットのカテゴリ情報をコンテンツデータで拡張する方法

カテゴリに情報を持たせたい。

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を検索条件にするのも良いと思います。

用途に合わせて対応しましょう!