過去の記事に遡って、Asset登録されていなかった画像ファイルを登録して、記事に関連づけるスクリプトを作って、適用してみました。
大変に乱暴と言えば乱暴なスクリプトなのですが、指定されたブログのエントリを順にスキャンして、img タグから取り出される画像ファイルのうち、自分のブログの管理下にあるものを拾い出して、Assetになっていなければ Asset に登録して、記事に関連づける、という作業を延々と。
仕上げに、インデックスと、カテゴリアーカイブを再構築して終了。これで、写真のある記事は、見出しに写真が付いている状態になりました。
やっていることはたいしたことではありません。
my $app = new MT::App::CMS;
で、CMSクラスを初期化して、
my $blog = MT::Blog->load($blog_id);
ブログを呼び出して、
my @entries = MT::Entry->load( { blog_id => $blog_id } );
foreach my $entry (@entries)
{
エントリーを全部取り出したら順にスキャンして、
my $asset = MT::Asset::Image->load( { blog_id => $blog_id, file_path => $full_path } );
unless ($asset)
{
# create asset
$asset = &_save_asset($basename, $full_path, $asset_url, $title, $entry->blog_id, $entry->author_id, 0);
next unless $asset;
}
my $oa = MT::ObjectAsset->load( { asset_id => $asset->id , blog_id => $blog_id , object_id => $entry->id , object_ds => $entry->class } );
unless ($oa)
{
$oa = MT::ObjectAsset->new;
$oa->asset_id($asset->id);
$oa->blog_id($entry->blog_id);
$oa->object_id($entry->id);
$oa->object_ds($entry->class);
$oa->save;
}
Assetになっていなければ、Assetを作って、更にそれが関連づけられていなければ、関連づけして終わるという、それの繰り返しです。明らかに BindImageAssetプラグインの流用なわけですが、この手の操作は、一度やってしまえば後はもうやる必要はないわけで、こんな感じの雑さでも、なんとかなってしまうわけです。
コメント