「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
「改行を変換する」を改良するプラグイン
Movable Typeでは、エントリーの本文/追記の中の改行を自動的に変換する機能があります。変換は以下のように行われます。
- 1.本文/追記の文章を空行ごとに区切る
- 2.区切ったそれぞれの部分に、ブロック要素(divやtableなど)が含まれる場合は、その部分をそのまま出力する
- 3.2.以外の部分では、改行をbrタグに置換し、また部分の前後をpタグで囲む
普通に文章を入力するだけなら、これでほぼ問題ありません。
しかし、以下のようなときに問題があります。
- blockquote要素では、内部の改行が自動変換されないので、手動でbrタグを入れる必要がある
- 要素の中に空行があるとそこで区切られてしまい、思わぬ変換をされてしまう
そこで、より便利な改行変換を行うプラグインを作りました。
1.プラグインのダウンロードとインストール
プラグインは以下からダウンロードすることができます。
プラグインの継続的な開発やサポートのために、プラグインをご利用された方は、ドネーション(寄付)を行っていただけると幸いです。
ドネーションの方法は、こちらのページをご参照ください。
また、このプラグインの他にも、いくつかのプラグインを配布しています。
配布中のプラグインは、Movable Type Plugin Directoryのページをご参照ください。
Movable Typeのプラグイン開発等のドキュメント「Movable Type Developer's Guide Volume 1」も販売しています。
ご自分でプラグインを作ってみたい方に、ぜひお勧めしたい一冊です。
詳細は特設ページをご覧ください。
リンクをクリックしてファイルをダウンロードし、「ModTextFilter.pl」という名前をつけて保存してください。
そして、そのファイルをMovable Typeの「plugins」ディレクトリにアップロードしてください。
2.プラグインのフィルターを使う
このプラグインをインストールすると、エントリーの編集画面の「テキストフォーマット」の欄に「改良テキストフィルター」という選択肢が追加されます。
それを選んでエントリーを保存すると、このプラグインを使って、エントリーの本文と追記を変換するようになります。
3.フィルターの動作
このフィルターは、以下のように動作します。
(a)HTMLエンティティへの変換
文章の中に<enchtml>~</enchtml>で囲まれる部分がある場合は、その部分をHTMLエンコードします(「<」を「<」に変換するなど)。
また、「<enchtml>」と「</enchtml>」自体はHTMLファイルには出力されません。
エントリーでHTMLのソースを公開したいときに、この機能を使うと便利です。
(b)改行をそのまま残す要素
以下の要素では、内部の改行はそのまま出力されるようになります。
pre textarea table ol dl ul menu dir
なお、要素の中に空行があっても、そこでは要素は分割されません。
(c)改行をbrタグに変換する要素
以下の要素では、内部の改行はbrタグに変換されます
blockquote div p h1 h2 h3 h4 h5 h6 form address
ただし、開始タグ直後の改行と、終了タグ直前の改行は、brタグに変換せず、そのまま出力します。
なお、要素の中に空行があっても、そこでは要素は分割されません。
(d)その他の部分
上記以外の部分は、空行ごとに分割され、内部の改行はbrタグに変換されます。
そして、部分の前後はpタグで囲まれます。
(e)要素の入れ子
(b)および(c)は、要素が入れ子になっているときは正しく動作しません。
例えば、div要素の中にpre要素を入れると、pre要素の部分でも改行がbrタグに置換されます。
また、div要素を入れ子にした場合、外側の<div>タグから内側の</div>タグまでが処理の対象になり、正しい変換になりません。
このような場合は、「<noconv>~</noconv>」および「<convbr>~</convbr>」という書き方を使って、改行の変換方法を部分的に明示することができます。
「<noconv>」と「</noconv>」で囲んだ部分は、改行がそのまま出力されます。また、「<noconv>」と「</noconv>」自体はHTMLファイルには出力されません。
一方、「<convbr>」と「</convbr>」で囲んだ部分は、改行がそのまま出力されます(ただし、<convbr>の直後と</convbr>の直前の改行は除く)。
また、「<noconv>」と「</noconv>」自体はHTMLファイルには出力されません。
例えば、エントリーに以下のように入力したとします。
<noconv> <div> <div class="float_left"> </noconv> <convbr> left1 left2 </convbr> <noconv> </div> <div id="float_right"> </noconv> <convbr> right1 right2 </convbr> <noconv> </div> <div style="clear : both;"></div> </div> </noconv>
これは以下のように変換されます。
<div> <div class="float_left"> left1<br /> left2 </div> <div id="float_right"> right1<br /> right2 </div> <div style="clear : both;"></div> </div>
4.MT3.2/3.3への対応
このプラグインは、Movable Type 3.17/3.2/3.3で動作を確認しています。
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください
とーこ
こんにちは。
希望していた変換ができそうです。
早速利用させていただきます。
ありがとうございました。
やむ
壱さん、こんばんわ。
またまたお世話になっております。
ワタシには少々難しいので、意味がわかってないところがあるんですが、今まではテキストエリアの中に空行を入れるとpタグが入ってしまっていたんです。
それがこのプラグインのおかげで出なくなりました。
ありがとうございました。
さえら
こんにちは。
これ、いいですね。利用させていただきます。
いつもありがとうございます。
conduc
こんにちわ。
このプラグインを使わせていただいてます。ありがとうございます。
投稿記事画面で
<textarea>
テスト
テスト2
</textarea>
のように書いているのですが、
出力は
テストテスト2
のように改行されず困ってます。
lib/MT/Util.pmもデフォルトのままです。
どのようにしたら内部の改行がそのまま出力されるようになるのでしょうか?
<noconv>タグも<convbr>タグも試してみましたが、駄目でした。
他の方はうまくいっているようですし、私の所だけかもしれませんが、どうかご教授下さい。
よろしくお願いします。
壱
>conducさん
こんにちは。
そちらのBlogのソースを拝見しましたが、エントリー内の改行がすべて削除されています。
MTEntryBodyタグに、改行を削除するようなグローバルフィルターをつけていらっしゃるということはないでしょうか。
テキストフィルタのプラグインは、グローバルフィルターより先に動作します。
グローバルフィルターが改行を削除してしまうと、textareaタグ内の改行も削除されてしまいます。
もし、上記のようなことをなさっていないとすると、原因は不明です。
conduc
こんばんわ。
確かにMTEntryBodyタグにM's folderさん作成のMT ルビ付きテキスト作成支援フィルタを付けておりました。
これを外しましたところ、改良テキストフィルターが正常に作動しました。ありがとうございます。
ただ、このルビ付きテキスト作成支援フィルタも重宝してまして、どうにか併用できないものかと思っているのですが、無理でしょうか?
壱
>conducさん
こんにちは。
MT ルビ付きテキスト作成支援フィルタのソースを書き換えて、改行を削除しないようにしてみました。
以下のページに接続し、ソースをコピーしてメモ帳等に貼り付け、「mt-ruby.pl」のファイル名で保存して、既存のプラグインと差し替えてください。
mt-ruby.txt
これでうまくいくと思います。
conduc
壱さんこんにちわ。
本当にありがとうございます。
無事併用できるようになりました。
これからもよろしくお願いいたします。
し~ちゃん
はじめまして。
小粋空間さんのところからきました。
以前からHTMLタグの変換に悩んでいたのですが、ここでようやく悩み解消となりました。
助かりました~:pp_11.gif:
いろいろプラグインがありますので、また使わせていただくことになるかと思いますのでよろしくお願いします。
トラバとBlogPeoPleに登録させてもらいました。
ありがとうございました:pp_07.gif:
sin_d:
はじめまして。
ModTextFilter使わせて頂いてます。
このプラグインすごく便利ですね。
エントリー中のタグの表示はいろいろ面倒だったので非常に助かりました。
ありがとうございました。
みっく
壱さん、こんにちは。こちらでははじめまして。
エンコードボタンをMT3.2でどうするか検討していて
こちらのエントリーに辿り着きました。
丁度エントリー内の改行やタグについてカスタマイズをしたところでしたが
早速導入させていただくことにいたしました。
これからも色々なプラグインを使わせていただこうと思います。
素晴らしいプラグインをどうもありがとうございました。
yk
こんにちは
プラグインを利用したいのですが
こんなエラーが出てしまって、困っています
理由が何か分かりますでしょうか?
よろしくお願いします
ModTextFilter.pl
プラグイン・エラー:
syntax error at /home/yk/www/mt/plugins/ModTextFilter.pl line 2, near "" syntax error at /home/ykym/www/mt/plugins/ModTextFilter.pl line 10, near "n" syntax error at /home/yk/www/mt/plugins/ModTextFilter.pl line 11, near "n" syntax error at /home/yk/www/mt/plugins/ModTextFilter.pl line 17, near "p" syntax error at /home/yk/www/mt/plugins/ModTextFilter.pl line 20, near "p" Compilation failed in require at lib/MT.pm line 619.
壱
>ykさん
こんにちは。
プラグインが正しくダウンロードできていないのではないかと思います。
もう一度、ダウンロードからやり直してみてください。
bunta
始めまして。
WEBデザインストックを運営している
buntaと申します。
The blog of H.Fujimotoで公開されているプラグイン
を色々と使わせていただいています。
いつもありがとうございます。
今回「改行を変換する」を改良するプラグインを非常に便利な
プラグインとして記事でご紹介させていただき、トラックバック
にも登録させていただきました。
色々とお世話になると思いますので、これからもよろしくお願い
します:pp_07.gif:
bzbell
こんばんわ^^
ModTextFilter プラグインは以前から使わせて頂いてるのですが、MT4.2 では「設定」>「コメント」で選択するドロップダウンリストの文字列が化けてしまいます。
そこで ModTextFilter.pl 内の 29 行目のエンティティを「改良テキストフィルター」書き換えて UTF-8 で保存したら正しく表示されました。
これって MT4.2 の問題でしょうか:pp_02.gif:
※特に動作には支障はありません。
以上、ご連絡まで:pp_01.gif:
壱
>bzbellさん
こんにちは。
ご指摘の件を改良したものを公開しました。
http://www.h-fj.com/blog/archives/2008/08/04-102123.php