Movable Typeのブログ記事で未使用のアイテム一覧を表示する

Movable Typeのブログ記事で未使用のアイテム一覧を表示する

Posted at November 17,2010 1:55 AM
Tag:[Asset, MovableType, TemplateTag]

Movable Typeのテンプレートを使って、ブログ記事で未使用のアイテムを表示するTipsです。

1.サンプル

あるブログに次のように4つのアイテム(画像)を登録しているものとします。

アイテム一覧

このアイテムのうち、2つのアイテムをブログ記事で使用しています。

ブログ記事に登録しているアイテム

この状態で、2項に示すサブテンプレートを利用すれば、ブログ記事で使っていないアイテム一覧をリストすることができます。

アイテム一覧

2.サブテンプレート

利用するサブテンプレートは次のようになります。

<mt:Assets type="image">
  <mt:AssetID setvar="key" />
  <mt:AssetLabel setvar="value" />
  <mt:SetVar name="asset_list{$key}" value="$value" />
</mt:Assets>
<mt:Entries>
  <mt:EntryAssets type="image">
    <mt:AssetID setvar="asset_id" />
    <mt:GetVar name="delete(asset_list)" key="$asset_id" setvar="tmp" />
  </mt:EntryAssets>
</mt:Entries>
<mt:loop name="asset_list">
  <mt:if name="__first__">
<ul>
  </mt:if>
  <li><mt:GetVar name="__value__" /></li>
  <mt:if name="__last__">
</ul>
  </mt:if>
</mt:loop>

以下、サブテンプレートの解説です。

まず、最初のMTAssetsタグに「type="image"」を設定し、画像のアイテム一覧のハッシュを生成します。MTAssetsタグブロック内部で、アイテム情報をハッシュ変数asset_listに保存します。ハッシュのキーがアイテムID、ハッシュの値がアイテムの名前になります。

<mt:Assets type="image">
  <mt:AssetID setvar="key" />
  <mt:AssetLabel setvar="value" />
  <mt:SetVar name="asset_list{$key}" value="$value" />
</mt:Assets>

次のMTEntriesタグで、ブログ記事で使っているアイテムを、先程作成したハッシュから削除します。ハッシュから削除するには、MTGetVarタグとnameモディファイアにdelete関数を使って対象のハッシュ変数を指定し、keyモディファイアに削除対象のハッシュキーを設定しますが、deleteした時点で削除対象のハッシュの値が出力されるので、setvarモディファイアで変数tmpにおいやり、画面に表示しないようにします。

<mt:Entries>
  <mt:EntryAssets type="image">
    <mt:AssetID setvar="asset_id" />
    <mt:GetVar name="delete(asset_list)" key="$asset_id" setvar="tmp" />
  </mt:EntryAssets>
</mt:Entries>

最後のMTLoopタグで、ハッシュの一覧を出力します。ここで出力されたアイテムがブログ記事で使われなかったものになります。

<mt:loop name="asset_list">
  <mt:if name="__first__">
<ul>
  </mt:if>
  <li><mt:GetVar name="__value__" /></li>
  <mt:if name="__last__">
</ul>
  </mt:if>
</mt:loop>

もっと簡単に振り分ける方法があると思いますし、本来は管理画面で実現すべきなのですが、とりあえず1アイデアとして展開しておきます。

関連記事
トラックバックURL


コメント

ここら辺は、ListingFrameworkにチョー期待しています。
DB内に情報は持ってるようなので、プラグインで表示項目拡張すりゃ、一発ですよね。
早く仕様公開にならないかな・・・

[1] Posted by oscar logo : November 17, 2010 9:20 AM

>oscarさん
こんにちは。
コメントありがとうございます&テーマ入賞おめでとうございます!
たしかにListingFrameworkで実現できそうな感じですね~。

[2] Posted by yujiro logo : November 18, 2010 12:30 PM

いつも参考にさせていただいております。
お尋ねします。

こちらの未使用アイテムですが、日本語ファイル名のものは表示されますか。
私の手元では表示されなかったので、一応ご確認いただければ幸いです。
日本語の場合は、少し扱いが変わるのかもしれませんが。

[3] Posted by mayona : January 5, 2011 5:35 PM

お尋ねした内容に誤りがありました。
日本語、英語は関係なく、画像が使われている記事開き、
直接画像ソースを消し、保存した場合の画像が「使われていないリスト」に載らないような気がします。

[4] Posted by mayona : January 5, 2011 6:49 PM

>mayonaさん
こんばんは。
ご質問の件ですが、「直接画像ソースを消し」というのは、「本文フィールドに埋め込まれている画像のimg要素を消した場合」のことを指してますでしょうか。

このサブテンプレートでは記事編集画面の右下にある「ブログ記事アイテム」エリアの情報を元に収集しています。本文フィールドに埋め込まれている画像のimg要素を消しただけでは「ブログ記事アイテム」エリアから画像は削除されないので、「『使われていないリスト』に載らない」というのは、このサブテンプレートとしては正しい動作になります。

「ブログ記事アイテム」エリアを操作して画像を削除すれば(他の記事でその画像が使われていなければ)「使われていないリスト」に載ると思います。
それではよろしくお願い致します。

[5] Posted by yujiro logo : January 5, 2011 11:11 PM

質問内容をご理解いただきありがとうございます。
ご認識に相違ありません。
なるほど、「ブログ記事アイテム」エリアの情報を取得しているのですね。
確かに画像を使っているの記事の画像ソースを消すと、アイテムの部分が×になって画像がない表示になり、それを消して保存し直す事でこちらのソースにも反映されるようになりました。
スッキリしました。

直接ソースから画像を削除した場合にも「未使用」としてリストさせるには、
どういった感じで書けば良いのでしょうか。。
こちらのソースを利用する形では、難しいでしょうか。

[6] Posted by mayona : January 7, 2011 10:13 AM

>mayonaさん
こんばんは。
念のため確認ですが、アイテムをブログ記事から削除せずに「未使用」として表示させたいのは、「未使用」というよりは「ブログ記事本文に設定もれ」として表示させたいという意味でしょうか。

[7] Posted by yujiro logo : January 8, 2011 2:41 AM

ありがとうございます。
レス遅れてすみません。

「未使用」か「設定もれ」かですが、
こちらのソースはMTEntryAssetsによって出力していますので、結果は「設定もれ」のものが表示されている認識で正しいとすれば、私の方は「未使用」になります。
といっても、記事編集画面で未使用のものを表示しても大量に出てくるだけなので、意味がないのですが、
そもそもブログ記事アイテムの機能はあたかも現在使っているもののように見受けられ、実際には使っているのもではなく、今までの使用履歴に近いかなと。(記事編集画面から直接削除した際はブログ記事アイテムから消えないので)

なので、直接削除した場合でもブログ記事アイテムから削除されれば、
単に使われているものだけを表示する見た目になり、結果として使用/未使用が明確になるのかなと思いました。
その過程で、こちらのソースが流用できないかなと思った次第です。
仮にこの機能をMTに付与するとすれば「ブログ記事アイテム」ではなく「ブログ記事使用中アイテム」かなと思います。

長くなってすみません。

[8] Posted by mayona : January 11, 2011 10:34 AM

>mayonaさん
こんばんは。
主旨は理解致しました。
ということで、以下のURLでエントリー致しましたのでご確認ください。
http://www.koikikukan.com/archives/2011/01/14-025555.php
それではよろしくお願い致します。

[9] Posted by yujiro logo : January 14, 2011 3:45 AM
コメントする
greeting

*必須

*必須(非表示)


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

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

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

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