Movable Type で画像やファイルをアップロードする際の、デフォルトのアップロード先を任意のディレクトリに設定するカスタマイズについては、様々なブログ等で紹介されています。”MTディレクトリ/tmpl/cms/include/asset_upload.tmpl” を “MTディレクトリ/alt-tmpl/” 以下にコピーして、先頭に以下のように追記するというものです。

“uploads” というディレクトリに設定する場合は

<mt:setvar name="extra_path" value="uploads">

“uploads/年/月/日” というディレクトリとする場合は

<mt:setvarblock name="extra_path">uploads/<$mt:date format="%Y/%m/%d"$></mt:setvarblock>

ブログ毎に設定を変える場合は

<mt:If tag="BlogID" eq="2">
<mt:setvarblock name="extra_path">uploads/<$mt:date format="%Y/%m/%d"$></mt:setvarblock>
<mt:Else>
<mt:setvar name="extra_path" value="uploads">
</mt:If>

という感じです。これでデフォルトのアップロード先が設定されます。

しかし、アップロードの際にフォルダ(ウェブページで設定したフォルダ)を選択すると、せっかく設定したアップロード先が消えてしまい、フォルダ名のみとなってしまいます。これではそのフォルダに属すウェブページの html ファイルと同じディレクトリに画像がアップロードされてしまい、予めアップロード先を設定した意味がありません。

フォルダを選択時に、アップロード用のフォルダを追加することもできますが、当然ウェブページのフォルダの一覧にも追加されてしまいますので、フォルダの管理が煩雑になってしまいます。

また、フォルダを選択した後にパス欄に追記してもいいのですが、毎回入力するのも面倒ですし、タイプミスにより予定外のディレクトリが生成されてしまうことも考えられます。そもそも毎回入力することを省略するためのデフォルト設定ですし。

そこで、フォルダを選択しても設定したアップロード先ディレクトリを残して、”uploads/フォルダパス” などとなるようにカスタマイズしてみました。

asset_upload.tmpl の170行目辺り。

path[ 0 ] = path[ 0 ].replace( /^\//, '' );

ここを書き替えます。

uploads/フォルダ名 とする場合は

path[ 0 ] = 'uploads/' + path[ 0 ].replace( /^\//, '' );

フォルダ名/uploads とする場合は

path[ 0 ] = path[ 0 ].replace( /^\//, '' ) + 'uploads';

フォルダ名/uploads/年/月/日 とする場合は

path[ 0 ] = path[ 0 ].replace( /^\//, '' ) + 'uploads/<$mt:date format="%Y/%m/%d"$>';

という具合です。

<mt:If tag="BlogID" eq="2">
path[ 0 ] = path[ 0 ].replace( /^\//, '' ) + 'uploads/<$mt:date format="%Y/%m/%d"$>';
<mt:Else>
path[ 0 ] = path[ 0 ].replace( /^\//, '' ) + 'uploads';
</mt:If>

のようにして、ブログ ID で振り分けることも可能です。

近年は WordPress がメインで Movable Type を使うことは少なくなりましたが、最近 Movable Type を使う案件があり、過去の記録を引っ張りだしてみました。