「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
ページ先頭の改行を削除する
Movable Type 4では、テンプレートのモジュール化が押し進められています。
そして、組み込むモジュールを判別するために、インデックステンプレートやアーカイブテンプレートの先頭で、MTSetVarタグを使って変数を多数定義しています。
ところが、このタグがあるために、出力されたページの先頭に空の改行が入り、DOCTYPE宣言がページの先頭にならないという問題があります。
・参考
MT4のヘッダ部分(WolaWola)
Movable Type 4 の PHP 化で XML 宣言を自動的に切り替える(小粋空間)
Movable Type 4 正式リリース! インストールと雑感(亜細亜ノ蛾)
MTSetVarタグの行をすべて1行につなげて書き、さらにその後に改行せずにDOCTYPE宣言を書けば、一応はこの問題を解決することができます。
しかし、それだとテンプレートの可読性が下がります。
そこで、プラグインを使って、この問題を解決してみました。
1.ltrim修飾子
Movable Typeでは、テンプレートタグに修飾子(※注参照)を適用することで、タグの出力にさまざまなフィルターをかけることができます。
修飾子の中に、「ltrim」というものがあります。
これは、タグの出力の先頭から、ホワイトスペース(空白や改行など)を削除するものです。
たとえば、「<MTEntryBody ltrim="1">」とすると、エントリーの本文を出力する際に、先頭にあるホワイトスペースが削除されます。
このltrim修飾子を利用して、出力されたページの先頭からホワイトスペースを削除するというのが、ここで紹介する方法です。
※注
Movable Type 4の英文のドキュメントによると、従来のグローバルフィルターのことを、MT4では「global modifier」と呼ぶようです。
日本語では「修飾子」になるものと思われます。
2.ApplyModifierプラグインのインストール
ページ全体に対して修飾子を適用するために、「ApplyModifier」というプラグインを作りました(MT4専用です)。
以下からダウンロードすることができます。
プラグインの継続的な開発やサポートのために、プラグインをご利用された方は、ドネーション(寄付)を行っていただけると幸いです。
ドネーションの方法は、こちらのページをご参照ください。
また、このプラグインの他にも、いくつかのプラグインを配布しています。
配布中のプラグインは、Movable Type Plugin Directoryのページをご参照ください。
Movable Typeのプラグイン開発等のドキュメント「Movable Type Developer's Guide Volume 1」も販売しています。
ご自分でプラグインを作ってみたい方に、ぜひお勧めしたい一冊です。
詳細は特設ページをご覧ください。
このプラグインは、<MTApplyModifier>と</MTApplyModifier>で囲まれた部分をそのまま出力する働きをします。
「そのまま出力するのなら無意味なのでは?」と思われるかも知れませんが、そうではありません。
このタグでは修飾子を使うことができます。
タグで囲った範囲すべてに修飾子を適用して出力するのが、このプラグインの役割です。
メインページやアーカイブテンプレートをこのタグで囲み、「ltrim="1"」の修飾子を使えば(以下参照)、ページの先頭の改行を削除することができることになります。
<MTApplyModifier ltrim="1"> メインページやアーカイブテンプレートの内容 </MTApplyModifier>
なお、どこかで同じようなプラグインを見たことがありますが、どこで見たか失念してしまったのと、どうせならMT4用にしようということで、自分でプラグインを書きました。
また、このプラグインは、MT標準のPHPのダイナミックパブリッシングにも対応させました(実質1行でできたので(笑))。
3.MTApplyModifierプラグインの他の利用法
MTApplyModifierプラグインは、使い方次第でいろいろな応用ができます。
たとえば、「テンプレート上では可読性を上げるために改行を入れたいが、改行があるとレイアウトが崩れることがあるので、出力されるページでは改行を削除したい」ということも、よくあると思います。
このようなときには、改行を入れたくない部分全体をMTApplyModifierタグで囲み、「ltrim="1"」と「strip_linefeeds="1"」の修飾子をつけると良いです(以下参照)。
<MTApplyModifier ltrim="1" strip_linefeeds="1"> 改行を削除したい部分 </MTApplyModifier>