アイテムのカスタムフィールド削除動作を改善する「DeleteAssetWithDeleteCFAssetプラグイン」

アイテムのカスタムフィールド削除動作を改善する「DeleteAssetWithDeleteCFAssetプラグイン」

Posted at August 16,2011 12:03 AM
Tag:[DeleteAssetWithDeleteCFAsset, MovableType, Plugin]

Movable Type 5で、アイテムのカスタムフィールド削除と同時に関連アイテムを削除する「DeleteAssetWithDeleteCFAssetプラグイン」を公開します。

1.機能

アイテムのカスタムフィールド削除に連動して、ウェブページやブログ記事の「関連アイテム」も同時に削除します。以下、スクリーンショットで説明します。

ブログ記事の「画像」カスタムフィールドにコーヒーカップの画像(eyes0588.jpg)が登録されているものとします。このとき、右端の「ブログ記事アイテム」にも同じファイル名が表示されています。

ブログ記事編集画面

カスタムフィールドの「画像を削除する」をクリックします。

画像を削除

クリックしたあと、MTのデフォルト状態であれば「ブログ記事アイテム」の「eyes0588.jpg」は削除されませんが、本プラグインを適用することで「ブログ記事アイテム」の表示を削除します。この状態で保存を行えば、該当の画像をブログ記事アイテムから完全に削除します。

削除後の関連アイテム

該当のカスタムフィールドに対応する関連アイテムだけを削除するので、複数のアイテムが登録されている場合でも大丈夫です。

その他、下記の動作も可能です。

  • カスタムフィールドの「画像を選択」をクリックしたときにも、同じカスタムフィールドに登録済みの関連アイテムを削除
  • アイテムの選択・削除を繰り返しても、関連アイテムの表示・非表示が連動します
  • 画像含め、すべてのアイテムに対応

関連アイテムの方から削除した場合、カスタムフィールドのアイテムを非表示にすることはできませんが、保存後にカスタムフィールドはデフォルト機能で削除されるので、連動という意味では問題ないと思います。

このプラグインはMT5.06/MT5.12で動作確認しています。ブラウザはGoogle Chrome/Firefoxで確認しています。

なお、プラグインだけでは機能追加できない箇所があり、MTのプログラムに1行だけ処理を追加する必要があります(詳細は3項)。

2.価格

  • 個人無償版/有償版での非商用利用/Movable Type Open Source:無償
  • 有償版での商用利用:1000円/1サーバ(税抜き、事前に動作確認してください)

無償でご利用の場合も、プラグインのご利用についてご支援・ご賛同くださる方からの寄付をお待ち申し上げます。

3.プラグインのダウンロード・インストール

下記のリンクをクリックして、プラグインアーカイブをダウンロードします。

DeleteAssetWithDeleteCFAsset_0_01.zip

プラグインアーカイブを展開し、中にある DeleteAssetWithDeleteCFAssetフォルダごと、Movable Type のアプリケーションディレクトリの plugins ディレクトリにアップロードします。

システム管理画面のプラグイン設定画面で、「DeleteAssetWithDeleteCFAsset~」が表示されればインストール完了です。

プラグイン設定画面

動作の確認は3項の修正を行ってから実施してください。

4.ソースコードの修正

addons/Commercial.pack/lib/CustomFields/Util.pmを任意のエディタで開き、_get_htmlというメソッドに赤色の1行を追加します。5.12であれば536行目あたりです。

sub _get_html {
    my ( $key, $tmpl_key, $tmpl_param ) = @_;
    …中略…
    if ( $type_obj->{asset_type} ) {
        my $asset_html = $tmpl_param->{field_value};
        if ( defined($asset_html)
            && ( $asset_html =~ m/\smt:asset-id="(\d+)"/i ) )
        {
            my $asset_id = $1;
            if ( my $asset = MT::Asset->load($asset_id) ) {
                $ctx->stash( 'asset', $asset );
                unless ( defined $image_support ) {
                    eval { require MT::Image; MT::Image->new or die; };
                    $image_support = $@ ? 0 : 1;
                }
                $tmpl->param( 'have_thumbnail', $image_support );
                $tmpl->param( 'asset_id', $asset_id );
            }
            else {
                $tmpl->param( value => '' );
            }

5.注意事項

このプラグインは、ブログ記事・ウェブページに登録されている関連アイテムが必ずカスタムフィールドで使われてることが前提となります。

アイテムのカスタムフィールドを削除したときに関連アイテムは削除したくないという場合は、プラグインを一時的に使用不可にするか、プラグインをアンインストール(pluginsフォルダから削除)してください。

関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)