「WordPressで学ぶPHP(1)変数・制御構造編」が発売されました。
「WordPressで学ぶPHP」シリーズの第1巻で、WordPressを通してPHPを学んでいく本です。
この本では、PHPの基本となる変数と制御構造について解説します。
Kindle本で、定価500円です。
画像を挿入したときにformタグがつく理由
Movable Type 4では、画像等を「アイテム」として管理する機能があります。
アイテムをブログ記事に挿入すると、そのアイテムに応じたタグが自動的に入力されます。
ただ、画像をブログ記事に挿入すると、画像のimgタグがformタグで囲まれて挿入されます。
画像を挿入したことがある方は、「何でformタグが挿入されるんだ?」という印象を持ったのではないかと思います。
また、「formタグは邪魔だ」という意見も多いようです。
ただ、このformタグには意味があります。
今日はこの点について解説します。
1.ブログ記事とアイテムの関連を保存するため
Movable Type 4の新しいタグの中に、「MTEntryAssets」というタグがあります。
このタグは、ブログ記事に入っているアイテムの一覧を出力するものです。
このタグの処理を効率よく行うには、ブログ記事とアイテムの関連の情報を、どこかに保存しておくという方法が考えられます。
Movable Type 4には「MT::ObjectAsset」というクラスがあり、このクラスによってブログ記事等とアイテムとの関連付けが保存されるようになっています。
画像につけられたformタグは、この関連付けの保存の処理を行うために使われています。
ブログ記事を保存すると、その本文の中からformタグが検索され、その情報を利用して関連付けが保存されるようになっています。
したがって、画像からformタグを取ってしまうと、関連付けが保存されず、MTEntryAssetsタグが正しく動作しなくなってしまいます。
2.再構築時にformタグは置換される
また、ブログ記事を再構築すると、formタグはspanタグに置換されるようになっています。
ブログ記事に画像を入れた時点では、タグは以下のように入力されます。
<form mt:asset-id="アセットのID" class="mt-enclosure mt-enclosure-image"> <img alt="画像の代替文字列" src="画像のアドレス" width="画像の幅" height="画像の高さ" class="mt-image-xxx" style="float: xxx; margin: 0 20px 20px 0;"/> </form>
一方、この部分を再構築すると、以下のようなタグに置き換わります。
<span class="mt-enclosure mt-enclosure-image"> <img alt="画像の代替文字列" src="画像のアドレス" width="画像の幅" height="画像の高さ" class="mt-image-xxx" style="float: xxx; margin: 0 20px 20px 0;"/> </span>
上記のようなことから、画像を挿入したときのformタグは、ブログ記事から勝手に削除せずに、残しておくようにすることをお勧めします。
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください
哲やん
いつもお世話になっております。
formタグはLightbox2を使いたい一心でいろいろ調べた末に、いろいろな方からのご助言を頂き、何とか設置が可能になりました。
たしかにformタグは再構築されたブログ記事のソースを見るとspanに変わっていました。
他にも何か潜んでいそうな気がします。
今後も皆さんの解析を注視していきたいと思っています。
alba
いつもありがとうございます。私もこのformタグには何か意味があると思って、はずさずにいました。そしてID番号は重複してはいけないんだろうと思って、別のブログにアップしてある画像を当該ブログで使う際に、画像URLをコピーして参照させ、formタグのID番号だけ勝手に自分でふりました。以前の通し番号の続きから、です。
そしたら、アイテムには表示されていません。このアイテムのウィジェットを使わないなら、formタグをはずしても問題はないでしょうか?あるいは、新規アップロード画像以外がアイテムに表示されなくても問題ないと自分で思うなら、このままにしていても構わないでしょうか。こんな風に勝手にID番号をふることは全く意味のないことでしょうか。後で致命的エラーにならなければいいと思っています。素人の質問で申し訳ありません。
壱からalbaへの返信
>albaさん
こんにちは。
記事にも書いたように、formタグの「mt:asset-id="アセットのID"」の部分が、実際のアセット(アイテム)のIDと正しく対応していないと、MTEntryAssetsタグが正しく動作しません。
自分で適当なIDを振ると、MTEntryAssetsタグは動作しなくなりますし、データに不整合が生じます。
また、アイテムの情報はMTのデータベースに保存されていて、アイテムのウィジェットはその情報に基づいて出力されます。したがって、他所にある画像に勝手にIDを振っても、アイテムのウィジェットには出力されません。