「MTOS活用テクニック」の一部修正

MTOS活用テクニック―カスタムフィールドで本格的なCMS機能を実現!拙著「MTOS活用テクニック」のプラグインについて、以下の2点の不具合を修正する方法を紹介します。

  • ブログ記事を一括編集したときに、追加のフィールドに保存したデータが消える
  • 個々のアイテムの管理画面で、サイドバーの「利用状況」の部分に、追加のフィールドに保存した画像の情報が出ない

1.ブログ記事の一括編集に関する修正

この点を修正するには、ご自分で作られた個々のプラグインを修正していただく形になります。
プラグインのsave_entry_fieldサブルーチンに、以下の赤字の行を追加してください。

sub save_entry_field {
    my ($eh, $app, $entry, $orig_entry) = @_;

    return 1 if ($app->param('__mode') eq 'save_entries');
    ・・・
}

2.アイテム関連の修正

この点は、MTOSHelperプラグインを書き換えて修正します。
MTOSHelperプラグインのMTOSHelper.pm内にあるscf_save_imageサブルーチンに、以下の赤字の行を追加します。

sub scf_save_image {
    my ($app, $obj, $field) = @_;

    my $value = $app->param("scf_${field}");
    my $id;
    if ($value =~ m!<form[^>]*?\smt:asset-id=["'](\d+)["'][^>]*?>(.+?)</form>!gis) {
        $id = $1;
    }
    $obj->column($field, $id);
    my $obj_asset = MT->model('objectasset')->get_by_key({
        asset_id => $id,
        blog_id => $obj->blog_id,
        object_ds => $obj->class,
        object_id => $obj->id,
    });
    $obj_asset->save;
    1;
}