MTによるページ構築時にどうしてもMTタグがあった部分に無駄な空白や改行が出来てしまいます。
それを正規表現を使って無駄な空白と改行を削除します。削除というよりregex_replaceで**「何も無し」**に置き換えます。
テンプレート(ページ)全部を対象にする場合
最初と最後の行に``を入れてテンプレート全体を囲います。余計な改行と行頭のスペースがすべて削除されたページが再構築時に出力されます。当たり前ですがPHPなどでインクルードされた部分には反映されません。MTのインクルードモジュールには反映されているみたいです。
<mt:For regex_replace="/^[\ \t\r\n]+/mg","">
<!DOCTYPE html>
<html>
.
.(テンプレート内容)
.
</html>
</mt:For>
の代わりにまたは``でも使えます。
インクルードさせるモジュール内を対象にする場合
<$mt:Include module="sidebar" regex_replace="/^[\ \t\r\n]+/mg",""$>
Keywordに含まれた半角スペースを削除する例
カンマの前後にある半角スペースを削除する例
ブログを投稿する際、「キーワード」欄に,(カンマ)の前後にうっかり半角スペースを含めてしまうことがあります。そんなときに使用する例。"Movable Type, 正規表現 , 置換"→"Movable Type,正規表現,置換"というように、カンマで区切られた文字列の前後にある半角スペースだけ削除します。
<meta name="keywords" content="<$mt:EntryKeywords trim="1" regex_replace="/,\s/mg","," regex_replace="/\s,/mg",","$>">
条件を|で区切ったり、一発で置き換え方法があるかとは思いますが、今のところ分からないのでパス。
キーワード内にあるすべての半角スペースを置換える場の例。
"Movable Type, 正規 表現 , 置 換"→"MovableType,正規表現,置換"のように、全ての半角スペースを削除します。
<meta name="keywords" content="<$mt:EntryKeywords trim="1" regex_replace="/\s+/mg",""$>">
空白文字のを削除する正規表現の方法は以下のページが参考になりました。
上記の正規表現の意味について
先頭行にある半角スペース、タブ、改行のいずれかを繰り返し消すと意味になっています。それぞれの記号の意味は以下の通りです。
正規表現
意味
^
行頭
\+半角スペース
\s 半角スペース
\t
タブ
\r
キャリッジ リターン
\n
改行
[ ]
囲った部分のいずれか
/ /mg
複数行対象に繰り返し
正規表現の参考ページ
修飾子(modifier)について
/~/mgの最後にあるmとかgは修飾子(modifier)と呼ばれるものらしいです。僕もよくわかっていないのですが、よく使う//gと//mgの違いがよくわかりませんが、どうやらPerlの正規表現で使われるものらしいです。ちなみに、mは**「文字列を複数行として扱う」で、gは「グローバルなマッチング」**?を意味しているようです。以下のページが参考になります。
iの**「大文字小文字を区別しないパターンマッチング」**はどこかで役に立ちそうです。
その他参考になるページ
インクルードで読み込んだテンプレートの改行のみ削除なら
MTタグに一言追加で簡単に改行を削除
例えばファーストビューで読み込まれるのスタイルシートをインラインで表示したいときなど、テンプレートの出力から改行だけを削除する場合は以下のMTのコードを追加すれば簡単です。スタイルシートに限らず、HTMLを出力する際にも使えます。
strip_linefeeds="1"
使用例
例えばインデックステンプレートのスタイルシート(styles.css)をインライン化したいときはこんな感じです。
<style><$mt:Include identifier="stylesheet" strip_linefeeds="1"$></style>
regex_replaceと併用した例
regex_replaceを併用して更にCSSをギュッと縮めるとしたらこんな感じでできます。
- 行頭の半角スペース・改行・タブの削除
- 2つ以上の半角スペースの削除
- /~/のコメントの削除
- “, “(カンマと後ろの半角スペース)を”,"(カンマのみ)にする
- “: “(コロンと後ろの半角スペース)を”:"(コロンのみ)にする
]]> もっとスマートな書き方があるのかもしれませんが、とりあえずこれでも理想通りにできました。