「WordPressで学ぶPHP(3)関数編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」の続編にあたり、PHP組み込みの関数や、独自の関数を作る方法などを解説します。
Kindle本で、定価400円です。
エントリーにXMLでデータを埋め込むプラグイン(その2)
昨日の続きで、エントリーにXMLでデータを埋め込むプラグインを紹介します。
今日は、このプラグインで追加されるテンプレートタグの書き方です。
MTEntryXMLタグ/MTEntryIfXMLタグ
MTEntryXMLタグは、エントリーに入れたXMLの全体を表すコンテナタグです。
このコンテナの中に、データを取り出すためのタグを入れます。
また、MTEntryIfXMLタグは、エントリーにXMLのデータが含まれるかどうか(<XMLRecord>~</XMLRecord>)を調べる条件タグです。
エントリーからXMLのデータを取り出したいときには、まずこれらのタグを以下のように組み合わせます。
<MTEntryIfXML> <MTEntryXML> データを取り出すタグ </MTEntryXML> </MTEntryIfXML>
MTEntryXMLValueタグ
XML内の特定の要素の値を取り出すタグです。
nameアトリビュートで要素の値を指定します。
例えば、エントリーの中に以下のようにXMLを入れたとします。
<!-- <XMLRecord> <width>150</width> <height>100</height> </XMLRecord> -->
この場合、「<$MTEntryXMLValue name="width"$>」とすると、XML内のwidth要素の値(150)が出力されます。
同様に、「<$MTEntryXMLValue name="height"$>」とすると、「100」が出力されます。
MTEntryXMLFieldsタグ
XML内で要素が階層化されているときに、ある要素を基準に、その下の階層にあるすべての要素を取り出すためのコンテナタグです。
基準となる要素の名前は、nameアトリビュートで指定します。
例えば、エントリーに以下のようにXMLを入れたとします。
<!-- <XMLRecord> <productinfo> <name>foo</name> <price>1500</price> </productinfo> <size> <width>150</width> <height>100</height> </size> </XMLRecord> -->
上記のXML内の各要素を取り出すには、以下のようにタグを組みます。
<MTEntryIfXML> <MTEntryXML> <MTEntryXMLFields name="productinfo"> Name : <MTEntryXMLValue name="name"><br /> Price : <MTEntryXMLValue name="price"><br /> </MTEntryXMLFields> <MTEntryXMLFields name="size"> WIdth : <MTEntryXMLValue name="width"><br /> Height : <MTEntryXMLValue name="height"><br /> </MTEntryXMLFields> </MTEntryXML> </MTEntryIfXML>
MTEntryXMLIfFieldsタグ
XML内に、指定した名前の要素があるかどうかを調べる条件タグです。
要素の名前はnameアトリビュートで指定します。
例えば、「width」という名前の要素があるときだけ何かを出力する場合は、以下のようにタグを組みます。
<MTEntryIfXML> <MTEntryXML> <MTEntryXMLIfFields name="width"> 出力する内容 </MTEntryXMLIfFields> </MTEntryXML> </MTEntryIfXML>
ただし、要素は現在処理中の階層からのみ検索されます。
ある階層の直下に、特定の要素があるかどうかを調べたい場合は、まずMTEntryXMLFieldsタグを使ってその階層の要素を取り出し、そのコンテナの中でMTEntryXMLIfFieldsタグを使います。
MTEntryXMLFieldCountタグ
特定の名前の要素がいくつあるかを出力する変数タグです。
要素を配列化した際に利用します。
なお、要素の配列化については明日解説します。
MTEntryBodyCutCommentタグ
このプラグインではエントリーにXMLを入れますが、そのままだとMTEntryBodyタグの出力にXMLがそのまま含まれてしまいます。
以下のように、MTEntryBodyタグをMTEntryBodyCutCommentタグのコンテナで囲むと、MTEntryBodyタグの出力から、XMLとその前後のコメントタグが取り除かれます。
<MTEntryBodyCutComment><$MTEntryBody$></MTEntryBodyCutComment>