1. TOP
  2. Perl / PHP Web
  3. MTプラグイン作成:Perlのハッシュ(連想配列)ではまる

MTプラグイン作成:Perlのハッシュ(連想配列)ではまる

カテゴリ:
Perl / PHP
Web
| トラックバック(0)
投稿者:yo yo

MTのプラグイン「ChangeCategoryCollectively」を改造していて、ハッシュではまったのでメモ

    my %hash = {
        A => {akey01 => aAttr01, aKey02 => aAttr02},
        B => {bkey01 => bAttr01, bKey02 => bAttr02}
    };

という連想配列があったとして

    print $hash{A}{akey01};       # 動いた。
    print $hash->{A}{akey01};    # Perlの慣習な書き方、動いたかどうか忘れた。
    print $hash->{A}->{akey01};    # 動かなかった。

という現象が起きました。Perlにはバージョンによっても、人によっても色んな書き方があるのでニワカな私には何が正しいのか解りません。とりえあず動けば良しとしてください。

	require MT::Category;
	my %shopHash;
	for my $category ( MT::Category->load( {blog_id => $blog_id} ) ){
		if($category->parent_category == undef){
		
			$shopHash{$category->id}{$category->id} = {
				type        => 'entry',
				key         => 'ChangeCategoryCollectively_'.$category->id,
				label       => Encode::decode('utf-8', 'カテゴリの追加').$category->label,
				code        => sub { $plugin->category_assignment($app, $category->id)   },
				condition   => sub { $plugin->perm_check($app) },
				cat_id      => $category->id,
				cat_label   => $category->label,
			};
			
			#$app->add_itemset_action($shopHash{$category->id}{$category->id});
			#$Category_label{$category->id} = $category->label;
		}else{
			$shopHash{$category->parent_category->id}{$category->id} = {
				type        => 'entry',
				key         => 'ChangeCategoryCollectively_'.$category->id,
				label       => Encode::decode('utf-8', 'カテゴリの追加').$category->label,
				code        => sub { $plugin->category_assignment($app, $category->id)   },
				condition   => sub { $plugin->perm_check($app) },
				cat_id      => $category->id,
				cat_label   => $category->label,
			};
		}
	}
	
	foreach my $key ( keys %shopHash ) {
		foreach my $attr (keys %{$shopHash{$key}}){
			
			$app->add_itemset_action($shopHash{$key}{$attr});
			$Category_label{$shopHash{$key}{$attr}{cat_label}} = $shopHash{$key}{$attr}{cat_label};
			
			#$Category_label{$category->id} = $category->label;
		}
	}

ちなみにこのコードに意味は有りません。改造途中の無駄ソースのメモです。

ChangeCategoryCollectively について

この Movable Type 用のプラグインは、エントリーの編集の場面に、選択されたエントリーのカテゴリーを一括して変更するためのインタフェースを提供します。

before.png
Figure 1: 「その他の操作... 」

エントリーのリストされた編集画面には「その他の操作... 」というプルダウンメニューがありますが、このプラグインをインストールすると、その内容に、カテゴリーを操作するメニューが新たに加わります。

hPod: Spanners: Change Category Collectively 0.01

現在、このプラグインを改造させてもらってます。MT5に対応(してましたけど)させ、GUIもきちんと作りました。きちんと出来次第、制作者の方に連絡取ってから公開します。

« FlashDevelopのビルドでエラーが出る | ホーム | CakePHP開発用のメモ »

トラックバック

http://pulltab.info/mt/mt-tb.cgi/58
ページの先頭に戻る