Pierre-Henri Lavigne

コールバックの中にカスタムフィールドのクエリーする方法

0

こんにちわ、

cms_pre_save.entryのカールバックの中にカスタムフィールド一個の同じバリューある記事をクエリーしたいんですがうまくできていません。
ドキュメントーを見るとやり方が見つかりませんでした:

https://github.com/movabletype/Documentation/wiki/Japanese-plugin-dev-3-4

例えば:
my $terms = { blog_id => $obj->blog_id };
my $args = { limit => 10 };
my $class = MT->model( 'entry' );
my $iter = $class->load_iter( $terms, $args );
while (my $curr = $iter->()) {
doLog( $curr->id );
}

問題なさそうです。以下の書き方ではエラーなしですけど動いていないみたいです:

my $terms = { blog_id => $obj->blog_id, 'field.cf_foo' => $obj->meta( 'field.cf_foo' ) };
my $args = { limit => 10 };
my $class = MT->model( 'entry' );
my $iter = $class->load_iter( $terms, $args );
while (my $curr = $iter->()) {
doLog( $curr->id );
}

やり方分かる人いますか?
ドキュメントを見ると「join => [ CLASS, JOIN_COLUMN, $terms, $args ]」を使うようならどのオブジェクトに繋がればいいですか?

返信(2)

| 返信する
  • こんにちは。
    下記のような書き方で上手く取得できるのではないかと思います。

    my $col = 'cf_foo';
    my $class = MT->model('entry');
    my $type = MT::Meta->metadata_by_name($class, 'field.' . $col);
    my $iter = MT::Entry->load_iter(
        {
            blog_id => $obj->blog_id
        },
        {
            join => [
                $class->meta_pkg,
                undef,
                {
                    'entry_id' => \'= entry_id',
                    type => 'field.' . $col,
                    $type->{type} => $obj->meta('field.' . $col)
                }
            ],
            limit => 10
        }
    );
    
    

    while (my $curr = $iter->()) {
    doLog( $curr->id );
    }

    参考になりましたら幸いです。

  • 安倍さん、

    どうもありがとうございました!
    まだ全部理解できませんので開発続けられる状態でございます
    後は https://www.anothersky.pw/2015/12/mt_customfield_filter_test.html を見ると勉強ものがまだありそうです

    本当にありがとううう〜

返信する


カテゴリグループ

OpenID対応しています OpenIDについて