「WordPressで学ぶPHP(1)変数・制御構造編」が発売されました。
「WordPressで学ぶPHP」シリーズの第1巻で、WordPressを通してPHPを学んでいく本です。
この本では、PHPの基本となる変数と制御構造について解説します。
Kindle本で、定価500円です。
ListingFrameworkのオブジェクトの中身を見る
MTQを見ていたところ、tomixさんから以下のような質問が上がっていました。
MTDDCからかえってきて、
早速、荒木さんのサンプルをいれて、
リスティングフレームワークをいじり始めています。
リストに表示するために取ってくるオブジェクトの中身が、どのようなものか、みてみたいのですが。方法はありますか?
この質問に答えてみます。
1.Data::Dumper
Listing Frameworkだけでなく、Perl一般のオブジェクトの中身を見る際には、Data::Dumperを使います。
Data::Dumperは、配列/ハッシュ/オブジェクトの中身をダンプする際に使います。
例えば、$objの中身をダンプして変数$dに代入するには、以下のように書きます。
use Data::Dumper; my $d = Dumper($obj);
ダンプの結果は、Perlのコードの形の文字列になります。
2.プラグインの修正
上記の話に基づいて、MTQに上がっていたプラグインを修正すると、以下のようになります。
ただし、$appは巨大なオブジェクトなので、$appは出力しないようにしました。
また、ダンプ結果にHTMLが含まれ、そのまま出力すると表示が若干乱れますので、MT::Util::encode_htmlを使って、ダンプ結果をHTMLエンコードしてから出力しています。
id: hogehoge list_properties: entry: keywords: auto: 1 label: キーワード display: force title: auto: 1 label: 記事 display: force sub_fields: - class: excerpt label: 本文 display: force html: > sub { use Data::Dumper; use MT::Util qw( encode_html ); my ($prop, $obj, $app ) = @_; my $title = $obj->title; my $p = encode_html(Dumper($prop)); my $out =qq{ <span><b>$title</b><span><br /> <pre class="excerpt" style="height : 100px;">$p</pre> }; return $out; }
このプラグインをインストールして、ダンプ結果を表示してみると、以下の画面のようになります。
3.$propの中身
$propは、config.yamlファイルでlist_propertiesに登録した情報を、MT内部で追加・修正したものになっています。
ちなみに、上記のプラグインのダンプ結果を整形すると、以下のようになっています。
「html」や「sub_fields」を見ると、config.yamlファイルに書いた内容が、そのままPerlの形になっていることが分かります。
$VAR1 = bless( { 'base' => '__virtual.title', 'object_type' => 'entry', '_base' => bless( { ・ ・(途中略) ・ }, 'MT::ListProperty' ), 'datasource' => 'MT::Entry', 'display' => 'force', 'sort' => sub { "DUMMY" }, 'html' => 'sub { use Data::Dumper; use MT::Util qw( encode_html ); my ($prop, $obj, $app ) = @_; my $title = $obj->title; my $p = encode_html(Dumper($prop)); my $out =qq{ <span><b>$title</b><span><br /> <pre class="excerpt" style="height : 100px;">$p</pre> }; return $out; }', 'col' => 'title', 'order' => 200, 'sub_fields' => [ { 'label' => "\x{672c}\x{6587}", 'class' => 'excerpt', 'display' => 'force' } ], 'id' => 'title', 'type' => 'title', 'class' => 'entry', 'label' => sub { "DUMMY" }, 'raw' => sub { "DUMMY" } }, 'MT::ListProperty' );
4.$appの内容
$appは、MT::App::CMSオブジェクトを指しています。
$appの中には多数のメソッドやプロパティがありますので、ダンプするとかなり巨大な文字列が出力されます。