テンプレートの最近のブログ記事

プラグイン前提のテンプレートでいいのか?

現在株式会社ブレイドではMT4及びMTOSに対応した汎用的なテンプレートセットの開発を進行中でして、これを広く一般公開したいなあと考えています。

そんな時に問題になるのがプラグインの存在です。便利なプラグインは積極的に使用したいけど、そのインストールを前提としてしまうと汎用性が無くなってしまう・・・。ならば、プラグインのインストールの有無によって処理を分岐してはどうだろうか?

思い立ったらすぐ実践です。


PageButeプラグインを使いたい

今回テンプレートセットを開発するにあたり、どうしても導入したかったプラグインが株式会社スカイアークシステム様で開発されたPageButeプラグインです。このプラグインはページを静的に分割生成するという機能を提供してくれます。


MTIfNonEmptyによる判別

今回の実験のポイントは次の二つです。

  1. PageButeプラグインのインストールの有無をテンプレート内で判別する。
  2. 1.の結果によって処理を分岐する。

この二つが実現すれば、「PageButeプラグインがインストールされている環境ではPageButeの機能を利用してページ分割を行い、PageButeがインストールされていない環境ではページ分割を行わない」という処理ができそうです。

さて、条件判別をするMTタグの一つに、MTIfNonEmptyがあります。これはtagモディファイアで指定されたMTタグで取得されるデータが空かどうかを判別します。どうもこいつが使えそうな気がしますが、指定したMTタグ自体が存在しない場合はどうなるのか・・・ちょっと実験してみましょう。

PageButeプラグインではMTPageContentsというタグが使用できますので、こいつを条件判別に使います。以下のような処理を任意のテンプレートに追加します。

<MTIfNonEmpty tag="PageContents">
<p>PageButeプラグインがインストールされています。</p>
<MTElse>
<p>PageButeプラグインはインストールされていません。</p>
</MTElse>
</MTIfNonEmpty>

さあ、この処理の結果はこうなりました。↓

PageButeプラグインが無い場合
PageButeプラグインが無い場合

PageButeプラグインが有る場合
PageButeプラグインが有る場合

!上手く処理されましたヽ( ´¬`)ノ

どうやらMTIfNonEmptyでは指定されたMTタグ自体が存在しない場合でもエラーを返さないようですね。

このテクニックを使えば、テンプレートセットの設計にあまり悩まなくてもよさそうです。公開をお楽しみにしてください。

前回のエントリーの続きとして、今回はMTデフォルトテンプレートの分析を行いたいと思います。


1.機能の概要

MTアカウント等でシステムにサインイン時に、コメント入力欄のプロフィール(名前・電子メール)の入力をスキップし、入力欄を非表示にする。


2.コメント機能の処理の記述場所

概要を把握したところで、一旦プログラムについて見てみましょう。 コメント機能に関するクライアント側の処理は、ブログ作成時にルート直下に作成される mt.js というJavascriptファイルにまとめて記述されています。MTデフォルトテンプレートにおいて、このファイルはインデックステンプレート(JavaScript)として自動的に生成されるようになっています。


3.コメント投稿フォームのHTML

さて、次にコメント投稿フォームのHTMLを見てみましょう。
<form contenteditable="false" method="post" action="http://**********/*****/mt-comments.cgi" name="comments_form" id="comments-form" onsubmit="if (this.bakecookie.checked) rememberMe(this)">

      <input name="static" value="1" type="hidden" />
      <input name="entry_id" value="35" type="hidden" />
      <input name="__lang" value="ja" type="hidden" />
      <div id="comments-open-data">
            <div id="comment-form-name">
                  <label for="comment-author">名前</label>
                  <input id="comment-author" name="author" size="30" value="" />
            </div>

            <div id="comment-form-email">
                  <label for="comment-email">電子メール</label>
                  <input id="comment-email" name="email" size="30" value="" />
            </div>
            <div id="comment-form-url">
                  <label for="comment-url">URL</label>
                  <input id="comment-url" name="url" size="30" value="" />
            </div>

            <div id="comment-form-remember-me">
                  <label for="comment-bake-cookie"><input id="comment-bake-cookie" name="bakecookie" onclick="if (!this.checked) forgetMe(document.comments_form)" value="1" type="checkbox" />
                  ログイン情報を記憶</label>
            </div>
      </div>
      <div id="comments-open-text">
            <label for="comment-text">コメント (スタイル用のHTMLタグを使うことができます)</label>
            <textarea id="comment-text" name="text" rows="15" cols="50"></textarea>

      </div>
            
      <div id="comments-open-footer">
            <input accesskey="v" name="preview" id="comment-preview" value="確認" type="submit" />
            <input accesskey="s" name="post" id="comment-submit" value="投稿" type="submit" />
    
      </div>
</form>
上記のソースを分解して見てみると、次のような箇所があることが分かります。

▼名前入力欄
            <div id="comment-form-name">
                  <label for="comment-author">名前</label>
                  <input id="comment-author" name="author" size="30" value="" />
            </div>

▼電子メール入力欄
            <div id="comment-form-email">
                  <label for="comment-email">電子メール</label>
                  <input id="comment-email" name="email" size="30" value="" />
            </div>

ログインの状態に応じて、この部分の表示・非表示を切り替えることによって機能を実現しています。

4.具体的な処理

では、具体的な処理を見てみましょう。 前述の要素の表示・非表示を切り替えは、2.で解説したmt.jsの中の以下の部分で処理しています。
function hideDocumentElement(id) {
    var el = document.getElementById(id);
    if (el) el.style.display = 'none';
}

function showDocumentElement(id) {
    var el = document.getElementById(id);
    if (el) el.style.display = 'block';
}
つまり単純にid名から要素を取得し、取得した要素のstyle属性のdisplay値をnone⇔blockで切り替える、といういたってシンプルな処理になっています。 (この手法は現在のWeb2.0の潮流から見ると前時代的なものであり、このあたりの手抜き(?)加減がMTのJavascript関連の記述の古さが指摘される原因でもあります。)

という訳で話が逸れてしまいましたが、次回はこの分析を基に実際のカスタマイズ方法を解説したいと思います。
MTのコメント機能には、MTアカウント等でサインインしていればプロフィール情報の入力をスキップ(非表示に)できる機能が備わっています。

MTコメントのサインイン機能1MTコメントのサインイン機能2のサムネール画像

MTデフォルトのテンプレートを使用していればこの機能は問題無く利用できるのですが、カスタマイズした独自のテンプレートを使用している場合、設計したHTMLの構造によってはプロフィール情報入力欄がうまく非表示にならないという不具合が生じてしまうことがあります。

次回からこの問題を解決する方法を解説します。



株式会社ブレイド ホームページ制作・WEBシステム開発・SEO

このアーカイブについて

このページには、過去に書かれたブログ記事のうちテンプレートカテゴリに属しているものが含まれています。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

アーカイブ

Powered by Movable Type 4.1