Under the Bridge

a Picture of the Late Him

サンプルプラグインを手入力した(RandomEntry)

2008年4月27日 18:06 | Writer: yoshi | 記事本文 | コメント(0) | トラックバック(0)

MT4LP5の連動書籍『Movable Type プロフェッショナル・スタイル[MT4.1対応]』の、TrackB Session3の[4]にある、「プラグインを開発しよう(ページ223~226)」のページにある、RandomEntryプラグインのコードを入力してみた。

どっかにコードが落ちていても、コピペしてるとあんまり意味がないとも思った...。このコードはひとつひとつ打って噛み締める。なので探さずに手打ち。

MT4LP5時の講師と、Mプ本の同セクションの著者はCHEEBOWさん。イケメンです(とtwitterで発言したら「なんもでませんよ」と返された)。

参考。環境は

※ 数ヶ月前よりXAMPP環境を導入している。当時はPentium!!!の700MHz、メモリ384MBという、非力、いやもはやアンティークなマシンで作業やってて、再構築時にタバコが何本も吸えた。我慢ならず、2007年末マシンを買い替え。今はエントリ一個の再構築くらいすぐに終わる。遅いマシンは、買い換えたほうが、体にも精神面でも健康的。作業効率もぐっとアップする。

あと、レンタルサーバーでこういう実験しちゃ駄目。

動作を確認したコード

以下コードに「randomentry.pl」というファイル名をつけてプラグインのフォルダへ放り込めばOK。なお、returnの直後に、謎のダブルクォーテーションがついてたので、外した(2箇所) (2008/04/29 修正:シングルクォーテーション2個かなこれは)。ほか、ちょこっとだけ、オリジナルと異なる箇所がある。

package MT::Plugin::RandomEntry;
use strict;
use base qw(MT::Plugin);
require MT::Entry;
our $VERSION = '0.1';

my $plugin = new MT::Plugin::RandomEntry({
    id => 'RandomEntry',
    key => 'random_entry',
    name => 'RandomEntry',
    version => $VERSION,
    description => '<MT_TRANS phrase=\'This Is RandomEntry Sample(MT4LP5 Book)\'>',
});
MT->add_plugin($plugin);

sub init_registry
{
    my $plugin = shift;
    $plugin->registry({
        tags => {
            block => {
                'RandomEntry' => \&_hdlr_random_entry,
            },
        },
    });
    
}

sub _hdlr_random_entry {
    my ($ctx, $args) = @_;
    my $blog_id = $ctx->stash('blog_id');
    my $count = MT::Entry->count({blog_id=>$blog_id}) or return '';
    my $idx =int(rand($count));
    my $terms = {blog_id =>$blog_id,status=>MT::Entry::RELEASE};
    my $args={offset=>$idx,limit=>1};
    my $entry =MT::Entry->load($terms,$args) or return '';
    local $ctx->{__stash}{entry} =$entry;
    local $ctx->{current_timestamp} =$entry->created_on;
    local $ctx->{modification_timestamp} =$entry->modified_on;
    my $builder = $ctx->stash('builder');
    my $tokens = $ctx->stash('tokens');
    defined(my $out = $builder->build($ctx,$tokens)) || return $ctx->error($ctx->errstr);
    return $out;
}
1;

使い方

たとえば、以下のようにする。

<MTRandomEntry>
<h3><MTEntryTitle></h3>
<h4><MTEntryDate></h4>
<MTEntryBody>
<MTEntryMore>
</MTRandomEntry>

機能

公開されているエントリをひとつ、ランダムにピックアップする。

このあと

これ、いじり勉強ベース。パーラー見習い。

トラックバック(0)

このブログ記事を参照しているブログ一覧: サンプルプラグインを手入力した(RandomEntry)

このブログ記事に対するトラックバックURL:

コメントする






Categories
Entries
Feed
スポンサードリンク

parts

フィードメーター - Under the Bridge

あわせて読みたい

なかのひと

2008 yoshi(apstar)