0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Movable Typeで特定のコンテンツタイプを判定する、条件分岐の書き方

Posted at

Movable Typeで、再構築しようとしているテンプレートが「記事」「ウェブページ」のアーカイブであるかは、 mt:IfArchiveType タグで簡単に判定することができます。
これによって、同じようなサイト内パーツをモジュール化して、複数のテンプレートで共有することができます。

MTIfArchiveType - テンプレートタグリファレンス | CMSプラットフォーム Movable Type ドキュメントサイト

<mt:IfArchiveType archive_type="Individual">
ここは、記事詳細(個別)を再構築しようとしたときに出力されます
</mt:IfArchiveType>
<mt:IfArchiveType archive_type="Page">
ここは、ウェブページを再構築しようとしたときに出力されます
</mt:IfArchiveType>
<mt:IfArchiveType archive_type="Category">
ここは、カテゴリー一覧を再構築しようとしたときに出力されます
</mt:IfArchiveType>

しかし、Movable Type7から追加された「コンテンツタイプ」は、条件分岐タグがありません。Movable Typeのタグのみを使用して判定する方法を解説します。

A. 予約変数を使う

サンプルコード

<mt:If name="archive_class" eq="contenttype-archive">
ここは、すべてのコンテンツタイプの詳細(個別)を再構築しようとしたときに出力されます
<mt:ElseIf eq="entry-archive">
ここは、記事詳細(個別)を再構築しようとしたときに出力されます
<mt:ElseIf eq="page-archive">
ここは、ウェブページを再構築しようとしたときに出力されます
<mt:ElseIf eq="category-archive">
ここは、カテゴリー一覧を再構築しようとしたときに出力されます
</mt:If>

予約変数とは

実は、各画面のテンプレートを再構築するときに、テンプレートの冒頭ではアーカイブを判定する「予約変数」が宣言されています。

アーカイブテンプレートに設定される予約変数 | CMSプラットフォーム Movable Type ドキュメントサイト

予約変数 archive_class はコンテンツタイプ詳細のときに contenttype-archive が代入されているため、これを使って mt:If タグで判定することができます。
記事とコンテンツタイプを切り分けたいときや、サイト内でコンテンツタイプをひとつしか作っていないときに有効な方法です。

B. コンテンツタイプ名から判定する

サンプルコード

<mt:If name="archive_class" eq="contenttype-archive">
    <$mt:ContentTypeName setvar="content_type_name"$>
    <mt:If name="content_type_name" eq="お知らせ">
        ここは、「お知らせ」コンテンツタイプの詳細(個別)を再構築しようとしたときに出力されます
    <mt:ElseIf eq="会員一覧">
        ここは、「会員一覧」コンテンツタイプの詳細(個別)を再構築しようとしたときに出力されます
    </mt:If>
<mt:ElseIf name="entry_archive" eq="1">
ここは、記事詳細(個別)を再構築しようとしたときに出力されます
<mt:ElseIf name="page_archive" eq="1">
ここは、ウェブページを再構築しようとしたときに出力されます
<mt:ElseIf name="category_archive" eq="1">
ここは、カテゴリー一覧を再構築しようとしたときに出力されます
</mt:If>

mt:ContentTypeName タグは現在再構築しようとしているテンプレートの「コンテンツタイプ名」を返します。
これを任意の変数に代入することで、複数のコンテンツタイプがサイト内に設定されている場合でも、確実にどのコンテンツタイプなのかを判定できます。

C. コンテンツタイプのユニークIDから判定する

サンプルコード

<mt:If name="archive_class" eq="contenttype-archive">
    <$mt:ContentTypeUniqueId setvar="content_type_id"$>
    <mt:If name="content_type_id" eq="1db38cde6c61b7686a128b89cd0718511b21eb96">
        ここは、「お知らせ」コンテンツタイプの詳細(個別)を再構築しようとしたときに出力されます
    <mt:ElseIf eq="***********************">
        ここは、「会員一覧」コンテンツタイプの詳細(個別)を再構築しようとしたときに出力されます
    </mt:If>
</mt:If>

ユニークIDとは

スクリーンショット 2025-09-15 17.40.49.jpg

「ユニークID」は、コンテンツタイプを作成したときに付与される一意の文字列です。これはコンテンツタイプ名を変更しても、サイトのエクスポートやインポートを使用しても、変わることはありません。テンプレートがやや読みにくくなりますが、長期間安定して運用したいのであれば、ユニークIDを使用した方がよいです。

補足: PHPの併用

PHPの変数とIF文を使用した方が、Movable Typeの経験が少ない人でも理解しやすくなります。また、Movable Typeのタグの判定に頼りすぎると、サイト内の記事数が多くなるにつれて、再構築に時間がかかるようになります。
セキュリティ上の理由などで禁止されていなければ、PHPの併用を検討してください。

<?php
$view = '<$mt:ContentTypeUniqueId setvar="content_type_id"$>';
?>
<?php if( $view === '1db38cde6c61b7686a128b89cd0718511b21eb96' ): ?>
ここは、「お知らせ」コンテンツタイプの詳細(個別)にアクセスしたときに出力されます
<?php elseif( $view === '="***********************">' ): ?>
ここは、「会員一覧」コンテンツタイプの詳細(個別)にアクセスしたときに出力されます
<?php endif; ?>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?