expexp.jp

Movable Type

【Movable Type】ブログ名からIDを取得する

開発環境で作業していて子サイト(ブログ)のBlogIDで分岐処理をしている場合、本番環境のBlogIDが違う場合は泣きを見ます。サーバー移行などの場合にもよく起こりがちです。DB側でIDを同期させてあげれば回避できますが、都度対応は面倒ですし、引き継ぎの際も後任に嫌な顔をされます。

解決策としては、親サイト内で子サイト(ブログ)のIDを変数へ入れ、各テンプレート内ではIDが入った変数を使って処理するという形。

コード

親サイトのテンプレート内にて。

<mt:Blogs site_ids="children">
  <mt:If tag="BlogName" eq="コラム">
    <$mt:BlogID setvar="blog_column_id"$>
  </mt:If>
  <mt:If tag="BlogName" eq="サービス">
    <$mt:BlogID setvar="blog_service_id"$>
  </mt:If>
  <mt:If tag="BlogName" eq="お問い合わせ">
    <$mt:BlogID setvar="blog_inquiry_id"$>
  </mt:If>
</mt:Blogs>

実際のコードはこんな感じになります。

子サイト(ブログ)をループ

<mt:Blogs site_ids="children">

MTBlogsにモディファイアをsite_idsで子サイト全部に指定。基本これだけで子サイト(ブログ)が全部ループする(はず)。

子サイト名に一致するBlogIDを変数へ代入

  <mt:If tag="BlogName" eq="コラム">
    <$mt:BlogID setvar="blog_column_id"$>
  </mt:If>

MTBlogName(MTIfのtagではMT部分を省略するよ)の値を変数に代入しています。この変数を各テンプレートで呼び出して使います。

使い方

<mt:Contents content_type="サービス・商品" site_id="$blog_service_id">
  // hogehoge
</mt:Contents>

テンプレート上で変数を使って呼び出すだけです。変数なので$を忘れずつけましょう。