PowerCMS™
2025年1月1日購入分よりライセンスの価格を改定いたします。
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[よくあるご質問] システムログに「タスクを実行するために必要なロックを獲得できませんでした」というログが残っている を追加しました。
[よくあるご質問] 特定のシステムログに絞って確認できますか? を追加しました。

PowerCMS ブログ

ホーム > PowerCMS ブログ > PowerCMS 2 > Power CMS for MT ver.2 - DynamicMTMLでPC/携帯/iPhoneに…

2010年04月02日

Power CMS for MT ver.2 - DynamicMTMLでPC/携帯/iPhoneに対応させる

Power CMS for MT ver.2(MT5対応版)はまもなくリリースの予定です。

4月19日(月)、シックス・アパート株式会社/アルファサード有限会社共催の「次世代ウェブサイトマネジメントプラットフォーム「Power CMS for MT ver.2」体感 セミナー」でその全貌をご紹介します。

同一のURLでPC/携帯/iPhone対応のページを出力する

先日公開したDynamicMTMLプラグインですが、本日アップデートしました。アップデート内容は下記の通りです。

  • DoCoMo端末からのアクセス時にContent-Type: application/xhtml+xml を返すように
  • MT管理画面からのプレビュー時にSmartyのキャッシュが生成されないように(これらの修正についてはmtview.phpのテンプレートを削除して再インストールして適用ください)
  • MTSearchEntriesの修正(entryのロード時にblogをセットしていなかった点の修正)、target指定なしの時 entry_title||entry_text_more||entry_keywords||entry_excerpt||entry_text を対象に検索をかけるように
  • ブロックタグ MTifiPhone, MTifKeitai の追加
  • ファンクションタグ MTRawMTMLTag の追加

さて、標題の通り今回のアップデートには携帯サイト作成時に便利な機能が含まれます。今日は同一URLでPC/携帯/iPhoneにそれぞれに対応させた出力をさせるテンプレート作りのヒントを簡単にご紹介します。

MTRawMTMLタグと新しいブロックタグでCSSを切り替える

先日の例ではエントリーの本文にMTMLを記述したりファイルの中に直接MTMLを記述する方法をご紹介しましたが、ここでの例はMTのテンプレートに記述する形となります。MTタグをテンプレートに記述すると(当然)再構築時にテンプレートは処理されて処理結果がファイルに書き出されますが、これでは動的にMTタグを処理することができません。そこで、部分的に動的に処理させたい箇所をブロックタグMTRawMTMLで囲みます。

<MTRawMTML>
<MTifKeitai>
        <link href="/common/css/keitai.css" rel="stylesheet" type="text/css" />
    <MTElse>
    <MTifiPhone>
        <link href="/common/css/iphone.css" rel="stylesheet" type="text/css" />
    <MTElse>
        <link href="/common/css/pc.css" rel="stylesheet" type="text/css" />
    </MTElse>
    </MTifiPhone>
    </MTElse>
</MTifKeitai>
</MTRawMTML>

MTRawMTMLタグ内に記述されたMTMLは再構築時には処理されずにそのままこの中身がファイルに出力されます。出力されたMTタグはアクセス時に mtview.php によって動的に処理されブラウザに返されます(ユーザーエージェント情報によって処理を変えるため、ダイナミックパブリッシング設定の「ビルド結果をキャッシュする」をオフにしておいてください)。

テンプレートをまるごとMTRawMTMLタグで囲むことも出来ますが「部分的に動的」のメリットを活かすためには最低限の分岐部分のみをMTMLで出力することをお勧めします。

MTRawMTMLTagタグ

MTRawMTMLタグで囲んだ部分はMTMLがそのまま出力されますが、ブロックタグを利用する際に、開始タグと終了タグ、分岐(MTElse等)だけを動的に出力したい場合、例えば下記のような例はエラーとなります。

<MTRawMTML><MTifKeitai></MTRawMTML>
    --携帯用の出力内容
<MTRawMTML></MTifKeitai></MTRawMTML>

これは、MTRawMTML、MTifKeitaiが共にブロックタグとなるため「MTifKeitaiに対応した /MTifKeitai がない」とみなされてしまうからです。

そこで、このようなケースで利用できるファンクションタグ MTRawMTMLTag を用意しました。

<MTRawMTMLTag tag="MTifKeitai">
    --携帯用の出力内容
<MTRawMTMLTag tag="/MTifKeitai">

この記述はエラーになりません。出力結果は下記のようになります。

<MTRawMTMLTag tag="MTifKeitai">
    --携帯用の出力内容
<MTRawMTMLTag tag="/MTifKeitai">

モディファイアを指定したい場合、MTRawMTMLTagタグのparamsモディファイアに指定します。

<MTRawMTML><MTQuery key="query" setvar="query"></MTRawMTML>
<MTRawMTMLTag tag="MTIf" params='name="query" eq="foo"'>
    -- ?query=foo 付きリクエストの場合に出力
<MTRawMTMLTag tag="/MTIf">

このテンプレートは出力されると以下のようになります。

<MTQuery key="query" setvar="query">
<MTIf name="query" eq="foo">
    -- bar.html?query=foo 付きリクエストの場合に出力
</MTIf>

携帯ページで「本文」と「続き」を擬似的に別ページに分割する

これらのタグを利用して、携帯からのアクセス時に「本文」「続き」を別のページに(擬似的に)分けて表示するテンプレートを書いてみます。

<MTRawMTML>
<MTIfKeitai>
<mt:query key="more" setvar="more">
<mt:if name="more" eq="1">
    <MTEntryMore filters="__default__">
    <p><a href="<MTEntryPermalink>">[戻る]</a></p>
<mt:else>
    <MTEntryBody filters="__default__">
    <p><a href="<MTEntryPermalink>?more=1">[続き]</a></p>
</mt:else>
</mt:if>
<MTElse>
<MTifiPhone>
    --iPhone用のテンプレート
<MTElse>
    --PC用のテンプレート
</MTElse>
</MTifiPhone>
</MTElse>
</MTIfKeitai></MTRawMTML>

URLに ?more=1 がついているかどうかによって表示を切り替えています。簡単な例ですが同一URLでPC/iPhone/携帯対応のページを出力するページがDynamicMTMLによって作成できることがお分かりいただけたかと思います。

プラグインのダウンロード

*1 Movable Type個人無償版をご利用の方は無償でご利用いただけます。
*2 GNU 一般公衆利用許諾契約書


カテゴリー
DynamicMTML
PowerCMS 2
イベント・セミナー情報
テンプレート作成Tips
プラグイン
技術情報

Recent Entries