<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<atom:link rel="self" type="application/rss+xml" href="http://www.zelazny.mydns.jp/feeds/rss.xml" />
<title>WolaWola</title>
<link>http://www.zelazny.mydns.jp/</link>
<description>興味を持ったコトを、ダラダラと綴るサイトです。MovableTypeのカスタマイズやグラビアアイドル・仮面ライダー・ホラー小説に映画など興味の対象はバラバラですが、MTのプラグイン情報でここに来る方が多いようです。</description>
<language>ja</language>
<managingEditor>naoaki011@gmail.com (Naoaki Onozaki)</managingEditor>
<webMaster>naoaki011@gmail.com (Naoaki Onozaki)</webMaster>
<copyright>Copyright 2012</copyright>
<lastBuildDate>Sun, 29 Apr 2012 17:36:04 +0900</lastBuildDate>
<generator>http://www.sixapart.com/movabletype/</generator>
<docs>http://www.rssboard.org/rss-specification</docs>
<item>
<title>DynamicMTMLを利用したページ分割処理</title>
<description><![CDATA[<p>アーカイブのページ分割には今まで、<a href="http://www.movabletype.jp/documentation/designer/pagination.html" title="ダイナミックパブリッシングでのページ分割 : Movable Type 5 ドキュメント">ダイナミックパブリッシングを利用したページ分割</a>や、<a href="http://www.movabletype.org/documentation/designer/pagination-static.html" title="Pagination for Static Templates | MovableType.org - Home of the MT Community">検索CGIを使ったページ分割</a>、それに<a href="http://powercms.alfasado.net/kinou/pager.html" title="ページ分割 | Power CMS for MT Ver.2（Movable Typeベースの多機能CMS）">Pager</a>や<a href="http://www.skyarc.co.jp/engineerblog/entry/2642.html" title="静的ページ用ページ分割プラグイン:PageBute - MTエンジニアブログ - スカイアークシステム">PageBute</a>などのプラグインを利用したページ分割などがありました。あ、あと実は未だに使っている<a href="http://www.nonplus.net/software/mt/MTPaginate.htm?page=all" title="MT Extensions: MTPaginate 1.28">MTPaginate</a>なんてのもありましたね。</p>
<p>しかしこれらは、それぞれに長所と共に短所があり、必ずしもどれがベストな選択とは言えないところがありました。
ダイナミックパブリッシングはPHPによる動的生成、検索CGIはPerlによる動的生成であり、それぞれ表示するたびにそれなりの負荷がかかります。
それに対して、プラグインによるアーカイブ生成は、表示はスタティックファイルなので高速ですが、再構築時にページ数に応じて負荷が高くなり、継続的にコンテンツを投入されるサイトでの、カテゴリーアーカイブを分割するような場合には、TimeOutエラーなどで処理できなくなる確率が高くなります。</p>
<p>DynamicMTMLを利用することで、再構築時の負荷もが低いまま、表示時の負荷もそれほど高くならない、ページ分割処理が可能になります。（最近はほとんどこの方法でページ分割をこなしてる気がする）</p>
<h2>アーカイブを作成</h2>
<p>例として、カテゴリーアーカイブとアイテム一覧をアーカイブとして出力するようにしてみます。</p>
<h3>カテゴリーアーカイブのページ分割</h3>
<p>DynamicMTMLでのアーカイブは、スタティックなHTMLファイルとして出力されます。そのHTML内に書かれたMTMLを動的に処理することで、内容を出し分けます。</p>
<p>以下カテゴリーアーカイブのページング処理部分の内容です。ヘッダやフッタ、その他装飾のスタティックな部分は省略してます。MTEntriesループ内で表示されるものは、「ブログ記事概要」テンプレートモジュールの内容になります。
URLの後ろに「?p=2」などとすることで2ページ以降が表示されます。MTQueryというDynamicMTMLのタグでkey指定して受け取っているので、そこを変更すれば「?page=2」等に変更もできます。</p>
<pre class="code">クエリで受け取ったページからもろもろの<strong>変数設定</strong>する部分<br />
&lt;&lt;MTRawMTML&gt;MTSetVar&lt;/MTRawMTML&gt; name=&quot;blog_id&quot; value=&quot;&lt;$MTBlogID$&gt;&quot;&gt;
&lt;&lt;MTRawMTML&gt;MTSetVar&lt;/MTRawMTML&gt; name=&quot;total_entry&quot; value=&quot;&lt;$MTCategoryCount$&gt;&quot;&gt;
&lt;MTDynamicMTML&gt;
&lt;MTSetVar name=&quot;limit&quot; value=&quot;20&quot;&gt;
&lt;MTQuery key=&quot;p&quot; setvar=&quot;current_page&quot;&gt;
&lt;MTUnless name=&quot;current_page&quot;&gt;&lt;MTSetVar name=&quot;current_page&quot; value=&quot;1&quot;&gt;&lt;/MTUnless&gt;
&lt;MTVar name=&quot;current_page&quot; op=&quot;*&quot; value=&quot;$limit&quot; setvar=&quot;last_entry&quot;&gt;
&lt;MTVar name=&quot;last_entry&quot; op=&quot;-&quot; value=&quot;$limit&quot; setvar=&quot;first_entry&quot;&gt;
&lt;MTVar name=&quot;total_entry&quot; op=&quot;/&quot; value=&quot;$limit&quot; regex_replace=&quot;/\.\d+\$/&quot;,&quot;&quot; setvar=&quot;total_pages&quot;&gt;
&lt;MTIf name=&quot;total_entry&quot; op=&quot;mod&quot; value=&quot;$limit&quot;&gt;&lt;MTSetVar name=&quot;total_pages&quot; op=&quot;++&quot;&gt;&lt;/MTIf&gt;
&lt;/MTDynamicMTML&gt;<br />
ココが<strong>MTEntriesループ</strong>部分<br />
&lt;&lt;MTRawMTML&gt;MTEntries&lt;/MTRawMTML&gt; include_blogs=&quot;$blog_id&quot; categories=&quot;&lt;$MTCategoryLabel$&gt;&quot; limit=&quot;$limit&quot; offset=&quot;$first_entry&quot;&gt;
&lt;MTRawMTML&gt;&lt;$MTInclude module=&quot;ブログ記事概要&quot; blog_id=&quot;$blog_id&quot;$&gt;&lt;/MTRawMTML&gt;
&lt;MTML tag=&quot;/MTEntries&quot;&gt;<br />
ココから<strong>Pager</strong>用コード<br />
&lt;MTDynamicMTML&gt;
&lt;MTIf name=&quot;total_pages&quot; gt=&quot;1&quot;&gt;
&lt;MTUnless name=&quot;current_page&quot; eq=&quot;1&quot;&gt;&lt;a href=&quot;&lt;$MTCurrentArchiveURL$&gt;?p=&lt;$MTVar name=&quot;current_page&quot; op=&quot;--&quot;$&gt;&quot;&gt;前へ&lt;/a&gt;&lt;/MTUnless&gt;
&lt;MTFor var=&quot;x&quot; from=&quot;1&quot; to=&quot;$total_pages&quot;&gt;
&lt;MTIf name=&quot;x&quot; eq=&quot;1&quot;&gt;
&lt;MTIf name=&quot;current_page&quot; eq=&quot;1&quot;&gt;
&lt;span class=&quot;current&quot;&gt;1&lt;/span&gt;
&lt;MTElse&gt;
&lt;a href=&quot;&lt;$MTCurrentArchiveURL$&gt;&quot;&gt;&lt;$MTVar name=&quot;x&quot;$&gt;&lt;/a&gt;
&lt;/MTIf&gt;
&lt;MTElse&gt;
&lt;MTIf name=&quot;current_page&quot; eq=&quot;$x&quot;&gt;
&lt;span class=&quot;current&quot;&gt;&lt;$MTVar name=&quot;x&quot;$&gt;&lt;/span&gt;
&lt;MTElse&gt;
&lt;a href=&quot;&lt;$MTCurrentArchiveURL$&gt;?p=&lt;$MTVar name=&quot;x&quot;$&gt;&quot;&gt;&lt;$MTVar name=&quot;x&quot;$&gt;&lt;/a&gt;
&lt;/MTIf&gt;
&lt;/MTIf&gt;
&lt;/MTFor&gt;
&lt;MTUnless name=&quot;current_page&quot; eq=&quot;$total_pages&quot;&gt;&lt;a href=&quot;&lt;$MTCurrentArchiveURL$&gt;?p=&lt;$MTVar name=&quot;current_page&quot; op=&quot;++&quot;$&gt;&quot;&gt;次へ&lt;/a&gt;&lt;/MTUnless&gt;
&lt;/MTIf&gt;
&lt;/MTDynamicMTML&gt;</pre>
<p>first_entryはMTEntriesに渡すオフセット値になっていて、この値に1を足すとそのページに表示される最初の記事が、記事全体での何番目かという数字になります。last_entryはそのページに表示される最後の記事が、全体で何番目の記事かという数字になりますが、厳密には最終ページなどで分割数に満たない時はこの数字より小さくなります。
よくある「21ページ中7ページ（121～140）」の様な表示は以下のコードで表示できます。</p>
<pre class="code">&lt;MTDynamicMTML&gt;
&lt;$MTVar name=&quot;total_pages&quot;$&gt;ページ中&lt;$MTVar name=&quot;current_page&quot;$&gt;ページ（&lt;$MTVar name=&quot;first_entry&quot; op=&quot;++&quot;$&gt;～&lt;MTIf name=&quot;current_page&quot; eq=&quot;$total_pages&quot;&gt;&lt;$MTVar name=&quot;total_entry&quot;$&gt;&lt;MTElse&gt;&lt;$MTVar name=&quot;last_entry&quot;$&gt;&lt;/MTIf&gt;）
&lt;/MTDynamicMTML&gt;</pre>
<h3>アイテム一覧ページ</h3>
<p>さてアイテムの場合はと言うと、基本的にはブログ記事と一緒で、こんな感じになります。assets_per_rowモディファイアなどと組み合わせると、それっぽいアーカイブページが作成できるものと思います。</p>
<pre class="code">クエリで受け取ったページからもろもろの<strong>変数設定</strong>する部分<br />
&lt;&lt;MTRawMTML&gt;MTSetVar&lt;/MTRawMTML&gt; name=&quot;blog_id&quot; value=&quot;&lt;$MTBlogID$&gt;&quot;&gt;
&lt;&lt;MTRawMTML&gt;MTSetVar&lt;/MTRawMTML&gt; name=&quot;total_asset&quot; value=&quot;&lt;$MTAssetCount$&gt;&quot;&gt;
&lt;MTDynamicMTML&gt;
&lt;MTSetVar name=&quot;limit&quot; value=&quot;20&quot;&gt;
&lt;MTQuery key=&quot;p&quot; setvar=&quot;current_page&quot;&gt;
&lt;MTUnless name=&quot;current_page&quot;&gt;&lt;MTSetVar name=&quot;current_page&quot; value=&quot;1&quot;&gt;&lt;/MTUnless&gt;
&lt;MTVar name=&quot;current_page&quot; op=&quot;*&quot; value=&quot;$limit&quot; setvar=&quot;last_asset&quot;&gt;
&lt;MTVar name=&quot;last_asset&quot; op=&quot;-&quot; value=&quot;$limit&quot; setvar=&quot;first_asset&quot;&gt;
&lt;MTVar name=&quot;total_asset&quot; op=&quot;/&quot; value=&quot;$limit&quot; regex_replace=&quot;/\.\d+\$/&quot;,&quot;&quot; setvar=&quot;total_pages&quot;&gt;
&lt;MTIf name=&quot;total_asset&quot; op=&quot;mod&quot; value=&quot;$limit&quot;&gt;&lt;MTSetVar name=&quot;total_pages&quot; op=&quot;++&quot;&gt;&lt;/MTIf&gt;
&lt;/MTDynamicMTML&gt;<br />
ココが<strong>MTAssetsループ</strong>部分<br />
&lt;&lt;MTRawMTML&gt;MTAssets&lt;/MTRawMTML&gt; include_blogs=&quot;$blog_id&quot; sort_by=&quot;created_on&quot; lastn=&quot;$limit&quot; offset=&quot;$first_asset&quot;&gt;
&lt;MTRawMTML&gt;&lt;$MTAssetThumnbnailLink width=&quot;200&quot;$&gt;&lt;/MTRawMTML&gt;
&lt;MTML tag=&quot;/MTAssets&quot;&gt;<br />
ココから<strong>Pager</strong>用コード<br />
&lt;MTDynamicMTML&gt;
&lt;MTIf name=&quot;total_pages&quot; gt=&quot;1&quot;&gt;
&lt;MTUnless name=&quot;current_page&quot; eq=&quot;1&quot;&gt;&lt;a href=&quot;&lt;$MTCurrentArchiveURL$&gt;?p=&lt;$MTVar name=&quot;current_page&quot; op=&quot;--&quot;$&gt;&quot;&gt;前へ&lt;/a&gt;&lt;/MTUnless&gt;
&lt;MTFor var=&quot;x&quot; from=&quot;1&quot; to=&quot;$total_pages&quot;&gt;
&lt;MTIf name=&quot;x&quot; eq=&quot;1&quot;&gt;
&lt;MTIf name=&quot;current_page&quot; eq=&quot;1&quot;&gt;
&lt;span class=&quot;current&quot;&gt;1&lt;/span&gt;
&lt;MTElse&gt;
&lt;a href=&quot;&lt;$MTCurrentArchiveURL$&gt;&quot;&gt;&lt;$MTVar name=&quot;x&quot;$&gt;&lt;/a&gt;
&lt;/MTIf&gt;
&lt;MTElse&gt;
&lt;MTIf name=&quot;current_page&quot; eq=&quot;$x&quot;&gt;
&lt;span class=&quot;current&quot;&gt;&lt;$MTVar name=&quot;x&quot;$&gt;&lt;/span&gt;
&lt;MTElse&gt;
&lt;a href=&quot;&lt;$MTCurrentArchiveURL$&gt;?p=&lt;$MTVar name=&quot;x&quot;$&gt;&quot;&gt;&lt;$MTVar name=&quot;x&quot;$&gt;&lt;/a&gt;
&lt;/MTIf&gt;
&lt;/MTIf&gt;
&lt;/MTFor&gt;
&lt;MTUnless name=&quot;current_page&quot; eq=&quot;$total_pages&quot;&gt;&lt;a href=&quot;&lt;$MTCurrentArchiveURL$&gt;?p=&lt;$MTVar name=&quot;current_page&quot; op=&quot;++&quot;$&gt;&quot;&gt;次へ&lt;/a&gt;&lt;/MTUnless&gt;
&lt;/MTIf&gt;
&lt;/MTDynamicMTML&gt;</pre>
<h2>他にも使い方が沢山</h2>
<p>ダイナミックパブリッシングで動作するループタグで、limit指定やoffset指定が使えるものなら、応用可能です。
例えば、SearchEntriesを使うことで、簡単に複雑なクエリを処理する（DynamicMTMLのSearchEntriesタグは、フィールドの部分一致で指定が可能です）検索ページを作成できます。</p>
<p>この方法での負荷の発生は、主に表示時にダイナミックパブリッシング部分を動的に生成する部分になるはずです。
パラメータ部分に複雑ななクエリが必要な場合は、パラメータ生成までを静的に済ませられないかを検討したり、ブロック表示部の処理が複雑な場合は、別ファイルとして処理させておく等の手段が有効です。
単純なブロック表示の場合なら、さほど負荷は発生しませんので、そのページがダイナミックパブリッシングで処理されていると気づかないこともあります。</p>]]></description>
<link>http://www.zelazny.mydns.jp/archives/002855.php?utm_source=WolaWolaRSS&amp;utm_medium=rss</link>
<guid>http://www.zelazny.mydns.jp/archives/002855.php</guid>
<category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
<category domain="http://www.sixapart.com/ns/types#tag">DynamicMTML</category>
<category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
<category domain="http://www.sixapart.com/ns/types#tag">Power CMS for MT</category>
<category domain="http://www.sixapart.com/ns/types#tag">SearchEntries</category>
<category domain="http://www.sixapart.com/ns/types#tag">ページ分割</category>
<pubDate>Sun, 29 Apr 2012 17:36:04 +0900</pubDate>
</item>
<item>
<title>コード上でカテゴリー（ORフォルダ）をuser_customでのソートにするには</title>
<description><![CDATA[<p>とある案件用に、カスタムフィールドプラグイン（あるウェブサイト上のフォルダを、管理画面の並び順（sort_by="user_custom"）に選択肢として出力する）を作ってみました。</p>
<p>MTタグ上では、「sort_by=&quot;user_custom&quot;」を指定（というかSubCategoriesのデフォルトになりましたね）すれば良いわけですが、プラグインコード内で、以下のように書いてもまるで並び替わる様子がありませんでした。</p>
<pre class="code" title="うまく行かなかったコード">my @folders = MT-&gt;model( 'folder' )-&gt;load(
            {   blog_id =&gt; $blog_id,
                parent  =&gt; '0'
            },
            {   'sort' =&gt; 'user_custom',
                direction =&gt; 'ascend',
            }
        );</pre>
<p>そういえば、この並び替えデータってどこに保存されてるんだっけと、「mt_category」や「mt_category_meta」を見てみても、特に拡張されていません。ありそうなところを一通り見ていって、やっと場所がわかりました。「mt_blog_meta」に「category_order」や「folder_order」が保存されてました。値を見るとカンマ区切りのカテゴリーIDのようです。</p>
<p>コレをどうするんだか解らないので、やむを得ず、「MT::Template::Tags::Category」のコードを読んでみていくと、なんかおかしな事書いてあります。</p>
<pre class="code" title="lib/MT/Template/Tags/Category.pmの586行目">        @cats = $class-&gt;load(
            {   blog_id =&gt; $ctx-&gt;stash('blog_id'),
                parent  =&gt; '0'
            },
            {   (     ( 'user_custom' eq $sort_by )
                    ? ( sort =&gt; 'label' )
                    : ( sort =&gt; $sort_by )
                ),
                direction =&gt; $sort_order,
            }
        );</pre>
<p>$sort_byは指定されてるsort_byなわけですが、何故かそれが「user_custom」の時に、「sort =&gt; '<strong>label</strong>'」を設定してます。え、なんで「label」とか思ったわけですが、その後を読んでいくとやっと理由がわかりました。</p>
<pre class="code" title="lib/MT/Template/Tags/Category.pmの632行目">    elsif ( 'user_custom' eq $sort_by ) {
        my $blog = $ctx-&gt;stash('blog');
        my $meta = $class_type . '_order';
        my $text = $blog-&gt;$meta || '';
        @$cats = MT::Category::_sort_by_id_list( $text, \@cats );
        @$cats = reverse @$cats if $sort_order eq 'descend';
    }</pre>
<p>あぁなるほど、「sort_by=&quot;user_custom&quot;」の場合は別に処理するわけですね。それでどうやら先ほど見つけた「category_order」を、Categoryオブジェクト（上の@cats）と一緒に、MT::Category::_sort_by_id_listに渡すことで、並べ替えが行われるみたいです。</p>
<pre class="code">my @folders = MT-&gt;model( 'folder' )-&gt;load(
            {   blog_id =&gt; $blog_id,
                parent  =&gt; '0'
            }
        );
my $meta = 'folder_order';
my $text = $blog-&gt;$meta || '';
@$folders = MT::Category::_sort_by_id_list( $text, \@folders );
@$folders = reverse @$folders if $sort_order eq 'descend';
</pre>
<p>こうすりゃいいってことですね。　うまくいきました。</p>]]></description>
<link>http://www.zelazny.mydns.jp/archives/002861.php?utm_source=WolaWolaRSS&amp;utm_medium=rss</link>
<guid>http://www.zelazny.mydns.jp/archives/002861.php</guid>
<category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
<category domain="http://www.sixapart.com/ns/types#tag">MT</category>
<category domain="http://www.sixapart.com/ns/types#tag">sort_order</category>
<category domain="http://www.sixapart.com/ns/types#tag">user_custom</category>
<category domain="http://www.sixapart.com/ns/types#tag">カスタムフィールド</category>
<category domain="http://www.sixapart.com/ns/types#tag">カテゴリー</category>
<category domain="http://www.sixapart.com/ns/types#tag">フォルダ</category>
<category domain="http://www.sixapart.com/ns/types#tag">プラグイン</category>
<category domain="http://www.sixapart.com/ns/types#tag">並べ替え</category>
<pubDate>Sun, 29 Apr 2012 16:34:01 +0900</pubDate>
</item>
<item>
<title>ブログ記事投稿ユーザーのコンテクスト</title>
<description><![CDATA[<p>現在進行中の案件では、<a href="http://www.movabletype.jp/documentation/community/" title="コミュニティ・ソリューション">コミュニティ・ソリューション</a>をベースに構築を行なってます。</p>
<p>ユーザーに対してカスタムフィールドで情報を追加してやって、それを記事一覧や、コメント一覧で表示しようと思っても、実はそれを行うブロックタグはMTには存在しません。</p>
<h2>ユーザーコンテクストを生成するプラグイン</h2>
<p>ブログ記事の投稿ユーザーに関するMTMLタグは「<a href="http://www.movabletype.jp/documentation/appendices/tags/entryauthor.html" title="MTEntryAuthor | テンプレートタグリファレンス">&lt;$MTEntryAuthor$&gt;</a>」「<a href="http://www.movabletype.jp/documentation/appendices/tags/entryauthordisplayname.html" title="MTEntryAuthorDisplayName | テンプレートタグリファレンス">&lt;$MTEntryAuthorDisplayName$&gt;</a>」「<a href="http://www.movabletype.jp/documentation/appendices/tags/entryauthoremail.html" title="MTEntryAuthorEmail | テンプレートタグリファレンス">&lt;$MTEntryAuthorEmail$&gt;</a>」「<a href="http://www.movabletype.jp/documentation/appendices/tags/entryauthorid.html" title="MTEntryAuthorID | テンプレートタグリファレンス">&lt;$MTEntryAuthorID$&gt;</a>」「<a href="http://www.movabletype.jp/documentation/appendices/tags/entryauthorlink.html" title="MTEntryAuthorLink | テンプレートタグリファレンス">&lt;$MTEntryAuthorLink$&gt;</a>」「<a href="http://www.movabletype.jp/documentation/appendices/tags/entryauthornickname.html" title="MTEntryAuthorNickname | テンプレートタグリファレンス">&lt;$MTEntryAuthorNickName$&gt;</a>」「<a href="http://www.movabletype.jp/documentation/appendices/tags/entryauthorurl.html" title="MTEntryAuthorURL | テンプレートタグリファレンス">&lt;$MTEntryAuthorURL$&gt;</a>」「<a href="http://www.movabletype.jp/documentation/appendices/tags/entryauthorusername.html" title="MTEntryAuthorUsername | テンプレートタグリファレンス">&lt;$MTEntryAuthorUsername$&gt;</a>」「<a href="http://www.movabletype.jp/documentation/appendices/tags/entryauthoruserpic.html" title="MTEntryAuthorUserpic | テンプレートタグリファレンス">&lt;$MTEntryAuthorUserpic$&gt;</a>」「<a href="http://www.movabletype.jp/documentation/appendices/tags/entryauthoruserpicasset.html" title="MTEntryAuthorUserpicAsset | テンプレートタグリファレンス">&lt;MTEntryAuthorUserpicAsset&gt;</a>」「<a href="http://www.movabletype.jp/documentation/appendices/tags/entryauthoruserpicurl.html" title="MTEntryAuthorUserpicURL | テンプレートタグリファレンス">&lt;$MTEntryAuthorUserpicURL$&gt;</a>」です。沢山あるのに大半はファンクションタグであり、ブロックタグとして登録ユーザーのコンテクストを生成するタグは存在しません。
「<a href="http://www.koikikukan.com/archives/2011/12/02-005555.php" title="Movable Typeでブログ記事投稿ユーザーの情報を取得するEntryAuthorDataプラグイン: 小粋空間">Movable Typeでブログ記事投稿ユーザーの情報を取得するEntryAuthorDataプラグイン: 小粋空間</a>」を使うことで、ブログ記事投稿ユーザーのコンテクストが生成できます。</p>
<p>記事内には、MTタグで投稿ユーザーのコンテクストを生成する方法として、以下が書いてありますが、コレは必ずしもうまくいかないのではと思います。</p>
<blockquote cite="http://www.koikikukan.com/archives/2011/12/02-005555.php" title="[Movable Typeでブログ記事投稿ユーザーの情報を取得するEntryAuthorDataプラグイン: 小粋空間]から、2012年4月22日 18:56:31に引用" class="blockquote"><p class="quote-inner">&lt;mt:Entries&gt;
&nbsp;&lt;$mt:EntryAuthorDisplayName setvar=&quot;name&quot;$&gt;
&nbsp;&lt;mt:Authors display_name=&quot;$name&quot;&gt;
&nbsp;&nbsp;&lt;$mt:AuthorBasename$&gt;
&nbsp;&lt;/mt:Authors&gt;
&lt;/mt:Entries&gt;</p></blockquote><p class="cite-info">[<cite><a href="http://www.koikikukan.com/archives/2011/12/02-005555.php" title="引用元" rel="external">Movable Typeでブログ記事投稿ユーザーの情報を取得するEntryAuthorDataプラグイン: 小粋空間</a>:(2012年4月22日 18:56:31 引用)</cite>]</p>
<p>コレが成り立つためには、<strong>EntryAuthorDisplayName</strong>が<em>NULL</em>を許容せずに、かつ<em>unique</em>である必要があるものと思いますが、同一の表示名を登録可能なようですし、説明文にもあるように入力しないことも可能なようです。</p>
<blockquote cite="http://www.movabletype.jp/documentation/appendices/tags/entryauthordisplayname.html" title="[MTEntryAuthorDisplayName | テンプレートタグリファレンス]から、2012年4月22日 19:19:00に引用" class="blockquote"><p class="quote-inner">セキュリティ上の理由により、ユーザー設定で表示名の<strong>設定が無い場合</strong>、何も表示されません。</p></blockquote><p class="cite-info">[<cite><a href="http://www.movabletype.jp/documentation/appendices/tags/entryauthordisplayname.html" title="引用元" rel="external">MTEntryAuthorDisplayName | テンプレートタグリファレンス</a>:(2012年4月22日 19:19:00 引用)</cite>]</p>
<p>さてコメント投稿ユーザーのコンテクストは以下のプラグインで取得できます。
「<a href="http://plugins.movabletype.org/commentauthorcontext/" title="Comment Author Context | MovableType.org - Home of the MT Community">Comment Author Context | MovableType.org - Home of the MT Community</a>」</p>
<p>入手元が「plugins.movabletype.org」だけなので、そのうち入手できなくなるかも知れませんね。</p>
<p>また詳細は不明（詳しい追跡調査を行なっていませんが）なのですが、どうもこのプラグインを入れると、パスワードの変更に影響が出るようですし、「ユーザー」メニューを開く操作もおかしな動きになってしまうようです。特に後の方は、MT5.1への対応の問題ではないでしょうか。（最終的には後述の方法を使いプラグインは使用しなくなりました。）</p>
<h2>ダイナミックパブリッシングでうまくいかない</h2>
<p>さて、とりあえず、プラグインで処理する方向で進めていたのですが、途中でアーカイブの分割処理（DynamicMTMLによるアーカイブのページ分割・これは後日別エントリーにします）や、コメント欄でのログイン中のカレントユーザーの表示部分など、幾つかダイナミックパブリッシングで処理する箇所が出てきて、上記プラグインで対応できない部分があることが発覚しました。</p>
<p>まぁ、ダイナミックパブリッシングプラグインを書くという選択肢もあるわけですが、もう一度標準のMTタグだけで同じ処理ができないか考えてみました。
ユーザーのコンテクストはやはり、<a href="http://www.movabletype.jp/documentation/appendices/tags/authors.html" title="MTAuthors | テンプレートタグリファレンス">MTAuthors</a>を使って出力する以外なさそうです。
またMTAuthorsには残念ながら、特定のユーザーを指定するのにid指定を行うなどは出来ないようで、display_name指定で読む以外の方法はなさそうでした。
という訳で、MTAuthorsでdispaly_name（＋追加指定）を指定し、ユーザー候補を読み込んだ後で、ユーザーのID（ブログ記事投稿者のIDやコメント投稿者のIDを取得するタグは存在する）により、対象ユーザーを確定する方法を取ることにしました。まぁ今回の案件では表示名の設定が必須になるように、登録画面に制限を加えていることもあり、display_nameである程度の絞り込みが出来るわけですが、これを指定しない状態で1000ユーザーや10000ユーザーを対象とした場合に、実用に耐えられるかはチョット問題ありそうですね。やはり最初のブロックタグである程度件数が絞り込めてないと、スケールアップしていった時に対応できなくなりそうです。（そういや、このモディファイア「display_name=""」とした場合は表示名を設定していないユーザーのみの絞込みになるんだろうか？）</p>
<pre class="code">&lt;MTEntryAuthorID setvar=&quot;author_id&quot;&gt;
&lt;MTEntryAuthorDisplayName setvar=&quot;display_name&quot;&gt;
&lt;MTAuthors need_entry=&quot;1&quot; display_name=&quot;$display_name&quot;&gt;
&nbsp;&lt;MTIf tag=&quot;AuthorID&quot; eq=&quot;$author_id&quot;&gt;
&nbsp;&nbsp;&lt;$mt:AuthorBasename$&gt;
&nbsp;&lt;/MTIf&gt;
&lt;/MTAuthors&gt;</pre>
<p>こんな感じでどうにかなるのではないかと。
投稿された記事を表示するコンテクスト内で使用するものなので、少しでも対象を絞り込めるように「need_entry="1"」も指定してあります。その他ロールなど特定の条件が存在するならそれも追加したほうがよさそうですね。ここは、いかにMTAuthorsブロック内のループ回数を減らすかが、安定運用のキモになってくるはずです。</p>
<pre class="code">&lt;MTCommenterID setvar=&quot;commnter_id&quot;&gt;
&lt;MTCommentAuthor setvar=&quot;commenter_name&quot;&gt;
&lt;MTAuthors display_name=&quot;$commenter_name&quot; need_entry=&quot;0&quot; any_type=&quot;1&quot;&gt;
&nbsp;&lt;MTIf tag=&quot;AuthorID&quot; eq=&quot;$commnter_id&quot;&gt;
&nbsp;&nbsp;&lt;$mt:AuthorBasename$&gt;
&nbsp;&lt;/MTIf&gt;
&lt;/MTAuthors&gt;</pre>
<p>コメントの方も同じくこんな感じで処理できると思います。ただ、まだるっこしいですね。</p>
<h2>MT5.2への要望</h2>
<p>という訳で、MT5.2への要望です。
上記のように、実は基本的なMTタグで欠けているものがあります。MT5.1での<a href="http://www.movabletype.jp/documentation/appendices/tags/mtentryprimarycategory.html" title="MTEntryPrimaryCategory | テンプレートタグリファレンス">MTEntryPrimaryCategory</a>の様に、コレを待ち望んでいたんだというのが多々あるはずです。
ぜひ、ブログ記事の投稿ユーザーのコンテクストを生成する、<strong>MTEntryAuthorContext</strong>タグと、同じくコメントの投稿ユーザーコンテクストを生成する、<strong>MTCommnetUserContext</strong>の、MT本体への実装をご検討ください。</p>]]></description>
<link>http://www.zelazny.mydns.jp/archives/002860.php?utm_source=WolaWolaRSS&amp;utm_medium=rss</link>
<guid>http://www.zelazny.mydns.jp/archives/002860.php</guid>
<category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
<category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
<category domain="http://www.sixapart.com/ns/types#tag">MT5.2</category>
<category domain="http://www.sixapart.com/ns/types#tag">エントリー投稿者</category>
<category domain="http://www.sixapart.com/ns/types#tag">コメント投稿者</category>
<category domain="http://www.sixapart.com/ns/types#tag">コンテクスト</category>
<pubDate>Sun, 22 Apr 2012 21:07:40 +0900</pubDate>
</item>
<item>
<title>ブログ記事の本文にスニペットやmtevalなどを使っている時は注意しよう</title>
<description><![CDATA[<p>なぜ、いきなりこんな記事というのは・・・ほっといてください。</p>
<blockquote cite="http://www.movabletype.jp/documentation/appendices/modifiers/mteval.html" title="[mteval | グローバル・モディファイアリファレンス]から、2012年4月5日 20:24:19に引用" class="blockquote"><p class="quote-inner">値に 1 を設定すると、モディファイアを付与したファンクションタグの内容に含まれる Movable Type タグを展開します。
たとえば、MTEntryBody にこのグローバルフィルターを設定すると、ブログ記事本文で MTタグを使用できます。</p></blockquote><p class="cite-info">[<cite><a href="http://www.movabletype.jp/documentation/appendices/modifiers/mteval.html" title="引用元" rel="external">mteval | グローバル・モディファイアリファレンス</a>:(2012年4月5日 20:24:19 引用)</cite>]</p>
<p>これは、かなり便利な機能です。MTInclude で<a href="http://www.movabletype.jp/blog/userpic_module.html" title="プロフィール<p>画像の表示を便利に行うテンプレートモジュール | MovableType.jp">プロフィール画像モジュール</a>を使うなんて、天才的です。しかも変数としてユーザー名渡すなんてうますぎる。ただ、一箇所詰めが甘かった・・・</p>
<h2>本文が使われる場所</h2>
<p>ブログ記事の本文というのは、意識していない箇所にも使われています。
単純に公開された記事（ブログ記事テンプレート）だけではないんです。そこが要注意。
例えば今回のように「最新記事のフィードテンプレート」内には、「&lt;summary&gt;&lt;$mt:EntryExcerpt remove_html=&quot;1&quot; encode_xml=&quot;1&quot;$&gt;&lt;/summary&gt;」だけではなく、以下の記述も存在します。</p>
<pre class="code">    &lt;content type=&quot;html&quot; xml:lang=&quot;&lt;$mt:BlogLanguage ietf=&quot;1&quot;$&gt;&quot; xml:base=&quot;&lt;$mt:BlogURL encode_xml=&quot;1&quot;$&gt;&quot;&gt;
        &lt;$mt:EntryBody encode_xml=&quot;1&quot;$&gt;
        &lt;$mt:EntryMore encode_xml=&quot;1&quot;$&gt;
    &lt;/content&gt;</pre>
<p>それから<a href="http://www.movabletype.jp/documentation/appendices/tags/entryexcerpt.html" title="MTEntryExcerpt | テンプレートタグリファレンス">MTEntryExcerpt</a>も注意すべき。</p>
<blockquote cite="http://www.movabletype.jp/documentation/appendices/tags/entryexcerpt.html" title="[MTEntryExcerpt | テンプレートタグリファレンス]から、2012年4月5日 20:39:43に引用" class="blockquote"><p class="quote-inner">ブログ記事の概要に入力した内容を表示します。概要に記述がないときは、ブログ記事の本文を、ブログ記事の設定で指定した概要の文字数だけ先頭から表示します。 </p></blockquote><p class="cite-info">[<cite><a href="http://www.movabletype.jp/documentation/appendices/tags/entryexcerpt.html" title="引用元" rel="external">MTEntryExcerpt | テンプレートタグリファレンス</a>:(2012年4月5日 20:39:43 引用)</cite>]</p>
<p>ブログ記事本文から自動生成された部分に、MTタグやスニペットコードが含まれていたとか、予想外の落とし穴が待っています。しかも自動生成の概要は文字数により切り取られますので、たまたまMTタグの途中で切り取られるというケースもありえます。</p>
<p>以上のことを踏まえて、フィードなどでのEntryBodyやEntryMoreが使われている部分には、必ず本文と同じグローバルフィルターを付ける必要があります。また検索などの動的生成についても同じく対処が必要です。
本文は、ソレでいいのですが自動生成時の概要などは、対応が難しかったりします。私は極力そういう場合、MTEntryExcerptタグは使わずに、MTEntryBodyから生成させるようにしています。
例えばmetaタグのdescriptionに、MTのデフォルト設定で概要を指定したい場合（要は100文字ということです）で、本文にMTタグを使い、mteval指定している時は次のように生成させます。</p>
<pre class="code">&lt;meta name=&quot;description&quot; content=&quot;&lt;$MTEntryBody mteval=&quot;1&quot; remove_html=&quot;1&quot; trim=&quot;1&quot; strip_linefeeds=&quot;1&quot; trim_to=&quot;100+...&quot; escape=&quot;html&quot;$&gt;&quot; /&gt;</pre>
<p>この場合、remove_htmlする前に、mteval処理するのがキモです。他にもスニペットなどの処理がある場合には、ここにグローバルフィルターを追加します。一旦HTMLとして変換出力した後で、HTML要素を削除し整形し、HTMLエスケープを行なっています。</p>
<p>また、コレとは別に同じく概要で生成される部分ですが、<a href="http://www.movabletype.jp/documentation/appendices/tags/entrytrackbackdata.html" title="MTEntryTrackbackData | テンプレートタグリファレンス">MTEntryTrackbackData</a>は要注意です。最近は使っている方も居ないかも知れないですが、コレが出力するRDF内にも記事の概要が出力されます。この出力については、上手に処理がしにくいので、以前はRDF自体をMTMLで記述し直して対応していました。今は出力していません。</p>
<p>通常ブログ記事ページ内は、キチンとチェックするのですが、どうしてもこういう細かいメタ情報などの部分は、処理を忘れがちです。
本文にグローバルフィルターを追加する場合は、一度全テンプレートを見直すぐらいの気持ちで、影響範囲を確かめるようにしましょうね。実際かなりのサイトのメタ情報でMTタグやスニペットを見かけたことがあります。</p>]]></description>
<link>http://www.zelazny.mydns.jp/archives/002857.php?utm_source=WolaWolaRSS&amp;utm_medium=rss</link>
<guid>http://www.zelazny.mydns.jp/archives/002857.php</guid>
<category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
<category domain="http://www.sixapart.com/ns/types#tag">Atom</category>
<category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
<category domain="http://www.sixapart.com/ns/types#tag">mteval</category>
<category domain="http://www.sixapart.com/ns/types#tag">グローバルフィルター</category>
<category domain="http://www.sixapart.com/ns/types#tag">モディファイア</category>
<category domain="http://www.sixapart.com/ns/types#tag">出力</category>
<category domain="http://www.sixapart.com/ns/types#tag">概要</category>
<pubDate>Thu, 05 Apr 2012 23:42:06 +0900</pubDate>
</item>
<item>
<title>list_actionsのconditionはcode実行時にもチェックされる</title>
<description><![CDATA[<p>ふと思いたち、以下のプラグインを現在のMT環境での動作用に修正してみた。
「<a href="https://github.com/byrnereese/mt-plugin-batchtmploptions" title="byrnereese/mt-plugin-batchtmploptions">byrnereese/mt-plugin-batchtmploptions</a>」
まぁ、機能的には同じものがすでに以下のように存在するのだが、自分の勉強も兼ねてやってみました。
「<a href="https://github.com/alfasado/mt-plugin-set-template-build-type" title="alfasado/mt-plugin-set-template-build-type">alfasado/mt-plugin-set-template-build-type</a>」</p>
<p>このプラグインは、テンプレートのプラグインアクションに、テンプレートの公開設定を直接変更するプルダウンを追加するもので、オリジナルのままだと、公開設定が行えないモジュールやシステムテンプレート等に対しても表示されています。
表示制限のために「condition」を付けてみることにしました。意外と情報ないなぁ。
探してみた「<a href="https://github.com/movabletype/Documentation/wiki/Japanese-plugin-dev-5-1" title="リストアクションの追加 · movabletype/Documentation Wiki">リストアクションの追加 · movabletype/Documentation Wiki</a>」も、あまり参考になりません。</p>
<pre class="code">applications:
  cms:
    list_actions:
      template:
        publish_static:
          label: Publish Statically
          order: 105
          code:  $BatchTmplOpts::BatchTmplOpts::Plugin::itemset_stc
          permissions: can_edit_templates
          condition: $BatchTmplOpts::BatchTmplOpts::Plugin::is_publish</pre>
<p>「condition」は該当するアクションが、表示されるかされないかを設定するもので、「return 1;」の場合に表示「return 0;」で非表示です。上記で言うとプラグイン内の「lib/BatchTmplOpts/Plugin.pm」の「is_publish」がソレを返します。</p>
<p>どうやら、テンプレート表示時には「filter_key」というパラメータで、各テンプレートの表示を絞り込んでいるようです。
なので、以下のようにすると「インデックステンプレート」と「アーカイブテンプレート」の時のみ表示されるようになります。</p>
<pre class="code">my $tmpl_type = $app-&gt;param('filter_key') || '';
if (($tmpl_type eq 'index_templates')||($tmpl_type eq 'archive_templates')) {
    return 1;
}
return 0;</pre>
<p>これで、うまく表示が制限されるようになりました。
さて、念のためと思って実際に使用してみると、何故かエラーが発生します。メッセージは以下のとおりです。</p>
<blockquote>
<p>アクション(publish_static)が実装されていません。 </p>
</blockquote>
<p>イロイロ原因を調査してみて、どうやら上記の「condition」が影響しているようでした。
どうも、結果から考えると、管理画面の表示のタイミングだけでなく、コードの実行時にも「condition」の評価は行われるようです。その時に渡されている変数などが、管理画面表示と異なるため「return 0;」が戻ることが原因のようです。</p>
<p>「意外とめんどくさいのね」とか思いながら、他のプラグインの対応を見てみたら、「<a href="https://github.com/alfasado/mt-plugin-set-template-build-type" title="alfasado/mt-plugin-set-template-build-type">SetTemplateBuildType</a>」ではconditionでの制限はせずに、出力されたものを管理画面上で置換処理を行い削除しているようです。
なるほど、それではMT本体のコードはどの様に処理しているかを見てみようと思いました。</p>
<p>「lib/MT/App/CMS.pm」「core_list_actions」の「template」部分を見ると、どうやら以前使用されていた公開プルダウンのコードが残っており（<a href="http://www.koikikukan.com/archives/2010/01/29-012222.php" title="小粋空間: テンプレート一覧のアクションに「テンプレートの再構築」を追加する">小粋空間: テンプレート一覧のアクションに「テンプレートの再構築」を追加する</a>）、ソレを追いかけると、どうも「$app->mode eq 'itemset_action'」の時は無条件で「return 1;」になっているようです。プラグインアクションを実行した場合は無条件で正しいものとして扱うということですね。
うーん、それは・・・
それなら、そもそもプラグインアクションの実行時に、「condition」を見る必要はないのではとか思っちゃいました。まぁ中には有効なケースも存在するということなのかなぁ・・・</p>
<pre class="code">sub is_publish {
    return 0 if (MT-&gt;version_number &lt; 5);
    my $app = MT-&gt;app
      or return 0;
    my $blog = $app-&gt;blog
      or return 0;
    return 1 if $app-&gt;mode eq 'itemset_action';
    my $tmpl_type = $app-&gt;param('filter_key') || '';
    if (($tmpl_type eq 'index_templates')||($tmpl_type eq 'archive_templates')) {
        return 1;
    }
    return 0;
}</pre>
<p>とりあえず、以上で完成しましたので、プラグイン公開します。元プラグインはライセンス指定書いていないんだよねなぁ。たぶんGPL v2.0では無いかと思います（ここは特に根拠なし）。
「<a href="https://github.com/naoaki011/mt-plugin-batchtmploptions" title="naoaki011/mt-plugin-batchtmploptions">naoaki011/mt-plugin-batchtmploptions</a>」です。
気が向いたら使ってください。
まぁ、サイトの構築中のような、頻繁に公開設定を変更する場合以外は、あまり出番がないプラグインですけどね。
ついでにここでも、権限チェックしたほうがいいのかなぁ。まぁでも表示に関しては「permission」で絞り込まれるしな。</p>]]></description>
<link>http://www.zelazny.mydns.jp/archives/002856.php?utm_source=WolaWolaRSS&amp;utm_medium=rss</link>
<guid>http://www.zelazny.mydns.jp/archives/002856.php</guid>
<category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
<category domain="http://www.sixapart.com/ns/types#tag">Batch Template Publishing Options</category>
<category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
<category domain="http://www.sixapart.com/ns/types#tag">MT</category>
<category domain="http://www.sixapart.com/ns/types#tag">template</category>
<category domain="http://www.sixapart.com/ns/types#tag">アクション</category>
<category domain="http://www.sixapart.com/ns/types#tag">テンプレート</category>
<category domain="http://www.sixapart.com/ns/types#tag">プラグイン</category>
<category domain="http://www.sixapart.com/ns/types#tag">公開設定</category>
<pubDate>Thu, 05 Apr 2012 17:54:53 +0900</pubDate>
</item>
<item>
<title>DynamicMTMLは魔法の杖ではない</title>
<description><![CDATA[<p>これはDynamicMTMLの間違った覚えさせ方だと思う説明の仕方の話。</p>
<blockquote><p>動的に出したい部分を&lt;MTDynamicMTML&gt;と&lt;/MTDynamicMTML&gt;でタグを囲む。</p></blockquote>
<p>コレが有効のは、実際はものすごく限られた条件下です。
機能説明として使うのは構わないけど、実際にはもっと周到に頭を使う必要があります。</p>
<p>それって「スマートフォンオプション入れれば、既存のサイトが勝手にスマートフォン対応になるんでしょ。」とか「jQueryMobile読みこめば、既存のサイトが勝手にスマートフォン対応になるんでしょ。」と同じレベルです。</p>
<p>DynamicMTMLを利用すると、一部分をMTMLで記述されたままのHTMLを出力できます。
このMTMLを含む<strong>HTML全体</strong>を、DynamicMTMLブートストラップが読み込み、MTML部分のみ、MTのダイナミックパブリッシングエンジンに渡し、結果を元のHTMLにマージして出力する。それがDynamicMTMLです。</p>
<p>さて、DynamicMTMLを使う上で気を付けなくてはいけないのは、変数の扱いです。
変数は、HTMLを書き出す時に処理されてしまい、実際にDynamicMTMLブートストラップが読みこむのは、元の変数などないただのHTMLになってしまっています。</p>
<p>そう、実はチョット乱暴だけれど、DynamicMTMLの動作結果は、書きだされたHTMLを再度丸ごとテンプレートに貼り付けて、再構築した場合を想定する事が理解する早道です。２段階に分けて、再構築が行われる事をが理解できれば、正しく結果が予測できます。
また、コンテクストに関しては、どうやらファイルの出力パス（Fileinfo）から、コンテクスト情報を取得して、適切にセットが行われているようです。例えばカテゴリーアーカイブ内で処理するDynamicMTMLコードは、カテゴリーのコンテクストに制限されるようです。</p>
<p>問題の変数ですが、うまくスタティック部分とDynamicMTMLの両方に変数を渡すためには、それぞれに変数を書いてやる（渡してやる）必要があります。</p>
<pre class="code">&lt;MTSetVar name=&quot;blog_id&quot; value=&quot;9&quot;&gt;
&lt;MTDynamicMTML&gt;
&lt;MTEntries include_blogs=&quot;$blog_id&quot;&gt;
&lt;$MTEntryTitle$&gt;
&lt;/MTEntries&gt;
&lt;/MTDynamicMTML&gt;</pre>
<p>では、書き出されたHTML内の記述は以下のようになります。</p>
<pre class="code">&lt;MTDynamicMTML&gt;
&lt;MTEntries include_blogs=&quot;$blog_id&quot;&gt;
&lt;$MTEntryTitle$&gt;
&lt;/MTEntries&gt;
&lt;/MTDynamicMTML&gt;</pre>
<p>このHTML内のMTMLが処理される時に、変数「blog_id」は、どこにも書かれていないので「$blog_id」の部分が空になり、思うような結果が取得できません。
この場合は、以下のようにDynamicMTMLの処理部分に、変数も含めて記述する必要があります。</p>
<pre class="code">&lt;MTDynamicMTML&gt;
&lt;MTSetVar name=&quot;blog_id&quot; value=&quot;9&quot;&gt;
&lt;MTEntries include_blogs=&quot;$blog_id&quot;&gt;
&lt;$MTEntryTitle$&gt;
&lt;/MTEntries&gt;
&lt;/MTDynamicMTML&gt;</pre>
<p>この同じ変数をスタティック側でも使用しているなら、両方で定義する必要があるわけです。</p>
<pre class="code">&lt;MTSetVar name=&quot;blog_id&quot; value=&quot;9&quot;&gt;
&lt;MTDynamicMTML&gt;&lt;MTSetVar name=&quot;blog_id&quot; value=&quot;9&quot;&gt;&lt;/MTDynamicMTML&gt;
&lt;MTDynamicMTML&gt;
&lt;MTEntries include_blogs=&quot;$blog_id&quot;&gt;
&lt;$MTEntryTitle$&gt;
&lt;/MTEntries&gt;
&lt;/MTDynamicMTML&gt;</pre>
<p>まぁでも「チョットコレは冗長だなぁ」と考えてみたりとか、実は変数の設定がものすごく重い処理だったりする場合などなんかは、まぁその処理をスタティック側で全部済ませたかったりしますよね。
そういう時には、以下のような書き方をする事で、モディファイア部分の変数を先に展開してしまって渡すことが出来ます。</p>
<pre class="code">&lt;MTSetVar name=&quot;blog_id&quot; value=&quot;9&quot;&gt;
&lt;&lt;MTRawMTML&gt;MTEntries&lt;/MTRawMTML&gt; include_blogs=&quot;&lt;$MTVar name=&quot;blog_id&quot;$&gt;&quot;&gt;
&lt;MTRawMTML&gt;&lt;$MTEntryTitle$&gt;&lt;/MTRawMTML&gt;
&lt;MTMTML tag=&quot;/MTEntries&quot;&gt;</pre>
<p>MTRawMTMLブロックタグは、その内部をそのままHTML内に書きだすタグです。MTDynamicMTMLタグとの大きな違いは、HTMLへの書き出し時にMTDynamicMTMLタグが書き出されないことです。つまりHTML内にはMTRawMTMLタグ自体は出力されません。（HTML内のMTDynamicMTMLタグは、DB処理のエラー時などに関係があります。処理内容によってこのタグを使うべきかを考える必要があります。）
書き出されない結果、上のMTMLは以下の様にHTMLファイルに出力が行われます。</p>
<pre class="code">&lt;MTEntries include_blogs=&quot;9&quot;&gt;
&lt;$MTEntryTitle$&gt;
&lt;/MTEntries&gt;</pre>
<p>MTRawMTMLを「&lt;」と「MTEntries」の間に書いているのは、テンプレートの構文チェックで引っかからないようにするためです。その位置に書くことで、MTEntriesがテンプレート上でタグとして認識されなくなるため、閉じタグとの関係が正しくない場合のエラーが発生し無くなります。MTMTMLも構文チェックに対して有効なタグです。こちらは「tag」モディファイアの値のMTタグを出力します。</p>
<p>DynamicMTMLは、ただ振ればいいだけの<strong>魔法の杖</strong>(MagicWand)ではありません。
正しい使い方を憶えて、初めて意味を持つとても便利な道具なのだと思います。</p>]]></description>
<link>http://www.zelazny.mydns.jp/archives/002847.php?utm_source=WolaWolaRSS&amp;utm_medium=rss</link>
<guid>http://www.zelazny.mydns.jp/archives/002847.php</guid>
<category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
<category domain="http://www.sixapart.com/ns/types#tag">DynamicMTML</category>
<category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
<category domain="http://www.sixapart.com/ns/types#tag">MTML</category>
<category domain="http://www.sixapart.com/ns/types#tag">MTタグ</category>
<category domain="http://www.sixapart.com/ns/types#tag">テンプレート</category>
<pubDate>Sun, 01 Apr 2012 02:20:59 +0900</pubDate>
</item>
<item>
<title>MTタグ記述の揺らぎと構文チェック</title>
<description><![CDATA[<p>MTタグは記述の揺らぎを認めていて、いろんな書き方ができますよね。</p>
<blockquote cite="http://www.movabletype.jp/documentation/designer/template-tags.html" title="[Movable Type 4 ドキュメント]から、2012年3月31日 22:50:47に引用" class="blockquote"><p class="quote-inner">テンプレートタグの書式
Movable Type 3.x までは、&lt;$MTEntryTitle$&gt; と大文字・小文字で書く部分がしっかりルール化されていましたが Movable Type 4 では大文字・小文字の区別を行いません。</p></blockquote><p class="cite-info">[<cite><a href="http://www.movabletype.jp/documentation/designer/template-tags.html" title="引用元" rel="external">Movable Type 4 ドキュメント</a>:(2012年3月31日 22:50:47 引用)</cite>]</p>
<p>私自身はMT3スタイルの記述が一番しっくりきていて、ずっとそのスタイルで書いているのですが、ここ最近は値を出力しないタグに対して、「単体で動作するファンクションタグは、XHTML の br (forced line break) 要素のように、書くことができます。」というのを使うようにしてました。</p>
<p>とある案件で理由不明な動作が発生して、原因を探っていたのですが、該当箇所には以下のように記述してました。</p>
<pre class="code">&lt;MTBlogExtendLink setvar=&quot;extend_link&quot; /&gt;</pre>
<p>これって、私的には</p>
<pre class="code">&lt;MTSetVarBlock name=&quot;extend_link&quot;&gt;&lt;$MTBlogExtendLink$&gt;&lt;/MTSetVarBlock&gt;</pre>
<p>のつもりだったんですが、なんか動きがおかしいんです。（&lt;$MTBlogExtendLink$&gt;タグ自体は、とある製品により提供されるカスタムタグです。）</p>
<p>いろいろテストしていて原因が解らないので、出力値を確認してみようとsetverモディファイアを外してみたら、なんと閉じタグがないと怒られました。</p>
<pre class="code">&lt;MTBlogExtendLink&gt;</pre>
<p>ここでしばし思考停止に陥りました・・・<img src="http://www.zelazny.mydns.jp/mt-static/plugins/InsertIcon/images/pp_06.gif" class="mt_icon" width="17" height="17" alt="？" title="？" />
え、閉じタグ・・・・<img src="http://www.zelazny.mydns.jp/mt-static/plugins/InsertIcon/images/pp_00.gif" class="mt_icon" width="17" height="17" alt="・・・" title="・・・" />
しばらくして立ち直ってから、閉じタグ書けばいいのかと思い試しに書いてみたら、確かにエラーが出なくなりました。</p>
<p>そこで、初めて気づいたんです。
MTBlogExtendLinkタグは、<strong>ファンクションタグ</strong>ではなく、<strong>ブロックタグ</strong>だ！</p>
<p>XHTMLの&lt;br /&gt;って、実は&lt;br&gt;&lt;/br&gt;の事だということを思いだしました。
つまり今まで、ファンクションタグのつもりで書いていたものは、実は以下の内容だったということが発覚しました。</p>
<pre class="code">&lt;MTBlogExtendLink setvar=&quot;extend_link&quot;&gt;&lt;/MTBlogExtendLink&gt;</pre>
<p>そういう事かぁ。<img src="http://www.zelazny.mydns.jp/mt-static/plugins/InsertIcon/images/pp_07.gif" class="mt_icon" width="17" height="17" alt="！" title="！" />
という訳で、明らかにブロックタグをファンクションタグと勘違いしていた私が悪いわけですが、こういう落とし穴もあるよという話でした。</p>
<p>その後は、「XHTML の br (forced line break) 要素の書き方」は、使うのやめました。
こういう所でハマるの嫌なので。</p>
<p>あ、ちなみにブロックタグ自体も値を出力するので、あの書き方で値がセットされないとかいう話ではありません。
ちょっと自分が思っていた内容とは違うものがセットされてしまっていただけです。
よくあるパターンでは、ブロックタグはブロック内の繰り返しの回数を出力したりするものがありますし、単に内部の処理が行われるかどうかを返すものもあります。</p>
<pre class="code">&lt;MTEntries&gt;
出力有り
&lt;MTElse&gt;
出力なし
&lt;/MTEntries&gt;</pre>
<p>みたいな使い方は、その応用ですね。</p>]]></description>
<link>http://www.zelazny.mydns.jp/archives/002841.php?utm_source=WolaWolaRSS&amp;utm_medium=rss</link>
<guid>http://www.zelazny.mydns.jp/archives/002841.php</guid>
<category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
<category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
<category domain="http://www.sixapart.com/ns/types#tag">MT</category>
<category domain="http://www.sixapart.com/ns/types#tag">MTML</category>
<category domain="http://www.sixapart.com/ns/types#tag">MTタグ</category>
<category domain="http://www.sixapart.com/ns/types#tag">テンプレート</category>
<pubDate>Sat, 31 Mar 2012 23:12:50 +0900</pubDate>
</item>
<item>
<title>Apacheのエラーログにapple-touch-iconが見つからないと出ていた</title>
<description><![CDATA[<p>Apacheのエラーログに、大量にapple-touch-iconが見つからないと出ていた。
iPhone用のページは、ソレ用に指定してあるはずで、最初は何故だか解らなかったのだが、表示ページを見るとどうやらPC用のページだったので、はたと気づいた。
iPadでアクセスした時に、PC用ページを表示しているのだが、その時にapple-touch-iconを要求されてるってことに。
なるほど、コレは考えていなかったなぁ。</p>
<p>その場で急ぎ、PC用ページにも設定を行ったのだが、今日本を読んでいてなかなかいい対応があったので、ソレを引用してみます。</p>
<blockquote cite="http://www.amazon.co.jp/gp/product/4873113814" title="Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集"><p class="img_L"><a href="http://www.amazon.co.jp/gp/product/4873113814" title="Amazon.co.jp： Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集: Ken Coar, Rich Bowen, 笹井 崇司: 本"><img src="http://images-jp.amazon.com/images/P/4873113814.09._PC_SCMZZZZZZZ_.jpg" width="135" height="170" style="border:none;" alt="Apacheクックブック 第2版" /></a></p><p><a href="http://www.amazon.co.jp/ref=gno_logo" title="Amazon.co.jp： 通販 - ファッション、家電から食品まで【無料配送】">Amazon.co.jp</a><br /><a href="http://www.amazon.co.jp/gp/product/4873113814" title="Amazon.co.jp： Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集: Ken Coar, Rich Bowen, 笹井 崇司: 本">Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集<br />Ken Coar, Rich Bowen, 笹井 崇司</a><br />
本書はUsenetニュースグループやApache FAQ、メーリングリストなどに寄せられた膨大な問題から、特に重要なトピックを選び、問題に解法を示す形式で解説するレシピ集です。<br />モジュールの追加やログの記録、SSL対応ブラウザでの安全なトランザクション処理についてなど、運用の現場で必ず役に立つ200以上のレシピを紹介しています。<br />改訂にあたって、Apache2.0および2.2に対応しました。<br />実際的で幅広いトピックを分かりやすく解説する本書はサーバ管理者必携の一冊です。 </p></blockquote>
<p>本の中では、”デフォルトの「お気に入りアイコン」をセットアップする”となっていて、ドキュメント側で<strong>favicon.ico</strong>が設定されていない時に、サーバーが代替えの<strong>fivicon.ico</strong>を返すようにする方法が書かれています。
ほぼそのまんまファイル名だけ入れ替えて、以下のようにApacheに設定するだけで、存在しない <strong>apple-touch-icon.png</strong> への要求があった時に、デフォルトの <strong>apple-touch-icon.png</strong> を返せるようになります。</p>
<pre class="code">&lt;FilesMatch &quot;^apple-touch-icon\.png$&quot;&gt;
    Error 404 /icons/apple-touch-icon.png
&lt;/FilesMatch&gt;</pre>
<p>ファイル名 <strong>apple-touch-icon.png</strong> が404(NotFound)の場合は、「/icons/apple-touch-icon.png」を返すということですね。
うん、コレは使えそう。</p>
<p>よくよく考えれば、これってダイナミックパブリッシングの処理と同じ考え方か。</p>]]></description>
<link>http://www.zelazny.mydns.jp/archives/002854.php?utm_source=WolaWolaRSS&amp;utm_medium=rss</link>
<guid>http://www.zelazny.mydns.jp/archives/002854.php</guid>
<category domain="http://www.sixapart.com/ns/types#category">Web関連</category>
<category domain="http://www.sixapart.com/ns/types#tag">Apache</category>
<category domain="http://www.sixapart.com/ns/types#tag">apple-touch-icon.png</category>
<category domain="http://www.sixapart.com/ns/types#tag">favicon</category>
<category domain="http://www.sixapart.com/ns/types#tag">icon</category>
<category domain="http://www.sixapart.com/ns/types#tag">iPad</category>
<category domain="http://www.sixapart.com/ns/types#tag">アイコン</category>
<pubDate>Sat, 31 Mar 2012 22:16:01 +0900</pubDate>
</item>
<item>
<title>アイテムアップロード途中にプレビューする</title>
<description><![CDATA[<p>えーと、アイテムなんですが。アップロードのプロセス内で、一切プレビューとかが無いまま、アイテム挿入まで言っちゃうのってなんか気になりませんか？
私は気になってました。（ファイルダイアログで1つずれて選択したままアップロードして、挿入してから気づくとか<img src="http://www.zelazny.mydns.jp/mt-static/plugins/InsertIcon/images/pp_12.gif" class="mt_icon" width="17" height="17" alt="ドクロ" title="ドクロ" />）
で、プレビューの表示機能を付けようと、<a href="https://github.com/naoaki011/mt-plugin-assetylene" title="naoaki011/mt-plugin-assetylene">Assetylene</a>を<a href="https://github.com/naoaki011/mt-plugin-assetylene/commit/90f6922a1828bb4d408077378589bb6e1758c3d4" title="show thumbnail feature added. · 90f6922 · naoaki011/mt-plugin-assetylene">カスタマイズ</a>してみたのですが、どうもこのアイテム挿入の直前ってのもなんか違うような気がして、ファイル選択時にプレビュー表示できないか、試行錯誤をしてみました。</p>
<p><a class="highslide" href="http://www.zelazny.mydns.jp/images/2012/03/WS003397.JPG"><img alt="アイテム挿入画面にプレビュー表示" src="http://www.zelazny.mydns.jp/assets_c/2012/03/WS003397-thumb-450x364-1655.jpg" width="450" height="364" /></a></p>
<p>まぁ、Assetylene自体もかなり機能追加されてるけど、それはまた後でということで。</p>
<h2>アイテムアップロードのファイル選択じにプレビューを表示する</h2>
<h3>inputタグのfile値をJSでは取り扱えないらしい</h3>
<p>言葉正しいかは不明だけど、チョット説明します。
フォーム側で値を持ってるのだから、fileスキームを指定してjQueryで書きゃあ、割と簡単にできるだろうと思っていたが、どうもうまくいかなかったんですね。「<a href="http://www.ecoop.net/memo/archives/2005-09-06-1.html" title="File (URL Scheme)|てくめも@ecoop.net">File (URL Scheme)|てくめも@ecoop.net</a>」
input type=&quot;file&quot;の値を取得すれば、パスが取得出来るものと思っていたんですが、何故か取得した値は純粋にファイル名だけでした。
割と古い情報では、パスが取得出来るようなこと書いてあるのですけどね。</p>
<p>それで調べてみると、どうも最近の（といってもかなり前らしいが）ブラウザでは、セキュリティ対策でブラウザからfileの値をとれなくなっているらしいです。
悪質なJSに勝手にローカルファイルをイジられないようにという事らしい。</p>
<h3>バックグラウンドでアップロードするのはイマイチ</h3>
<p>どういう方法が存在するか探しまわってみたら、フィールドのonchangeのタイミングで、Ajax使ってバックグラウンドにアップロードを行い、アップロードされたファイルをhttpで読み込むというのがありました。確かにローカルファイルじゃなくなるので、問題はなさそうです。
「<a href="http://tech.kayac.com/archive/jquery-autouploader-plugin.html" title="jQuery.autouploader Pluginを作成しました。 | tech.kayac.com - KAYAC engineers' blog">jQuery.autouploader Pluginを作成しました。 | tech.kayac.com - KAYAC engineers' blog</a>」
ただどうも、実サーバーが対象ではないとしても、アップロードをおこなってしまうというのは、どうも納得行かなくて、とりあえず別な方法を探して見ることにしました。</p>
<h3>HTML5のlocalStorageを使えないかな</h3>
<p>アップロードしなきゃならないなら、localStorageとか言うのあったよね、HTML5に。
と思いついて、調べてみたら、なんとなく出来そうな感じだった。</p>
<p>「<a href="http://d.hatena.ne.jp/noodles_mtb/20111027/1319711016" title="html5 の canvas + localStorage で画像保存 - 麺処　まつば">html5 の canvas + localStorage で画像保存 - 麺処　まつば</a>」
「<a href="http://blogs.msdn.com/b/osamum/archive/2012/03/05/html5api.aspx" title="[実用HTML5API]ローカル ストレージへの画像のキャッシュ方法 - monoe's blog - Site Home - MSDN Blogs">[実用HTML5API]ローカル ストレージへの画像のキャッシュ方法 - monoe's blog - Site Home - MSDN Blogs</a>」
テキストのみしか扱えないので、画像はBase64に変換するんだ。localStorageへの読み書きはやってみると意外に簡単に扱えるなぁ。ただ、なんかエロい回りくどういなぁという感想。</p>
<p>試していたら、<a href="http://www.zemanta.com/?f=1" title="Zemanta - blog publishing assistant: related images, articles & posts for bloggers">Zemanta</a>がlocalStorageに勝手にデータ保存してて、ちょっとムカッときた。<img src="http://www.zelazny.mydns.jp/mt-static/plugins/InsertIcon/images/pp_04.gif" class="mt_icon" width="17" height="17" alt="怒り" title="怒り" /></p>
<h3>FileReaderというのがあるようだ</h3>
<p>もうちょっと、いい方法がないかと思って、海外のフォーラムなんかも探し回っていたら、<a href="http://www.daniweb.com/web-development/javascript-dhtml-ajax/threads/114822/preview-an-image-before-upload#post1780389" title="Preview an image before upload - JavaScript / DHTML / AJAX | DaniWeb">コード見つけた</a>ので、ソレを試したらイッパツで動いた。意外な結末。</p>
<p>これもFileReader（正しくは「<a href="http://www.w3.org/TR/FileAPI/" title="File API">File API</a>」か）というHTML5の機能らしい。
「<a href="http://d.hatena.ne.jp/end0tknr/20110106/1294288753" title="html5のFileReaderでドラッグ&amp;ドロップなファイルのアップロード - end0tknrのkipple - web開発日記">html5のFileReaderでドラッグ&amp;ドロップなファイルのアップロード - end0tknrのkipple - web開発日記</a>」
こういうの見ると、HTML5すごいなぁとか思える。</p>
<p>まぁHTML5なんで、きっとブラウザ依存度は高いだろうなと思っていたけど、どうやら現状でコレに対応しているのは、Firefox・Chrome・Operaだけのようでした。Chromeはローカルファイルの扱いはできないとか見かけたんですが、動作してるみたい。
IEとSafariについては動作しませんでした。なので、ブラウザの判別をして対象外の場合は処理の読み込みを行わないようにしています。
「<a href="http://www.html5.jp/tutorial/apicheck/FileAPI.html" title="File API - HTML5 API チェッカー - HTML5 チュートリアル - HTML5.JP">File API - HTML5 API チェッカー - HTML5 チュートリアル - HTML5.JP</a>」ここで機能チェックできるっぽいな</p>
<h2>出来たかも</h2>
<p>元々ファイルアップロードの初期値をカスタマイズするプラグインを作成中だったので、そこに組み込みました。
MTの管理画面って、いつの間にかHTML5になってるんですね。機能が動作するかが気になっていたんだけど、問題なかった。
という訳で、<a href="https://github.com/naoaki011/mt-plugin-upload-prefs" title="naoaki011/mt-plugin-upload-prefs">Upload Prefs</a>を暫定公開します。</p>
<p><a class="highslide" href="http://www.zelazny.mydns.jp/images/2012/03/WS003398.JPG"><img alt="アップロード前にプレビュー表示" src="http://www.zelazny.mydns.jp/assets_c/2012/03/WS003398-thumb-450x162-1657.jpg" width="450" height="162" /></a></p>
<p>まぁ、他にも機能あるんですけど、作成途中なので、それはそのうちに・・・
一応MT5.13用に作成、といってもMT5.12でも問題なく動くはず。旧バージョン対応は、これからの予定です。
やっぱり<strong>アイテム</strong>が好き・・・<img src="http://www.zelazny.mydns.jp/mt-static/plugins/InsertIcon/images/pp_01.gif" class="mt_icon" width="17" height="17" alt="ハート" title="ハート" /></p>
<p><ins datetime="2012-03-25T00:56:20+09:00">いけね。<img src="http://www.zelazny.mydns.jp/mt-static/plugins/InsertIcon/images/pp_03.gif" class="mt_icon" width="17" height="17" alt="嫌な感じ" title="嫌な感じ" />ダイアログの時忘れてた。収まんねぇや。</ins></p>
<p><ins datetime="2012-03-25T09:55:20+09:00">ダイアログ表示での<a href="https://github.com/naoaki011/mt-plugin-upload-prefs/commit/79d21fa8728d23d03cef17c09f343790a57f117d" title="provisional fix for dialog view. · 79d21fa · naoaki011/mt-plugin-upload-prefs">暫定処理追加</a>。表示位置は、もうちょっと考える必要あるなぁ。<img src="http://www.zelazny.mydns.jp/mt-static/plugins/InsertIcon/images/pp_00.gif" class="mt_icon" width="17" height="17" alt="・・・" title="・・・" /></ins></p>
<p><ins datetime="2012-03-25T17:10:17+09:00">もろもろケースの修正やって、<a href="https://github.com/naoaki011/mt-plugin-upload-prefs/commit/a9e02822c90ac4d79523b032e84003b0f5dec6f8" title="version limit include 5.12. · a9e0282 · naoaki011/mt-plugin-upload-prefs">忘れてたバージョン制限も外して、</a>MT5.12でも動作するようになった。
後は、今要素を置換して書き換えてる関係で、バージョン依存が高いので、DOM挿入型に書き換える予定。
それからひと通り終わったら、2バイト文字の制限を追加するかな。</ins></p>]]></description>
<link>http://www.zelazny.mydns.jp/archives/002853.php?utm_source=WolaWolaRSS&amp;utm_medium=rss</link>
<guid>http://www.zelazny.mydns.jp/archives/002853.php</guid>
<category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
<category domain="http://www.sixapart.com/ns/types#tag">Asset</category>
<category domain="http://www.sixapart.com/ns/types#tag">Assetylene</category>
<category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
<category domain="http://www.sixapart.com/ns/types#tag">Upload Prefs</category>
<category domain="http://www.sixapart.com/ns/types#tag">アイテム</category>
<category domain="http://www.sixapart.com/ns/types#tag">プラグイン</category>
<pubDate>Sat, 24 Mar 2012 23:44:10 +0900</pubDate>
</item>
<item>
<title>StyleCatcherによリ保存された、スタイルの情報</title>
<description><![CDATA[<p>テーマつながりでスタイルキャッチャーです。こちらもVicunaの機能拡張の為に調べました。
「<a href="http://www.koikikukan.com/archives/2011/07/05-005555.php" title="CurrentStyleプラグイン: 小粋空間">CurrentStyleプラグイン: 小粋空間</a>」を参考に、保存された情報を調べていたのですが、うまく行かない時があるみたいです。
イロイロ調べていくと、以下の様にデータが保存されているようした。</p>
<p>StyleCatcher2.41（多分それ以前も同じだと推測してますが）のプラグインデータは１レコード内に、<em>'current_theme_' + ブログID</em>と<em>'current_layout_' + ブログID</em>という風に、ブログ数分格納されるようです。
ココからは便宜上<strong>ブログIDが1</strong>だとして話を進めます。
<em>current_theme_1</em>をプラグインから読み取ると、選択したデザインの情報が戻ります。
<em>current_layout_1</em>はプルダウンで選択するレイアウトの情報が戻ります。</p>
<p>さて、<em>current_layout_1</em>は、そのままscreen.cssに書いてあるlayoutsの値ですね。
しかし<em>current_theme_1</em>の方は少し特殊なようです。</p>
<p>スタイルキャッチャー画面には左にカテゴリーと呼ばれる、スタイルキャッチャーリポジトリが表示されています。
調べていくとどうやら、このリポジトリの情報もあわせて保存されているようです。
以下が試した結果です。</p>
<dl>
<dt>「既存のスタイル」の「Minimalist Red」</dt>
<dd>default:minimalist-red</dd>
<dt>「MT4スタイルライブラリ」の「Minimalist White」</dt>
<dd>repo-sixapart_mt4:minimalist-white</dd>
<dt>「プロフェッショナルスタイル」の「Professional Blue」</dt>
<dd>repo-professional_themes:professional-blue</dd>
<dt>「mt.Vicunaスキン」の「Style-Galaxy」</dt>
<dd>repo-mtvicuna_skin:style-galaxy</dd>
<dt>「保存されているスタイル」の「Minimalist White」を再度適用</dt>
<dd>local:minimalist-white</dd>
<dt>「現在のスタイル」でレイアウトプルダウンを変更して再度適用</dt>
<dd>local:minimalist-white のまま保存自体が行われていない</dd>
</dl>
<p>という訳で、「:」の手前がリポジトリの情報にの様で、「既存のスタイル」の場合は「default」（yujiroさんのコードはこの場合のみが考慮されてました）、「保存されているスタイル」「現在のスタイル」の場合は「local」、その他のリポジトリの場合は頭に「repo-」を付けてリポジトリ名が続きます。
「mt.Vicunaスキン」の場合、テーマ設定で以下のようにしているので「repo-mtvicuna_skin」となります。</p>
<pre class="code">          stylecatcher_libraries:
            mtvicuna_skin:
              url: '{{support}}theme_static/mtVicunaSimple/'
              label: mt.Vicuna skin
              description_label: 'Styles that are compatible with the mt.Vicuna Theme.'</pre>
<p>この事から、異なるリポジトリの場合は、別な情報として扱われます。
この情報を上手に利用すれば、ver1とver2のリポジトリがあって、同名のデザインが存在する場合でも、どちらからを適用したものか
判別が可能なようです。</p>
<p>また、current_layout_1に保存されている情報ですが、このplugindataの内容とは別に、blog_metaテーブルに、page_layoutとして保存されているようです。
こちらはスタイルキャッチャーを使用した場合に、同時に書き込まれるようですが、ブログの作成時にはplugindataにデータは存在せずに、blog_metaのデータのみになるようです。
どちらかというと、レイアウトはblog_metaテーブルから拾ったほうがよさそうです。</p>]]></description>
<link>http://www.zelazny.mydns.jp/archives/002852.php?utm_source=WolaWolaRSS&amp;utm_medium=rss</link>
<guid>http://www.zelazny.mydns.jp/archives/002852.php</guid>
<category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
<category domain="http://www.sixapart.com/ns/types#tag">MT</category>
<category domain="http://www.sixapart.com/ns/types#tag">StyleCatcher</category>
<category domain="http://www.sixapart.com/ns/types#tag">Theme</category>
<category domain="http://www.sixapart.com/ns/types#tag">スキン</category>
<category domain="http://www.sixapart.com/ns/types#tag">プラグイン</category>
<pubDate>Tue, 20 Mar 2012 23:11:14 +0900</pubDate>
</item>
<item>
<title>MT::Themeオブジェクトをロードして中身をダンプしてみた</title>
<description><![CDATA[<p>調べ物でテーマオブジェクトをロードしてダンプしてみた。
整形するのに苦労しました・・・<img src="http://www.zelazny.mydns.jp/mt-static/plugins/InsertIcon/images/pp_02.gif" class="mt_icon" width="17" height="17" alt="汗" title="汗" /></p>
<p>ダンプしてみたのは、<a href="http://www.zelazny.mydns.jp/pub/plugins/mtvicuna-simple.php" title="mt.Vicuna Simple Theme Plugin - WolaWola">mt.Vicuna Simple</a>。
もちろんconfig.yaml全体の中でもtheme部分のみロードされてました。当たり前の話か・・・</p>
<p>以下がconfig.yamlのテーマ部分</p>
<pre class="code" title="mtVicunaSimple/config.yamlのthemes部分">themes:
  mtVicunaSimple:
    id: mtVicunaSimple
    label: mt.Vicuna Simple Theme
    description: &lt;__trans phrase=&quot;A MT5 Theme Plugin for Vicuna CMS. This Theme Build for MT Begginers such as Graphical Layout Editing screen.&quot;&gt;
    author_name: wu
    author_link: http://3ping.org/
    version: 2.4.3
    class: blog
    static_path: blog_static
    l10n_lexicon:
      ja: l10n_ja.yaml
    thumbnail_file: vicuna.png
    thumbnail_file_medium: vicuna-medium.png
    thumbnail_file_small: vicuna-small.png
    optional_components:
      StyleCatcher: 2.41
    elements:
      blog_static_files:
        component: core
        importer: blog_static_files
        require: 1
        data:
          - themes
      default_prefs:
        component: core
        importer: default_prefs
        require: 1
        data:
          file_extension: html
          convert_paras: __default__
          convert_paras_comments: __default__
          archive_type_preferred: Individual
          entries_on_index: 10
      template_set:
        component: core
        importer: template_set
        name: Template Set
        data:
          label: mt.Vicuna Simple
          base_path: templates
          require: 1
          base_css: 0
          stylecatcher_libraries:
            mtvicuna_skin:
              url: '{{support}}theme_static/mtVicunaSimple/'
              label: mt.Vicuna skin
              description_label: 'Styles that are compatible with the mt.Vicuna Theme.'
#            mtvicuna_recent_skin:
#              url: 'http://code.zelazny.mydns.jp/themes/mtVicuna-recent-24/'
#              label: mt.Vicuna Recent skin
#              description_label: 'Recent Vicuna Styles of the mt.Vicuna Theme.'
            mtvicuna_legacy_skin:
              url: 'http://code.zelazny.mydns.jp/themes/mtVicuna-legacy/'
              label: mt.Vicuna Legacy skin
              description_label: 'Legacy Vicuna Styles covert to Recent version of the mt.Vicuna Theme.'
            hashim_skin:
              url: 'http://kita2.net/stylelib/'
              label: mt.Vicuna HashiM Stylelib
              description_label: 'This is style library only for the mtVicuna theme.'
          templates:
            index:
              main_index:
                label: Main Index
                outfile: index.html
                rebuild_me: 1
              archive_index:
                label: Archive Index
                outfile: archives/index.html
                rebuild_me: 1
              styles:
                label: Stylesheet
                outfile: styles.css
                rebuild_me: 1
              feed_recent:
                label: Feed - Recent Entries
                outfile: atom.xml
                rebuild_me: 1
              rsd:
                label: RSD
                outfile: rsd.xml
                rebuild_me: 1
              javascript:
                label: JavaScript
                outfile: js/mt.js
                rebuild_me: 1
#              mt_jquery_script:
#                label: mt.jQueryScript
#                outfile: js/mt.jQuery.js
#                rebuild_me: 1
              user_jquery:
                label: User JQuery
                outfile: js/user_jquery.js
                rebuild_me: 1
              google_sitemap:
                label: SiteMap 0.9
                outfile: sitemap.xml
                rebuild_me: 1
#              wxr_rss2:
#                label: ExtendedRSS 2.0
#                outfile: rss.xml
#                rebuild_me: 1
            individual:
              entry:
                label: Entry
                filename: archiveTemplate/entry.mtml
                mappings:
                  entry_archive:
                    archive_type: Individual
                    file_template: %y/%m/%-f
            archive:
              category_entry_listing:
                label: Category Entry Listing
                filename: archiveTemplate/category_entry_listing.mtml
                mappings:
                  category:
                    archive_type: Category
                    file_template: %-c/%i
                  category-monthly:
                    archive_type: Category-Monthly
                    file_template: &quot;%-c/%y/%m/%i&quot;
              datebased_entry_listing:
                label: Monthly Entry Listing
                filename: archiveTemplate/datebase_entry_listing.mtml
                mappings:
                  monthly:
                    archive_type: Monthly
                    file_template: %y/%m/%i
            page:
              page:
                label: Page
                filename: archiveTemplate/page.mtml
                mappings:
                  page_archive:
                    archive_type: Page
                    file_template: %-c/%-f
            module:
              banner_header:
                label: Banner Header
                filename: templateModule/banner_header.mtml
              banner_footer:
                label: Banner Footer
                filename: templateModule/banner_footer.mtml
              html_head:
                label: HTML Head
                filename: templateModule/html_head.mtml
              topic_path:
                label: Topic Path
                filename: templateModule/topic_path.mtml
              sidebar:
                label: Sidebar
                filename: templateModule/sidebar.mtml
              entry_summary:
                label: Entry Summary
                filename: templateModule/entry_summary.mtml
              related_entries:
                label: Related Entries
                filename: templateModule/related_entries.mtml
              comments:
                label: Comments
                filename: templateModule/comments.mtml
#              comments_ajax:
#                label: Comments
#                filename: templateModule/comments_ajax.mtml
              comment_detail:
                label: Comment Detail
                filename: templateModule/comment_detail.mtml
              trackbacks:
                label: TrackBacks
                filename: templateModule/trackbacks.mtml
              next_entry_link_simple:
                label: Next Entry Link Simple
                filename: templateModule/next_entry_link_simple.mtml
              next_entry_link_detailed:
                label: Next Entry Link Detailed
                filename: templateModule/next_entry_link_detailed.mtml
              headline:
                label: Headline
                filename: templateModule/headline.mtml
              global_navigation:
                label: Global Navigation
                filename: templateModule/global_navigation.mtml
#              hatebu_anywhere:
#                label: Hatena Bookmark Anywhere
#                filename: templateModule/hatebu_anywhere.mtml
            system:
              comment_preview:
                label: Comment Preview
                description_label: Displays preview of comment.
                filename: system/comment_preview.mtml
              comment_response:
                label: Comment Response
                description_label: 'Displays error, pending or confirmation message for comments.'
                filename: system/comment_response.mtml
              comment_listing:
                description_label: Improved listing of comments.
                label: Comment Listing
                filename: system/comment_listing.mtml
              dynamic_error:
                label: Dynamic Error
                description_label: Displays errors for dynamically published templates.
                filename: system/dynamic_error.mtml
              popup_image:
                label: Popup Image
                description_label: Displays image when user clicks a popup-linked image.
                filename: system/popup_image.mtml
              search_results:
                label: Search Results
                description_label: Displays results of a search.
                filename: system/search_results.mtml
            widgetset:
              primary_sidebar:
                order: 1000
                label: Primary Sidebar
                widgets:
                  - Calender
                  - Search
                  - Recent Entries
                  - Recent Comments
                  - Recent Trackbacks
                  - Recent Assets
                  - Tag Cloud
                  - About This Page
              secondary_sidebar:
                order: 1000
                label: Secondary Sidebar
                widgets:
                  - Category Archives
                  - Monthly Archives
                  - Page Listing
                  - Syndication
                  - OpenID Accepted
                  - Powered By
            widget:
              about_this_page:
                label: About This Page
                filename: widget/about_this_page.mtml
              archives_list:
                label: Archives
                filename: widget/archives_list.mtml
              monthly_archives_dropdown:
                label: Monthly Archives Dropdown
                filename: widget/monthly_archives_dropdown.mtml
              category_archive_list:
                label: Category Archives
                filename: widget/category_archive_list.mtml
              calendar:
                label: Calender
                filename: widget/calendar.mtml
              recent_comments:
                label: Recent Comments
                filename: widget/recent_comments.mtml
              recent_trackbacks:
                label: Recent Trackbacks
                filename: widget/recent_trackbacks.mtml
              recent_entries:
                label: Recent Entries
                filename: widget/recent_entries.mtml
              recent_assets:
                label: Recent Assets
                filename: widget/recent_assets.mtml
              recent_entry_assets:
                label: Recent Entry Assets
                filename: widget/recent_entry_assets.mtml
              syndication:
                label: Syndication
                filename: widget/syndication.mtml
              links:
                label: Links
                filename: widget/links.mtml
              search:
                label: Search
                filename: widget/search.mtml
              tag_cloud:
                label: Tag Cloud
                filename: widget/tag_cloud.mtml
              creative_commons:
                label: Creative Commons
                filename: widget/creative_commons.mtml
              openid:
                label: OpenID Accepted
                filename: widget/openid.mtml
              signin:
                label: Sign in
                filename: widget/signin.mtml
              author_archive_list:
                label: Author Archives
                filename: widget/author_archive_list.mtml
              current_author_monthly_archive_list:
                label: Current Author Monthly Archives
                filename: widget/current_author_monthly_archive_list.mtml
              current_category_monthly_archive_list:
                label: Current Category Monthly Archives
                filename: widget/current_category_monthly_archive_list.mtml
              date_based_author_archives:
                label: Date-Based Author Archives
                filename: widget/date_based_author_archives.mtml
              date_based_category_archives:
                label: Date-Based Category Archives
                filename: widget/date_based_category_archives.mtml
              pages_list:
                label: Page Listing
                filename: widget/pages_list.mtml
              powered_by:
                label: Powered By
                filename: widget/powered_by.mtml
              blogs:
                label: Blog Listing
                filename: widget/blogs.mtml
              monthly_archives_list:
                label: Monthly Archives
                filename: widget/monthly_archives_list.mtml</pre>
<p>出力結果が以下。</p>
<pre class="code" title="ダンプ結果">$VAR1 = bless( {
    'author_name' =&gt; 'wu',
    'base_css' =&gt; undef,
    'registry' =&gt; {
        'l10n_class' =&gt; undef,
        'label' =&gt; sub { &quot;DUMMY&quot; },
        'id' =&gt; 'mtVicunaSimple',
        'l10n_lexicon' =&gt; {
            'ja' =&gt; 'l10n_ja.yaml'
        },
        'description' =&gt; '&lt;__trans phrase=&quot;A MT5 Theme Plugin for Vicuna CMS. This Theme Build for MT Begginers such as Graphical Layout Editing screen.&quot;&gt;'
    },
    '__localized' =&gt; 0,
    'thumbnail_file_small' =&gt; 'vicuna-small.png',
    'optional_components' =&gt; {
        'StyleCatcher' =&gt; '2.41'
    },
    'id' =&gt; 'mtVicunaSimple',
    'elements' =&gt; {
        'default_prefs' =&gt; {
            'require' =&gt; '1',
            'component' =&gt; 'core',
            'data' =&gt; {
                'convert_paras_comments' =&gt; '__default__',
                'convert_paras' =&gt; '__default__',
                'entries_on_index' =&gt; '10',
                'file_extension' =&gt; 'html',
                'archive_type_preferred' =&gt; 'Individual'
            },
            'importer' =&gt; 'default_prefs'
        },
        'blog_static_files' =&gt; {
            'require' =&gt; '1',
            'component' =&gt; 'core',
            'data' =&gt; [ 'themes' ],
            'importer' =&gt; 'blog_static_files'
        },
        'template_set' =&gt; {
            'component' =&gt; 'core',
            'name' =&gt; 'Template Set',
            'data' =&gt; {
                'base_css' =&gt; '0',
                'require' =&gt; '1',
                'label' =&gt; sub { &quot;DUMMY&quot; },
                'base_path' =&gt; 'templates',
                'templates' =&gt; {
                    'index' =&gt; {
                        'archive_index' =&gt; {
                            'outfile' =&gt; 'archives/index.html',
                            'label' =&gt; sub { &quot;DUMMY&quot; },
                            'rebuild_me' =&gt; '1'
                        },
                        'main_index' =&gt; {
                            'outfile' =&gt; 'index.html',
                            'label' =&gt; sub { &quot;DUMMY&quot; },
                            'rebuild_me' =&gt; '1'
                        },
                        'styles' =&gt; {
                            'outfile' =&gt; 'styles.css',
                            'label' =&gt; sub { &quot;DUMMY&quot; },
                            'rebuild_me' =&gt; '1'
                        },
                        'javascript' =&gt; {
                            'outfile' =&gt; 'js/mt.js',
                            'label' =&gt; sub { &quot;DUMMY&quot; },
                            'rebuild_me' =&gt; '1'
                        },
                        'google_sitemap' =&gt; {
                            'outfile' =&gt; 'sitemap.xml',
                            'label' =&gt; sub { &quot;DUMMY&quot; },
                            'rebuild_me' =&gt; '1'
                        },
                        'rsd' =&gt; {
                            'outfile' =&gt; 'rsd.xml',
                            'label' =&gt; sub { &quot;DUMMY&quot; },
                            'rebuild_me' =&gt; '1'
                        },
                        'feed_recent' =&gt; {
                            'outfile' =&gt; 'atom.xml',
                            'label' =&gt; sub { &quot;DUMMY&quot; },
                            'rebuild_me' =&gt; '1'
                        },
                        'user_jquery' =&gt; {
                            'outfile' =&gt; 'js/user_jquery.js',
                            'label' =&gt; sub { &quot;DUMMY&quot; },
                            'rebuild_me' =&gt; '1'
                        }
                    },
                    'system' =&gt; {
                        'comment_listing' =&gt; {
                            'description_label' =&gt; sub { &quot;DUMMY&quot; },
                            'filename' =&gt; 'system/comment_listing.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'comment_response' =&gt; {
                            'description_label' =&gt; sub { &quot;DUMMY&quot; },
                            'filename' =&gt; 'system/comment_response.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'popup_image' =&gt; {
                            'description_label' =&gt; sub { &quot;DUMMY&quot; },
                            'filename' =&gt; 'system/popup_image.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'dynamic_error' =&gt; {
                            'description_label' =&gt; sub { &quot;DUMMY&quot; },
                            'filename' =&gt; 'system/dynamic_error.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'comment_preview' =&gt; {
                            'description_label' =&gt; sub { &quot;DUMMY&quot; },
                            'filename' =&gt; 'system/comment_preview.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'search_results' =&gt; {
                            'description_label' =&gt; sub { &quot;DUMMY&quot; },
                            'filename' =&gt; 'system/search_results.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        }
                    },
                    'page' =&gt; {
                        'page' =&gt; {
                            'filename' =&gt; 'archiveTemplate/page.mtml',
                            'mappings' =&gt; {
                                'page_archive' =&gt; {
                                    'archive_type' =&gt; 'Page',
                                    'file_template' =&gt; '%-c/%-f'
                                }
                            },
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        }
                    },
                    'archive' =&gt; {
                        'category_entry_listing' =&gt; {
                            'filename' =&gt; 'archiveTemplate/category_entry_listing.mtml',
                            'mappings' =&gt; {
                                'category-monthly' =&gt; {
                                    'archive_type' =&gt; 'Category-Monthly',
                                    'file_template' =&gt; '%-c/%y/%m/%i'
                                },
                                'category' =&gt; {
                                    'archive_type' =&gt; 'Category',
                                    'file_template' =&gt; '%-c/%i'
                                }
                            },
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'datebased_entry_listing' =&gt; {
                            'filename' =&gt; 'archiveTemplate/datebase_entry_listing.mtml',
                            'mappings' =&gt; {
                                'monthly' =&gt; {
                                    'archive_type' =&gt; 'Monthly',
                                    'file_template' =&gt; '%y/%m/%i'
                                }
                            },
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        }
                    },
                    'widget' =&gt; {
                        'recent_entry_assets' =&gt; {
                            'filename' =&gt; 'widget/recent_entry_assets.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'search' =&gt; {
                            'filename' =&gt; 'widget/search.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'category_archive_list' =&gt; {
                            'filename' =&gt; 'widget/category_archive_list.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'recent_assets' =&gt; {
                            'filename' =&gt; 'widget/recent_assets.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'current_category_monthly_archive_list' =&gt; {
                            'filename' =&gt; 'widget/current_category_monthly_archive_list.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'date_based_category_archives' =&gt; {
                            'filename' =&gt; 'widget/date_based_category_archives.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'recent_comments' =&gt; {
                            'filename' =&gt; 'widget/recent_comments.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'monthly_archives_list' =&gt; {
                            'filename' =&gt; 'widget/monthly_archives_list.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'about_this_page' =&gt; {
                            'filename' =&gt; 'widget/about_this_page.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'syndication' =&gt; {
                            'filename' =&gt; 'widget/syndication.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'powered_by' =&gt; {
                            'filename' =&gt; 'widget/powered_by.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'tag_cloud' =&gt; {
                            'filename' =&gt; 'widget/tag_cloud.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'links' =&gt; {
                            'filename' =&gt; 'widget/links.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'blogs' =&gt; {
                            'filename' =&gt; 'widget/blogs.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'openid' =&gt; {
                            'filename' =&gt; 'widget/openid.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'pages_list' =&gt; {
                            'filename' =&gt; 'widget/pages_list.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'signin' =&gt; {
                            'filename' =&gt; 'widget/signin.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'recent_entries' =&gt; {
                            'filename' =&gt; 'widget/recent_entries.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'archives_list' =&gt; {
                            'filename' =&gt; 'widget/archives_list.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'calendar' =&gt; {
                            'filename' =&gt; 'widget/calendar.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'author_archive_list' =&gt; {
                            'filename' =&gt; 'widget/author_archive_list.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'creative_commons' =&gt; {
                            'filename' =&gt; 'widget/creative_commons.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'current_author_monthly_archive_list' =&gt; {
                            'filename' =&gt; 'widget/current_author_monthly_archive_list.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'recent_trackbacks' =&gt; {
                            'filename' =&gt; 'widget/recent_trackbacks.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'date_based_author_archives' =&gt; {
                            'filename' =&gt; 'widget/date_based_author_archives.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'monthly_archives_dropdown' =&gt; {
                            'filename' =&gt; 'widget/monthly_archives_dropdown.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        }
                    },
                    'widgetset' =&gt; {
                        'secondary_sidebar' =&gt; {
                            'widgets' =&gt; [ 'Category Archives', 'Monthly Archives', 'Page Listing', 'Syndication', 'OpenID Accepted', 'Powered By' ],
                            'order' =&gt; '1000',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'primary_sidebar' =&gt; {
                            'widgets' =&gt; [ 'Calender', 'Search', 'Recent Entries', 'Recent Comments', 'Recent Trackbacks', 'Recent Assets', 'Tag Cloud', 'About This Page' ],
                            'order' =&gt; '1000',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        }
                    },
                    'module' =&gt; {
                        'next_entry_link_detailed' =&gt; {
                            'filename' =&gt; 'templateModule/next_entry_link_detailed.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'comment_detail' =&gt; {
                            'filename' =&gt; 'templateModule/comment_detail.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'entry_summary' =&gt; {
                            'filename' =&gt; 'templateModule/entry_summary.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'related_entries' =&gt; {
                            'filename' =&gt; 'templateModule/related_entries.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'comments' =&gt; {
                            'filename' =&gt; 'templateModule/comments.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'topic_path' =&gt; {
                            'filename' =&gt; 'templateModule/topic_path.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'html_head' =&gt; {
                            'filename' =&gt; 'templateModule/html_head.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'sidebar' =&gt; {
                            'filename' =&gt; 'templateModule/sidebar.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'next_entry_link_simple' =&gt; {
                            'filename' =&gt; 'templateModule/next_entry_link_simple.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'banner_footer' =&gt; {
                            'filename' =&gt; 'templateModule/banner_footer.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'global_navigation' =&gt; {
                            'filename' =&gt; 'templateModule/global_navigation.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'trackbacks' =&gt; {
                            'filename' =&gt; 'templateModule/trackbacks.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'headline' =&gt; {
                            'filename' =&gt; 'templateModule/headline.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        },
                        'banner_header' =&gt; {
                            'filename' =&gt; 'templateModule/banner_header.mtml',
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        }
                    },
                    'individual' =&gt; {
                        'entry' =&gt; {
                            'filename' =&gt; 'archiveTemplate/entry.mtml',
                            'mappings' =&gt; {
                                'entry_archive' =&gt; {
                                    'archive_type' =&gt; 'Individual',
                                    'file_template' =&gt; '%y/%m/%-f'
                                }
                            },
                            'label' =&gt; sub { &quot;DUMMY&quot; }
                        }
                    }
                },
                'stylecatcher_libraries' =&gt; {
                    'mtvicuna_skin' =&gt; {
                        'description_label' =&gt; sub { &quot;DUMMY&quot; },
                        'url' =&gt; '{{support}}theme_static/mtVicunaSimple/',
                        'label' =&gt; sub { &quot;DUMMY&quot; }
                    },
                    'mtvicuna_legacy_skin' =&gt; {
                        'description_label' =&gt; sub { &quot;DUMMY&quot; },
                        'url' =&gt; 'http://code.zelazny.mydns.jp/themes/mtVicuna-legacy/',
                        'label' =&gt; sub { &quot;DUMMY&quot; }
                    },
                    'hashim_skin' =&gt; {
                        'description_label' =&gt; sub { &quot;DUMMY&quot; },
                        'url' =&gt; 'http://kita2.net/stylelib/',
                        'label' =&gt; sub { &quot;DUMMY&quot; }
                    }
                }
            },
            'importer' =&gt; 'template_set'
        }
    },
    'menu_modification' =&gt; undef,
    'version' =&gt; '2.4.3',
    'thumbnail_file' =&gt; 'vicuna.png',
    'path' =&gt; 'C:\\usr\\local\\httpd\\cgi-bin\\iliad\\plugins\\mtVicunaSimple',
    'required_components' =&gt; undef,
    'thumbnail_file_medium' =&gt; 'vicuna-medium.png',
    'author_link' =&gt; 'http://3ping.org/',
    'label' =&gt; $VAR1-&gt;{'registry'}{'label'},
    'type' =&gt; 'registry',
    'class' =&gt; 'blog'
},'MT::Theme' ); </pre>
<p>気になった箇所は、随所にある「'label' =&gt; sub { &quot;DUMMY&quot; }」の部分。
もしかしてこれは、L10N変換されるからダミーになっているのかな？</p>
<p><ins datetime="2012-03-20T20:08:17+09:00">コイツは何だろう？「menu_modification' => undef」何かメニューに対して操作ができるのかな？</ins></p>]]></description>
<link>http://www.zelazny.mydns.jp/archives/002851.php?utm_source=WolaWolaRSS&amp;utm_medium=rss</link>
<guid>http://www.zelazny.mydns.jp/archives/002851.php</guid>
<category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
<category domain="http://www.sixapart.com/ns/types#tag">MT</category>
<category domain="http://www.sixapart.com/ns/types#tag">Theme</category>
<category domain="http://www.sixapart.com/ns/types#tag">ダンプ</category>
<pubDate>Tue, 20 Mar 2012 19:41:57 +0900</pubDate>
</item>
<item>
<title>URLエンコードされたテキストをデコードするdecode_urlモディファイア</title>
<description><![CDATA[<p>コレもちっちゃなプラグインです。
何故か、「encode_url=&quot;1&quot;」や「escape=&quot;url&quot;」はあるのに、「decode_url=&quot;1&quot;」が無いなと思ったので、作ってみました。（もしかしてセキュリティ的な理由？）
URLエンコードされたテキストをデコードするグローバルモディファイア・プラグインです。
「<a href="https://github.com/naoaki011/mt-plugin-decode-url" title="naoaki011/mt-plugin-decode-url">naoaki011/mt-plugin-decode-url</a>」
もちろんダイナミック・パブリッシング対応です。Perlでは「MT::Util::decode_url」をまんま使用しています。PHPでは「urldecode()」を使ってます。</p>
]]></description>
<link>http://www.zelazny.mydns.jp/archives/002850.php?utm_source=WolaWolaRSS&amp;utm_medium=rss</link>
<guid>http://www.zelazny.mydns.jp/archives/002850.php</guid>
<category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
<category domain="http://www.sixapart.com/ns/types#tag">decode_url</category>
<category domain="http://www.sixapart.com/ns/types#tag">MT</category>
<category domain="http://www.sixapart.com/ns/types#tag">スタティック</category>
<category domain="http://www.sixapart.com/ns/types#tag">ダイナミック・パブリッシング</category>
<category domain="http://www.sixapart.com/ns/types#tag">デコード</category>
<category domain="http://www.sixapart.com/ns/types#tag">プラグイン</category>
<category domain="http://www.sixapart.com/ns/types#tag">モディファイア</category>
<pubDate>Tue, 20 Mar 2012 16:09:41 +0900</pubDate>
</item>
<item>
<title>エントリーのフォーマット指定を出力するEntryConvertBreaks</title>
<description><![CDATA[<p>エントリーのフォーマット指定（「なし」「改行を変換」「リッチテキスト」など）を出力するタグ <strong>MTEntryConvertBreaks</strong> を提供するプラグインを書きました。
「<a href="https://github.com/naoaki011/mt-plugin-entry-convertbreaks" title="naoaki011/mt-plugin-entry-convertbreaks">naoaki011/mt-plugin-entry-convertbreaks</a>」
機能は単純に、エントリーテーブルのconvert_breaksを出力しているだけ。特に表示用の変換とかしていません。（気が向けばやるかも知れない）</p>
<p>もともと、現在盛んに修正中の「<a href="http://www.zelazny.mydns.jp/vicuna/" title="mt.Vicuna">mt.Vicuna</a>」の為に書いたプラグインなのですが、まぁ単体で使う用途もあるかと公開しました。
以下のような使い方を想定しています。</p>
<pre class="code">&lt;MTIf tag=&quot;EntryConvertBreaks&quot; eq=&quot;richtext&quot;&gt;
 &lt;$MTEntryBody$&gt;
&lt;MTElse&gt;
 &lt;MTIf tag=&quot;EntryConvertBreaks&quot; like=&quot;/^(0|__default__)$/&quot;&gt;
  &lt;$MTEntryBody filters=&quot;__default__&quot;$&gt;
 &lt;/MTIf&gt;
&lt;/MTIf&gt;</pre>
<p>一応、ダイナミック・パブリッシング用のコードも書いてあり、どちらでも動作します。</p>]]></description>
<link>http://www.zelazny.mydns.jp/archives/002849.php?utm_source=WolaWolaRSS&amp;utm_medium=rss</link>
<guid>http://www.zelazny.mydns.jp/archives/002849.php</guid>
<category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
<category domain="http://www.sixapart.com/ns/types#tag">EntryConvertBreaks</category>
<category domain="http://www.sixapart.com/ns/types#tag">MT</category>
<category domain="http://www.sixapart.com/ns/types#tag">エントリー</category>
<category domain="http://www.sixapart.com/ns/types#tag">ダイナミック・パブリッシング</category>
<category domain="http://www.sixapart.com/ns/types#tag">プラグイン</category>
<category domain="http://www.sixapart.com/ns/types#tag">リッチテキスト</category>
<category domain="http://www.sixapart.com/ns/types#tag">改行を変換する</category>
<pubDate>Tue, 20 Mar 2012 09:49:03 +0900</pubDate>
</item>
<item>
<title>検索/置換はさっさとListingFrameworkで書きなおされるべき</title>
<description><![CDATA[<p>MT5.2へ向けて動き出しているようですが、MT5.1を製品としてみた時に、まとまりが無いと思える箇所があります。
「ツール」にある「検索/置換」です。
これ、すごい便利な機能で、一括置換とかいろんな場面で昔から重宝に利用させてもらっています。</p>
<p>ただこれって、機能を言葉でまとめると、「オブジェクトの<strong>特定の</strong>要素を検索して、絞り込み結果を表示し、要素内の文字列の置換処理が出来る」となります。
この最初の部分って、MT5.1には別に存在しますよねぇ。そう「リスティングフレームワーク」です。</p>
<p>「検索/置換」と「リスティングフレームワーク」の利用について比較した場合に、以下の傾向が有るように思います。
MT5.0までを使用していたユーザーは、要素の検索にリスティングフレームワークではなく、こちらを使うことが多いようです。
昔ながらの機能ですし、思いっきり右上にダイレクト検索の入力ができるようになっていますからね。
以前特定の記事を探すときに、「検索/置換」を使うように（構築業者などに）教えられたというのも、多分にある気がします。</p>
<p>以下MT5.1下で、「検索/置換」ではなく「リスティングフレームワーク」を使った方が良いと思う理由。</p>
<ul>
	<li>検索条件に、複数条件を組み合わせられます。</li>
	<li>複雑な検索条件をフィルターとして保存可能です。</li>
	<li>プラグインで拡張した要素など、様々な情報をリストに表示できます。</li>
	<li>上記の情報の追加のために、通常の一覧画面用のリスティングフレームワーク対応以外に必要ありません。</li>
</ul>
<p>ざっと考えても、このぐらい有利になる情報があります。
テンプレートなどのリスティングフレームワーク化されていない要素はどうするのかとか、置換処理で対象フィールドをどう指定するのかとか、解決しなければならない問題はいろいろありそうですが、せめて「管理画面右上の検索アイコンから操作する検索」を、リスティングフレームワークにしてもいいのじゃないかと思います。</p>]]></description>
<link>http://www.zelazny.mydns.jp/archives/002842.php?utm_source=WolaWolaRSS&amp;utm_medium=rss</link>
<guid>http://www.zelazny.mydns.jp/archives/002842.php</guid>
<category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
<category domain="http://www.sixapart.com/ns/types#tag">MT5.1</category>
<category domain="http://www.sixapart.com/ns/types#tag">リスティングフレームワーク</category>
<category domain="http://www.sixapart.com/ns/types#tag">検索/置換</category>
<pubDate>Sun, 11 Mar 2012 15:48:04 +0900</pubDate>
</item>
<item>
<title>PowerCMSでTinyMCEのtemplateプラグインを使うには</title>
<description><![CDATA[<p>もう何度も、この機能を使うたびに調べ直してるので、メモしておくことにした。
実は、そんな余裕はないんだけどね。<img src="http://www.zelazny.mydns.jp/mt-static/plugins/InsertIcon/images/pp_02.gif" class="mt_icon" width="17" height="17" alt="汗" title="汗" /></p>
<h2>TinyMCEのtemplateプラグイン</h2>
<p>「<a href="http://www.tinymce.com/index.php" title="TinyMCE - Home">TinyMCE</a>」で、「template（定形のHTML）」を挿入する機能を追加する<a href="http://www.tinymce.com/wiki.php/Plugins" title="TinyMCE - Plugins">TinyMCEプラグイン</a>。
TinyMCEのオリジナルに初めから組み込まれているで、有効化すればすぐ使える。
解説：「<a href="http://www.tinymce.com/wiki.php/Plugin:template" title="TinyMCE - template">TinyMCE - template</a>」
こっちはそれを日本語訳した、奇特な方のブログ：「<a href="http://tech.ludicmind.net/cms/movabletype/tinymcepluginstemplate.html#more" title="TinyMCE:Plugins/Template - tech.ludicmind.net">TinyMCE:Plugins/Template - tech.ludicmind.net</a>」</p>
<p>基本はベタのHTMLで、<em>アイテム挿入と連携</em>とかそういうものではない。
まぁ最低限の、日時の挿入とかあるけどその程度。定型文を変数で置換する機能（メールの署名みたいな感じ？）も付いてるけど、MTから使ってる時はあまり意味がない（置換したのを登録するべき）と思う。
あっ、でも置き換え時に、定義した関数も呼び出せるみたいだから、なにか美味しい使い方とかあるのかなぁ？</p>
<h2>PowerCMSのTinyMCEの場合</h2>
<p><a href="http://www.powercms.jp/" title="PowerCMS ver.3 - Movable Typeベースの多機能CMS">PowerCMS</a>のTinyMCEライブラリは、「mt-static/plugins/TinyMCE/lib/」以下にtinymceの名前で、元のTinyMCEのものがマルっと入っている。もちろん、templateなどのプラグインもそのまま存在する。
なので、使うために必要なのは「ボタンを表示させる」「HTMLテンプレート作成する」「テンプレートファイルリストを指定する」「テンプレートファイルリストを作成する」となる。</p>
<p>内容的には、単独でTinyMCEのライブラリを使う場合も、PowerCMSからTinyMCEの機能を使う場合も同じなのだが、設定に必要な操作は若干違う。
この機能を設定するためには、ライブラリのファイルをゴリゴリ書き換える必要があると思われているようだが、これはPowerCMSの設定欄の変更と、MTのテンプレート作成で出来てしまう。つまりMTの管理画面上ですべてを管理可能という事。</p>
<h3>ボタンを表示させる</h3>
<p><a rel="lightbox" href="http://www.zelazny.mydns.jp/images/2012/03/WS003392.JPG"><img alt="PoweCMSのTinyMCEプラグイン設定" src="http://www.zelazny.mydns.jp/assets_c/2012/03/WS003392-thumb-450x227-1651.jpg" width="450" height="227" /></a></p>
<p>これはシステムのプラグイン設定画面から。「advanced_buttons1:」～「advanced_buttons5:」までのどれかに、「template」を追加すれば、ボタンが表示される。項目はカンマ区切りで、セパレータに「|」が使えるようになっているが、まぁ見て解るでしょ。</p>
<p>「あれ、表示されない？」という場合は、すぐ上の「plugins」を確認する。これは読み込むTinyMCEのプラグインを指定している所で、自分でpluginを追加した場合は、ココに追加して有効にする。何もいじっていない場合は、その中に「template」が含まれているはずだが、もしなかったら誰かが消したのかも知れない。それでも表示されない場合は、そもそものインストールに問題が有りそうな気がするよ。</p>
<h3>HTMLテンプレート作成する</h3>
<p>挿入されるテンプレートを作成する。まぁスニペット的なHTMLのコードの一部なので、そこはご自由に。
こいつをMTテンプレートとして登録してしまう事で、修正をFTPなんかを使わずに管理画面から行えるようになる。
ファイルの書き出し先は、まとめて公開ディレクトリ以下の特定の場所にしておくとイイ。例えばサイトルートの「tinymce」フォルダとか。</p>
<p>気持ちの問題だけど、TinyMCEライブラリの近くに置きたくて「mt-static」以下に配置したりなんかすると、実はセキュリティフィックスの更新なんかで入れ替えた時に、あれれということになりがち。mt-staticも差し替えることがあるからね。
そういう意味では、TinyMCEエディタ用のCSSなんかも、公開側においたほうが安心。また、コレとは関係ないけど
「<a href="http://www.movabletype.jp/documentation/appendices/config-directives/supportdirectoryurl.html" title="SupportDirectoryURL | 環境変数リファレンス">SupportDirectoryURL</a>」「<a href="http://www.movabletype.jp/documentation/appendices/config-directives/supportdirectorypath.html" title="SupportDirectoryPath | 環境変数リファレンス">SupportDirectoryPath</a>」「PowerCMSFilesDir」も指定して、MTディレクトリ外にしておくと、とっさに「あ、忘れてた」とかは無くなるはず。</p>
<p>あと、このHTMLテンプレートは、必ずしも拡張子「html」で出力しなくても動作するので、状況によっては「txt」とかにしても大丈夫。Abs2Relプラグインで相対パス変換を、拡張子指定して除外させるとかも可能です。</p>
<h3>テンプレートファイルリストを作成する</h3>
<p>先に作った「HTMLテンプレート」の名前と場所を指定するファイルを、こちらもMTテンプレートとして作成します。
公開パスの「tinymce」の下にテンプレートがあるとしたら、下のような内容で。</p>
<pre class="code">var tinyMCETemplateList = [
    [&quot;template1&quot;,   &quot;&lt;$MTBlogRelativeURL$&gt;tinymce/temp1.html&quot;, &quot;temp1&quot;],
    [&quot;template2&quot;,   &quot;&lt;$MTBlogRelativeURL$&gt;tinymce/temp2.html&quot;, &quot;temp2&quot;]
];</pre>
<p>「プルダウン表示される名称」「HTMLテンプレートのパス」「備考？」という順で記述します。３番目のパラメーターは関係ない気も・・・</p>
<p>こいつも、同じように公開パスの「tinymce」に保存します（まぁ好き好きなのですが、まとまっている方が後で解りやすいですよね）。ファイル名は「template_list.js」がデフォルトのようですが、後述の指定時にファイル名ごと指定していますので、別な名前でもよさそうです。</p>
<h3>テンプレートファイルリストを指定する</h3>
<p><a rel="lightbox" href="http://www.zelazny.mydns.jp/images/2012/03/WS003393.JPG"><img alt="WS003393.JPG" src="http://www.zelazny.mydns.jp/assets_c/2012/03/WS003393-thumb-450x127-1653.jpg" width="450" height="127" /></a></p>
<p>ここら辺、tinymceのJSを書き換えて追記するとの説明が、多々見つかるのですが、PowerCMSの場合はこのTinyMCEに関する初期設定のようなものをプラグイン設定から行えるようになっています。
上記のようにシステムのプラグイン設定画面の最後の部分「高度な設定」に以下のように設定すればいいです。</p>
<pre class="code">tinymce_editor.init['template_external_list_url'] = '/tinymce/template_list.js';</pre>
<p>これで、PoweCMSのTinyMCEでのtemplateプラグイン機能が使用できるようになります。</p>]]></description>
<link>http://www.zelazny.mydns.jp/archives/002848.php?utm_source=WolaWolaRSS&amp;utm_medium=rss</link>
<guid>http://www.zelazny.mydns.jp/archives/002848.php</guid>
<category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
<category domain="http://www.sixapart.com/ns/types#tag">PowerCMS</category>
<category domain="http://www.sixapart.com/ns/types#tag">template</category>
<category domain="http://www.sixapart.com/ns/types#tag">TinyMCE</category>
<category domain="http://www.sixapart.com/ns/types#tag">プラグイン</category>
<pubDate>Sun, 04 Mar 2012 16:47:10 +0900</pubDate>
</item>
</channel>
</rss>
