Blog

ブログ

MovableTypeのウェブサイトカスタムフィールドの扱いに悩む

MovableTypeのコマーシャルパックは、ウェブサイト・ブログ・エントリー・カテゴリー・テンプレート・アイテム(ファイルアップロード)にカスタムフィールドを定義できます。
テンプレートカスタムフィールドの使い道が未だにわからないですが…

このうち、ウェブサイトカスタムフィールドは、Google Analyticsのコードとか、ホームのtitle要素とか、METAのキーワードなどを作ったりします。
定義すると、ウェブサイトの「設定」→「全般」に項目が登場します。

カスタムフィールドを参照するのがウェブサイト内だけなら、以下のように書けば入力した内容が表示されます。
フィールドを「複数行」にしていて、かつソースコードを表示したい場合はconvert_breaks(改行を変換)に「0」を指定しないと余計な改行が入ります。

<$mt:cf_hoge convert_breaks="0"$>

しかし、下層の子ブログで参照する場合はこの書き方だけではだめで、以下のように、mt:BlogParentWebsiteタグで囲む必要が出てきます。

<mt:BlogParentWebsite>
<$mt:cf_hoge convert_breaks="0"$>
</mt:BlogParentWebsite>

このブロックタグの内側は、対象が「現在のブログが属している親のサイト」になります。ウェブサイトのテンプレートで使用しても問題は起きないので、全部のテンプレートをこう書いてしまった方が無難でしょう。

ダイナミック・パブリッシングが使えない場合はどうするのか

普通はここで終了なのですが、最近迷っているのは、要件やテンプレートの複雑さなどで「ダイナミック・パブリッシング」が使えない案件の場合です。

カスタムフィールドの内容を書き換えた場合、当然ながら、手動で再構築をする必要が出てくるので、ブログ全体の再構築をしない限り更新されない年別アーカイブなどで、古い内容が残ってしまうなどの問題が起こります。

なので、そういう場合はインデックス・テンプレートで独立したHTMLファイルに書き出してしまって、PHPのincludeで読み込んだ方が確実なのかなあ…と思ったりもします。

mt:WebsitePathタグは、サーバーのフルパスを出力します。

<?php include ('<mt:BlogParentWebsite><$mt:WebsitePath$></mt:BlogParentWebsite>customfield_hoge.html'); ?>

余談:ウィジェット

ウィジェットセットに関しては、例えmt:BlogParentWebsiteタグで囲んでも、子ブログで呼び出すことはできないようです。
この場合は、初めからインデックス・テンプレートに書き出してPHPでインクルードするしかありません。

<mt:Ignore>### これはできません ###</mt:Ignore>
<mt:BlogParentWebsite>
<$mt:WidgetManager name="Sidemenu"$>
</mt:BlogParentWebsite>

あくまで私の経験に基づいた話なので、間違っていたら突っ込みお願いします(-人-)