調べてみると、昔僕が会社のブログに「Movable Typeで記事をファイル出力しない方法を調べてみた」という記事を書いているのですが、それの応用編です。
案件には特殊な事情が絡むもので、テンプレートの出力パスを調整することによりブログAの記事をサイトAとサイトBに出力しているのですが、記事によってはサイトBには出力したくないという要件が出てきました。さてどうしたものか。
build_file_filterについて調べる
build_file_filterでどうにか出来るか否かだと思うので、MT::WeblogPublisherについて調べます。コールバックの項を見ていくとBuildFileFilterコールバックの説明があり、$args
からMT::TemplateMapオブジェクトが取れることが分かりました。これは使えそう。
ダンプしてみると以下のようなデータが取れました。template_id
があるのでサイトB用のテンプレートは出力しないという分岐が作れそうです。
bless( {
'__cached' => {
'MT::ObjectDriver::Driver::Cache::RAM' => 1
},
'__core_final_post_load_mark' => 1,
'__is_stored' => 1,
'__saved_output_file' => '2020/02/index.html',
'__triggers' => {},
'_class_trigger_results' => [],
'column_values' => {
'archive_type' => 'Monthly',
'blog_id' => 2,
'build_interval' => undef,
'build_type' => 1,
'file_template' => '%y/%m/%i',
'id' => 38,
'is_preferred' => 1,
'noindex' => undef,
'template_id' => 394
}
}, 'MT::TemplateMap' )
また、会社ブログの記事にも書いていますがMT::Entryオブジェクトも取れるので、そこからMT::Categoryオブジェクトも取れます。これにより、サイトBであることの判別ができます。
bless( {
'__children' => [],
'__core_final_post_load_mark' => 1,
'__is_stored' => 1,
'__meta' => bless( {
'__pkeys' => {
'category_id' => 6
},
'pkg' => 'MT::Category'
}, 'MT::Meta::Proxy' ),
'__triggers' => {},
'_class_trigger_results' => [
[],
[],
[
''
]
],
'column_values' => {
'allow_pings' => 0,
'author_id' => 1,
'basename' => 'powercms',
'blog_id' => 2,
'class' => 'category',
'created_by' => 1,
'created_on' => '20181205154847',
'description' => undef,
'id' => 6,
'ieo_original_id' => undef,
'label' => 'PowerCMS',
'modified_by' => undef,
'modified_on' => '20181205154847',
'parent' => 5,
'ping_urls' => undef
}
}, 'MT::Category' )
僕の課題は何とか解決ができそうです。