拙著「上手に稼ぐカラ売りテクニック」が発売されました。
株価が下がる局面で利益を得ることができる「空売り」について、詳しく解説した本です。
自由国民社刊で、定価1,512円(税込)です。
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の中には多数のメソッドやプロパティがありますので、ダンプするとかなり巨大な文字列が出力されます。
