コンテンツデータを自由に並び替える方法

コンテンツを自由に並び替えたい。

例えばトップページ用バナーなど、コンテンツを自由に並び替えをしたいご要望を実現する場合、

MT6の基本機能では、専用ブログを作成し、公開日で調整をしたり、テキストエリアにIDを入力するなど、分かりにくい方法を行う必要がありましたが、

MT7のコンテンツデータではコンテンツタイプフィールドが追加になり、指定のコンテンツデータから任意に選択、並び替えられるようになりました。

ようやく、MT長年の夢が実現しましたので、この並び替え機能を使いやすくするサンプルテンプレートをご紹介します。

ただし、Movable Type Pro r.4208ではバグが存在するため動作しません。

2019年1月リリース予定のバージョンを待つか、ベータ版 Movable Type r.4501をご利用ください。

https://www.movabletype.jp/beta/index.html

準備

並び替え用のコンテンツデータを作成し、各テンプレートで読み込めるテンプレートを作成します。

コンテンツデータ「グループ」の作成

以下の構成でフィールドを追加します。

・テキスト:グループ名

・コンテンツタイプ:バナーグループ

バナーグループの指定コンテンツタイプはバナー(後述)を設定します。

PowerCMSの「グループ機能」と同じく、コンテンツを自由に並び替えられる特性のため、名前をグループにしていますが、ややこしい場合は任意に変更してください。

コンテンツデータ「バナー」の作成

以下の構成でフィールドを追加します。

・画像:バナー画像

・URL:URL

サンプルテンプレート

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>

どんどん便利になりますね!