Movable Type 5で「テンプレート「Create Entry」の再構築中にエラーが発生しました」というエラーが発生する件について
MTQの「コミュニティ掲示板 初期作成でテンプレートエラーになる」で、タイトルの再構築エラーの件が話題になったので、情報展開します。
1.問題点
コミュニティブログまたはコミュニティ掲示板の再構築で次のようなエラーが発生する。
テンプレート「Create Entry」の再構築中にエラーが発生しました: <mtInclude>タグでエラーがありました: 「Header」というモジュールテンプレートが見つかりませんでした。
2.原因
MTのインストール時に選択した使用言語と、新たに作成するコミュニティブログまたはコミュニティ掲示板の「使用言語」の選択が異なっているため。
「使用言語」の選択(一番下の項目)
この事象は、上の画像のように、インストール時の使用言語が「日本語」で、ブログ作成時の言語が「English」、あるいはインストール時の使用言語が「English」で、ブログ作成時の言語が日本語の場合などに発生します。
3.対処1
コミュニティブログまたはコミュニティ掲示板作成時、誤った言語選択を行っていた場合は、作成したブログを削除し、「使用言語」をインストール時の言語に合わせてブログを再作成してください。次項の「対処2」を行う必要はありません。
4.対処2
MTインストール時の選択言語(日本語)と、新たに作成したコミュニティブログまたはコミュニティ掲示板の言語を異なるものにする必要がある場合、次に示す、ブログの各テンプレートの修正を行えば、再構築エラーを解消することができます。
ここでは、インストール時の言語が「日本語」で、新たに作成するコミュニティブログまたはコミュニティ掲示板の使用言語に「English」を選択した場合の対処方法を説明します。
「Create Entry」インデックステンプレート
対処前
…前略…
<$mt:Include module="Header"$>
…中略…
<$mt:Include module="Footer"$>
…後略…
対処後
…前略…
<$mt:Include module="ヘッダー"$>
…中略…
<$mt:Include module="フッター"$>
…後略…
「Archive Index」インデックステンプレート
対処前
…前略…
<$mt:Include module="Header" body_class="mt-archive-index"$>
…中略…
<$mt:Include module="Footer"$>
対処後
…前略…
<$mt:Include module="ヘッダー" body_class="mt-archive-index"$>
…中略…
<$mt:Include module="フッター"$>
「Main Index」インデックステンプレート
対処前
…前略…
<$mt:Include module="Header" body_class="mt-main-index"$>
…中略…
<$mt:Include module="Footer"$>
対処後
…前略…
<$mt:Include module="ヘッダー" body_class="mt-main-index"$>
…中略…
<$mt:Include module="フッター"$>
「Sidebar」テンプレートモジュール
テンプレート名を「サイドバー」に変更
「Entry Form」テンプレートモジュール
対処前
…前略…
<form method="post" action="<$mt:CGIPath$><$mt:CommunityScript$>" name="entry_form" id="create-entry-form" enctype="multipart/form-data">
<input type="hidden" name="__mode" value="post" />
<input type="hidden" name="blog_id" value="<$mt:BlogID$>" />
<input type="hidden" id="magic_token" name="magic_token" value="" />
<mt:SetVarBlock name="field-content"><input id="entry-title" class="ti" name="title" /></mt:SetVarBlock>
<$mt:Include module="Form Field" id="entry-title" class="" label="Title"$>
<mt:SetVarBlock name="field-content"><textarea id="entry-body" class="ta" name="text" rows="15" cols="50"></textarea></mt:SetVarBlock>
<$mt:Include module="Form Field" id="entry-body" class="" label="Body"$>
<mt:If tag="BlogCategoryCount">
<mt:SetVarBlock name="field-content">
<select id="entry-category" name="category">
<option value="0">Select Category...</option>
<mt:TopLevelCategories>
<mt:SetVarBlock name="loop_to"><$mt:Var name="__depth__" _default="0"$></mt:SetVarBlock><mt:SetVarBlock name="spacer"><mt:For start="1" end="$loop_to"> </mt:For></mt:SetVarBlock><option value="<$mt:CategoryID$>"><$mt:Var name="spacer"$><$mt:CategoryLabel$></option>
<$mt:SubCatsRecurse$>
</mt:TopLevelCategories>
</select>
</mt:SetVarBlock>
<$mt:Include module="Form Field" id="entry-category" class="" label="Category"$>
</mt:If>
<mt:EntryCustomFields>
<mt:SetVarBlock name="custom_field_name"><$mt:CustomFieldName escape="html"$></mt:SetVarBlock>
<mt:SetVarBlock name="field-content"><$mt:CustomFieldHTML$></mt:SetVarBlock>
<mt:SetVarBlock name="custom_field_id">profile_<$mt:CustomFieldName dirify="1" escape="html"$></mt:SetVarBlock>
<mt:SetVarBlock name="required"><mt:CustomFieldIsRequired>1<mt:else>0</mt:CustomFieldIsRequired></mt:SetVarBlock>
<$mt:Include module="Form Field" id="$custom_field_id" class="" label="$custom_field_name" required="$required"$>
</mt:EntryCustomFields>
<input type="submit" accesskey="s" name="post" id="entry-submit" value="Submit" />
</form>
…後略…
対処後(4ヶ所修正)
…前略…
<form method="post" action="<$mt:CGIPath$><$mt:CommunityScript$>" name="entry_form" id="create-entry-form" enctype="multipart/form-data">
<input type="hidden" name="__mode" value="post" />
<input type="hidden" name="blog_id" value="<$mt:BlogID$>" />
<input type="hidden" id="magic_token" name="magic_token" value="" />
<mt:SetVarBlock name="field-content"><input id="entry-title" class="ti" name="title" /></mt:SetVarBlock>
<$mt:Include module="フォームフィールド" id="entry-title" class="" label="Title"$>
<mt:SetVarBlock name="field-content"><textarea id="entry-body" class="ta" name="text" rows="15" cols="50"></textarea></mt:SetVarBlock>
<$mt:Include module="フォームフィールド" id="entry-body" class="" label="Body"$>
<mt:If tag="BlogCategoryCount">
<mt:SetVarBlock name="field-content">
<select id="entry-category" name="category">
<option value="0">Select Category...</option>
<mt:TopLevelCategories>
<mt:SetVarBlock name="loop_to"><$mt:Var name="__depth__" _default="0"$></mt:SetVarBlock><mt:SetVarBlock name="spacer"><mt:For start="1" end="$loop_to"> </mt:For></mt:SetVarBlock><option value="<$mt:CategoryID$>"><$mt:Var name="spacer"$><$mt:CategoryLabel$></option>
<$mt:SubCatsRecurse$>
</mt:TopLevelCategories>
</select>
</mt:SetVarBlock>
<$mt:Include module="フォームフィールド" id="entry-category" class="" label="Category"$>
</mt:If>
<mt:EntryCustomFields>
<mt:SetVarBlock name="custom_field_name"><$mt:CustomFieldName escape="html"$></mt:SetVarBlock>
<mt:SetVarBlock name="field-content"><$mt:CustomFieldHTML$></mt:SetVarBlock>
<mt:SetVarBlock name="custom_field_id">profile_<$mt:CustomFieldName dirify="1" escape="html"$></mt:SetVarBlock>
<mt:SetVarBlock name="required"><mt:CustomFieldIsRequired>1<mt:else>0</mt:CustomFieldIsRequired></mt:SetVarBlock>
<$mt:Include module="フォームフィールド" id="$custom_field_id" class="" label="$custom_field_name" required="$required"$>
</mt:EntryCustomFields>
<input type="submit" accesskey="s" name="post" id="entry-submit" value="Submit" />
</form>
…後略…
5.修正内容の解説
コミュニティブログまたはコミュニティ掲示板で使われているテンプレートから、グローバルテンプレートを呼び出しています。グローバルテンプレートのテンプレート名はインストール時の言語に依存します。日本語でインストールすれば日本語で表示されます。
以下はグローバルテンプレートの一覧画面です。
グローバルテンプレートを呼び出すには、MTIncludeタグを利用します。「ヘッダー」テンプレートモジュールを呼び出すには次のようにします。
<$mt:Include module="ヘッダー"$>
ところが、コミュニティブログまたはコミュニティ掲示板のテンプレートに含まれる、MTIncludeタグのmoduleモディファイアの値は、ブログ作成時に選択した言語に依存します。
「English」を選択した場合、ヘッダーテンプレート呼び出しのMTIncludeタグは、次のようになります。
<$mt:Include module="Header"$>
これはコミュニティブログまたはコミュニティ掲示板に限ったことではありませんが、この2つのテーマはグローバルテンプレートを呼び出すところが、クラシックブログなどの、他のテーマと異なっています。クラシックブログであれば、テンプレートモジュールの呼び出しが自テーマ内に閉じているので、言語選択は影響しません。
そして、このようなアンマッチな状態で再構築を行うと、「Header」というテンプレートモジュールは存在しないため、冒頭のような再構築エラーが発生します。
エラーを解消するには、MTIncludeタグで呼び出すテンプレートモジュールの名称と、呼び出されるテンプレートモジュール名を対応させます。
なお、ブログ作成画面の言語選択のプルダウンメニューに次のような説明がありますが、このエントリーで示す修正が必要であることを指しています。
グローバルなDefaultLanguage設定と異なる言語を選んだ場合、グローバルテンプレートの名称が異なるため、テンプレート内で読み込むモジュール名の変更が必要な場合があります。
- MovableTypeプラグインの独自CGIをNginxに対応させる方法
- Movable Type 5で「Got an error: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?)」というエラーになる場合の対処
- 旧バージョンのMTでPerl5.26(Perl5.24以降)に対応する方法
- MT6.2のファイルアップロードで「Undefined subroutine &POSIX::strftime」になる問題の対処
- Movable Typeのファイルアップロードで「アップロードしたファイルは大きすぎます。」というエラーになる場合の対処
- Movable Typeのパスワード変更で「URLが不正です。」というエラーなる件についての対処
- Movable Typeで「Cannot find column 'blogs' for class 'MT::Blog'」となる場合の対処
- Movable TypeでMTPageNextタグが効かなくなる不具合について
- Movable Typeの復元で「Request-URI Too Large」になるときの対処
- サーバ故障と「Connection error: Too many connections」エラーおよびMySQLテーブル破損について
- Movable Typeでエラー発生箇所を特定する方法
- IE9でMovable Typeを利用する方法
- MTIfタグにtagモディファイアを利用する場合の注意事項
- Movable Type 5のブログの設定で「Can't call method &quot;label&quot; on unblessed reference」が発生する問題について
- Movable Type 5.03へのアップグレードで再構築時に「Script Error」が発生する件について(つづき)