コンテンツデータを自由に並び替える方法
コンテンツを自由に並び替えたい。
トップページ用バナーなど、コンテンツを自由に並び替えをしたいご要望を実現する場合、
MT6の基本機能では、専用ブログを作成して記事やウェブページの公開日を調整をしたり、テキストエリアにIDを入力するなど、分かりにくい方法を行う必要がありました。
しかしMT7のコンテンツデータでは、コンテンツタイプフィールドが追加になり、指定のコンテンツデータから任意に選択、並び替えられます。
準備
並び替え用のコンテンツデータを作成し、各テンプレートで読み込めるテンプレートを作成します。
コンテンツデータ「グループ」の作成
以下の構成でフィールドを追加します。
・テキスト:グループ名
・コンテンツタイプ:バナーグループ
バナーグループの指定コンテンツタイプはバナー(後述)を設定します。
コンテンツデータ「バナー」の作成
以下の構成でフィールドを追加します。
・画像:バナー画像
・URL:URL
サンプルテンプレート
<mt:SetVarTemplate name="グループ">
<mt:Sites site_ids="1" ignore_archive_context="1" limit="1">
<mt:Contents content_type="グループ" field:グループ名ユニークID="$group" limit="1">
<mt:SetVar name="undef(key)">
<mt:SetVar name="undef(バナーグループ)">
<mt:ContentField content_field="バナーグループ">
<mt:SetVar name="key" op="+" value="1">
<mt:ContentID setvar="value">
<mt:SetVar name="バナーグループ" key="$key" value="$value">
</mt:ContentField>
</mt:Contents>
</mt:Sites>
</mt:SetVarTemplate>
<mt:Var name="グループ" group="トップページ用バナーグループ">
<mt:if name="バナーグループ">
<mt:Loop name="バナーグループ" sort_by="key">
<mt:Contents content_type="バナー" id="$__value__">
<mt:ContentField content_field="バナー画像">
<mt:ContentField content_field="URL">
<a href="<mt:ContentFieldValue>"><img src="<mt:AssetURL>"></a>
</mt:ContentField>
</mt:ContentField>
</mt:Contents>
</mt:Loop>
</mt:if>
解説
MTSitesタグには他テンプレートからも参照できるように「ignore_archive_context="1"」を設定します。
コンテンツデータ「グループ」から、指定のグループ名のコンテンツを取得します。
コンテンツデータ「グループ」には、グループ名「トップページ用バナーグループ」を作成しておきます。
コンテンツフィールド「バナーグループ」の内容を、ハッシュ「バナーグループ」に登録します。
このテンプレートはサイト共通のテンプレートに追記すると便利です。
<mt:SetVarTemplate name="グループ">
<mt:Sites site_ids="1" ignore_archive_context="1" limit="1">
<mt:Contents content_type="グループ" field:グループ名ユニークID="$group" limit="1">
<mt:SetVar name="undef(key)">
<mt:SetVar name="undef(バナーグループ)">
<mt:ContentField content_field="バナーグループ">
<mt:SetVar name="key" op="+" value="1">
<mt:ContentID setvar="value">
<mt:SetVar name="バナーグループ" key="$key" value="$value">
</mt:ContentField>
</mt:Contents>
</mt:Sites>
</mt:SetVarTemplate>
インデックステンプレートなど指定の箇所で以下の様に使用します。
ハッシュ「バナーグループ」に登録したコンテンツIDで、コンテンツデータ「バナー」からフィールド情報を出力します。
<mt:Var name="グループ" group="トップページ用バナーグループ">
<mt:if name="バナーグループ">
<mt:Loop name="バナーグループ" sort_by="key">
<mt:Contents content_type="バナー" id="$__value__">
<mt:ContentField content_field="バナー画像">
<mt:ContentField content_field="URL">
<a href="<mt:ContentFieldValue>"><img src="<mt:AssetURL>"></a>
</mt:ContentField>
</mt:ContentField>
</mt:Contents>
</mt:Loop>
</mt:if>
応用編
例えば、ニュースなど、別のコンテンツデータを並び替える場合は、バナーと同じ要領で以下の様に修正します。
<mt:SetVarTemplate name="グループ">
<mt:Sites site_ids="1" ignore_archive_context="1" limit="1">
<mt:Contents content_type="グループ" field:グループ名ユニークID="$group" limit="1">
<mt:SetVar name="undef(key)">
<mt:SetVar name="undef(バナーグループ)">
<mt:ContentField content_field="バナーグループ">
<mt:SetVar name="key" op="+" value="1">
<mt:ContentID setvar="value">
<mt:SetVar name="バナーグループ" key="$key" value="$value">
</mt:ContentField>
<mt:SetVar name="undef(ニュースグループ)">
<mt:ContentField content_field="ニュースグループ">
<mt:SetVar name="key" op="+" value="1">
<mt:ContentID setvar="value">
<mt:SetVar name="ニュースグループ" key="$key" value="$value">
</mt:ContentField>
</mt:Contents>
</mt:Sites>
</mt:SetVarTemplate>
<mt:Var name="グループ" group="トップページ用ニュースグループ">
<mt:if name="ニュースグループ">
<mt:Loop name="ニュースグループ" sort_by="key">
<mt:Contents content_type="バナー" id="$__value__">
<mt:ContentLabel><br>
</mt:Contents>
</mt:Loop>
</mt:if>
どんどん便利になりますね!
補足
Movable Type Pro r.4208ではバグが存在するため動作しません。
2019年1月リリース予定のバージョンを待つか、ベータ版 Movable Type r.4501をご利用ください。
https://www.movabletype.jp/beta/index.html
PowerCMSは「グループ機能」でこちらが実現できます。