MT(PowerCMS) でのCMS構築の際には tools以下にスクリプトをひとつ置いておく

| コメント(0) | トラックバック(0)

ここが変だよ Movable Type シリーズの続きです。「ニュースカテゴリに属する記事をトップページに最新10件表示して」で、後で追加で「非表示フラグ設定できるようにしてよ」って。もう、あるある過ぎますよね。

そこで、みんな大好きカスタムフィールド。チェックボックスフィールドをひとつ作ってフラグ付きを除外するとか、やるじゃないですか。で、以下のようにする。

チェックボックスカスタムフィールドを追加する

<mt:Entries limit="10" field:entrynotop="0" category="ニュース">

</mt:Entries>

実はこいつは上手くいかない。

上手く行きますよね? 上手く行くと思うでしょ? でもこれ実は上手く行かないんだよ既に記事が入っていると。なぜならカスタムフィールドを追加で記事に対して作成しても、既に存在する記事フィールドには値は入ってくれんのである。じゃぁ、「表示フラグ」に変更して、初期値を1(checked) にしたら、ってこれも同じですわ。ね、やはりお前らのMTは間違っているでしょ?

そんな時のために、案件開始時には mt_dir/tools の下にひとつスクリプトを置いておくといいです。クライアント名とかプロジェクト名とかサイト名でいいです。あなたがビートルズのサイトを構築しているなら

mt_dir/tools/Beatles

のようなファイルです。ファイルの内容は以下でいいです。気になる人は package MT::Tool::Foo; を package MT::Tool:: Beatles; とかに変更すればいい。

https://gist.github.com/alfasado/4167792

#!/usr/bin/perl
package MT::Tool::Foo;
use strict;
use warnings;
use File::Spec;
use FindBin;
use lib map File::Spec->catdir( $FindBin::Bin, File::Spec->updir, $_ ), qw/lib extlib/;
use base qw( MT::Tool );

sub usage { '--debug 1' }

sub help {
    return q {
        Description Foo.
        --debug 1
    };
}

my ( $debug );

sub options {
    return (
        'debug=s'   => \$debug,
    );
}

sub main {
    my $class = shift;
    my ( $verbose ) = $class->SUPER::main( @_ );
    if ( $debug ) {
        print 'Some debug message.' ."\n";
    }
    # Do something.
    1;
}

__PACKAGE__->main() unless caller;

で、今回の要件なら main サブルーチンに以下のように書いて,

my $field = 'field.entrynotop';
my $iter = MT::Entry->load_iter( { class => 'entry' } );
while ( my $obj = $iter->() ) {
    if (! $obj->$field ) {
        $obj->$f( 0 );
        $obj->save or die $obj->errstr;
    }
}

サーバーにログインして以下を実行すればOK。今後追加される記事は値が空になることはないしね。

$ cd path/to/mt_dir 
$ perl tools/Beatles

他にも色々使えるよ。

  • ブログで作成していたテンプレートを全部グローバルテンプレートに移し替えたい
  • カテゴリの指定が聞いてた話しと途中で変わってしまった
  • 大量のファイルをアップしておいてまとめてアイテムに登録したい
  • アップしちゃいけないファイルがアップされているので纏めて削除したいがアイテムが1万件くらいある

とかね。まー要件変更とかあるあるだから、スクリプト置いておいて簡単な処理が書けるようにしておけば、芸は身を助けますよ。これ本当。

トラックバック(0)

トラックバックURL: http://junnama.alfasado.net/cgi/mt/mt-tb.cgi/926

コメントする

Facebook

Twitter

このブログ記事について

このページは、Junnama Nodaが2015年12月28日 16:50に書いたブログ記事です。

ひとつ前のブログ記事は「やはりお前らのMTは間違っている!」です。

次のブログ記事は「謹賀新年 - 2016年は基本に立ち戻り“仕事力”を見直す一年に。」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.2.6