<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>かたつむりくんのWWW</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/" />
    <link rel="self" type="application/atom+xml" href="http://www.tinybeans.net/blog/atom.xml" />
    <id>tag:www.tinybeans.net,2008-08-18:/blog//1</id>
    <updated>2010-08-30T15:40:45Z</updated>
    <subtitle>Walk sloWly in the Web - Web業界とは無縁の会社にいながら独学でWeb Creator を目指す！「Update Me, Everyday! 」 </subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 5.02</generator>
<entry>
    <title>MT Zen-Coding - 0.0.5 アップデート</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2010/08/31-004042.html" />
    <id>tag:www.tinybeans.net,2010:/blog//1.383
tag:www.tinybeans.net,2010:/blog//1.324
tag:www.tinybeans.net,2010:http://www.tinybeans.net/blog//1.383</id>
    <published>2010-08-30T15:40:42Z</published>
    <updated>2010-08-30T15:40:45Z</updated>
    <summary>当ブログで公開している「MT Zen-Coding」をアップデートしました。今更の対応になって申し訳ないのですが、Movable Type 5.02 に対応しました。 また、お試しブックマークレットも...</summary>
    <author>
        <name>tinybeans</name>
    </author>
        <category term="1002_プラグイン" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="movabletypeplugin" label="movabletype-plugin" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p>当ブログで公開している「<a href="/blog/download/mt-plugin/mt-zen-coding.html">MT Zen-Coding</a>」をアップデートしました。今更の対応になって申し訳ないのですが、Movable Type 5.02 に対応しました。</p>
<p>また、お試しブックマークレットも合わせて変更しました。</p>
<p>プラグインの詳細とダウンロードは以下からお願いします。</p>
<ul>
	<li><a href="/blog/download/mt-plugin/mt-zen-coding.html">MT Zen-Coding</a></li>
</ul>]]>
    </content>
</entry>
<entry>
    <title>XAMPP for Mac + MT でログに書き出すデバッグ中に max_allowed_packet なんちゃらとエラー</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2010/08/27-130033.html" />
    <id>tag:www.tinybeans.net,2010:/blog//1.382
tag:www.tinybeans.net,2010:/blog//1.324
tag:www.tinybeans.net,2010:http://www.tinybeans.net/blog//1.382</id>
    <published>2010-08-27T04:00:33Z</published>
    <updated>2010-08-27T04:17:04Z</updated>
    <summary>Movable Type のプラグインを作る際に、システムログに書き出して色々チェックしたりするんですけど、そのときよく「Got a packet bigger than &apos;max_allowed_p...</summary>
    <author>
        <name>tinybeans</name>
    </author>
        <category term="1000_Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="debug" label="debug" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype" label="movabletype" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mysql" label="mysql" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p>Movable Type のプラグインを作る際に、システムログに書き出して色々チェックしたりするんですけど、そのときよく「Got a packet bigger than 'max_allowed_packet' bytes」ってエラーが出ていたんですね。</p>
<p>それでこれを解決する方法が分かったのでメモしておきます。ちなみに、XAMPP for Mac + Movable Type という環境です。</p>
<p>/Applications/XAMPP/xamppfiles/etc/my.cnf の中の、</p>
<pre class="config"><code># The MySQL server
[mysqld]
</code></pre>
<p>というのの少し下にある、</p>
<pre class="ocnfig"><code>max_allowed_packet = 1M
</code></pre>
<p>の値を変更します。とりあえず今回は、</p>
<pre class="config"><code>max_allowed_packet = 10M
</code></pre>
<p>としました。最大16Mまでのようです。変更を保存して、XAMPP をリスタートすればOKです。</p>
<pre class="comand"><code>/Applications/XAMPP/xamppfiles/xampp restart
</code></pre>
<p>以上です。以下の記事を参考にさせていただきました。ありがとうございました。</p>
<ul>
	<li><a href="http://www.multiburst.net/sometime-php/2010/06/max-allowed-packet-on-mysql/">[MySQL] 大きなファイルをアップロードするときの注意点(max_allowed_packet) - Sometime PHP</a></li>
</ul>]]>
    </content>
</entry>
<entry>
    <title>jQuery Multi-checkbox 0.03 アップデート - 「ラベル名は日本語、保存される値は英語」を指定可能に</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2010/08/27-083538.html" />
    <id>tag:www.tinybeans.net,2010:/blog//1.381
tag:www.tinybeans.net,2010:/blog//1.324
tag:www.tinybeans.net,2010:http://www.tinybeans.net/blog//1.381</id>
    <published>2010-08-26T23:35:38Z</published>
    <updated>2010-08-27T01:14:04Z</updated>
    <summary>当ブログで公開している「jQuery Multi-checkbox - テキストフィールドを複数選択チェックボックスに変えるjQueryプラグイン」をアップデートしました。 今回のアップデートで、「ラ...</summary>
    <author>
        <name>tinybeans</name>
    </author>
        <category term="0104_jQuery" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="jquerymulticheckbox" label="jQuery Multi-checkbox" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jqueryplugins" label="jQuery Plugins" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p>当ブログで公開している「<a href="/blog/download/jquery-plugin/jquery-multi-checkbox.html">jQuery Multi-checkbox - テキストフィールドを複数選択チェックボックスに変えるjQueryプラグイン</a>」をアップデートしました。</p>
<p>今回のアップデートで、「ラベル名は日本語で、保存される値は英語で」というのが可能になりました。</p>
<p>詳細は以下のページの「<a href="/blog/download/jquery-plugin/jquery-multi-checkbox.html#usage3">label オプションで値を設定する２（ラベルと保存される値を変えたい場合）</a>」をご確認ください。</p>
<ul>
	<li><a href="/blog/download/jquery-plugin/jquery-multi-checkbox.html">jQuery Multi-checkbox - テキストフィールドを複数選択チェックボックスに変えるjQueryプラグイン</a></li>
</ul>]]>
    </content>
</entry>
<entry>
    <title>jQuery Search Box 0.03 アップデート - 検索対象を選択可能に！もちろんカスタムフィールドもOK</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2010/08/19-211501.html" />
    <id>tag:www.tinybeans.net,2010:/blog//1.380
tag:www.tinybeans.net,2010:/blog//1.324
tag:www.tinybeans.net,2010:http://www.tinybeans.net/blog//1.380</id>
    <published>2010-08-19T12:15:01Z</published>
    <updated>2010-08-19T13:05:16Z</updated>
    <summary>昨夜公開したばかりの、かつ今朝アップデートしたばかりの「jQuery で実現する高速キーワード検索とタグ検索（Movable Type 版）- jQuery Search Box」なんですが、またまた...</summary>
    <author>
        <name>tinybeans</name>
    </author>
        <category term="0104_jQuery" scheme="http://www.sixapart.com/ns/types#category" />
        <category term="1000_Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="jqueryplugins" label="jQuery Plugins" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jquerysearchbox" label="jQuery Search Box" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype" label="movabletype" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletypetemplate" label="movabletype-template" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p>昨夜公開したばかりの、かつ今朝アップデートしたばかりの「<a href="/blog/2010/08/19-003955.html">jQuery で実現する高速キーワード検索とタグ検索（Movable Type 版）- jQuery Search Box</a>」なんですが、またまたアップデートしました。すいません、どうも公開してから再び燃えてくる性分のようで。。。</p>
<p>今回は、検索対象を一つに限定できる機能を追加しました。</p>]]>
        <![CDATA[<h2>検索対象を選択って？</h2>
<p>例えば、検索対象の search_data.js が次のような構成だったとします。</p>
<pre class="javascript"><code>
{&quot;item&quot;:[
    {
        &quot;title&quot;:&quot;hogehoge&quot;,
        &quot;keyword&quot;:&quot;hogehoge&quot;,
        &quot;tag&quot;:&quot;hogehoge&quot;,
        &quot;catchphrase&quot;:&quot;hogehoge,&quot;
        &quot;body&quot;:&quot;hogehoge&quot;,
        &quot;more&quot;:&quot;hogehoge&quot;
    },
    {
        ...
    }
]}
</code></pre>
<p>この場合、title だけ検索や keyword だけ検索というのができるようになります。もちろんカスタムフィールドにも対応しています。上の例で言えば、「catchphrase」というのがカスタムフィールドです。</p>
<h2>limitFields オプションの指定</h2>
<p>検索対象を絞り込むためのセレクトボックスは、limitFields オプションに連想配列を指定することで自動で生成されます。</p>
<p>連想配列は、次のようなルールで設定します。</p>
<pre class="javascript"><code>{
    &quot;search_data.jsで指定した各項目のキー&quot;:&quot;その項目の名前&quot;
}
</code></pre>
<p>例えば、先ほど例示した構成の search_data.js であれば、limitFields オプションは次のように指定します。</p>
<pre class="jquery"><code>limitFields : {
    &quot;title&quot;:&quot;タイトル&quot;,
    &quot;keyword&quot;:&quot;キーワード&quot;,
    &quot;catchphrase&quot;:&quot;キャッチフレーズ,&quot;
    &quot;body&quot;:&quot;本文&quot;,
    &quot;more&quot;:&quot;追記&quot;
}
</code></pre>
<p>これにより、以下のようなソースのセレクトボックスが、jQuerySearchBox を適用させたセレクタ要素の最後に追加されます。</p>
<pre class="html"><code>&lt;select id=&quot;limit_fields&quot;&gt;
    &lt;option selected=&quot;selected&quot; value=&quot;&quot;&gt;すべての項目&lt;/option&gt;
    &lt;option value=&quot;title&quot;&gt;タイトル&lt;/option&gt;
    &lt;option value=&quot;keyword&quot;&gt;キーワード&lt;/option&gt;
    &lt;option value=&quot;catchphrase&quot;&gt;キャッチフレーズ&lt;/option&gt;
    &lt;option value=&quot;body&quot;&gt;本文&lt;/option&gt;
    &lt;option value=&quot;more&quot;&gt;追記&lt;/option&gt;
&lt;/select&gt;
</code></pre>
<p class="image"><img alt="limitFields01.png" src="/blog/images/limitFields01.png" width="221" height="146" /></p>
<p>これで完成です。このセレクトボックスで選択した項目だけが検索対象になります。</p>
<p>ということで、以下の記事も更新しておきました。すいませんが、ダウンロードは以下からお願いいたします。</p>
<ul>
	<li><a href="/blog/2010/08/19-003955.html#download_zip">jQuery で実現する高速キーワード検索とタグ検索（Movable Type 版）- jQuery Search Box</a></li>
</ul>]]>
    </content>
</entry>
<entry>
    <title>jQuery Search Box 0.02 アップデート</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2010/08/19-094423.html" />
    <id>tag:www.tinybeans.net,2010:/blog//1.379
tag:www.tinybeans.net,2010:/blog//1.324
tag:www.tinybeans.net,2010:http://www.tinybeans.net/blog//1.379</id>
    <published>2010-08-19T00:44:23Z</published>
    <updated>2010-08-19T06:44:00Z</updated>
    <summary>昨夜公開したばかりの「jQuery で実現する高速キーワード検索とタグ検索（Movable Type 版）- jQuery Search Box」なんですが、検索用の JSON の読み込みが完了する前...</summary>
    <author>
        <name>tinybeans</name>
    </author>
        <category term="0104_jQuery" scheme="http://www.sixapart.com/ns/types#category" />
        <category term="1000_Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="jqueryplugins" label="jQuery Plugins" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jquerysearchbox" label="jQuery Search Box" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype" label="movabletype" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletypetemplate" label="movabletype-template" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p>昨夜公開したばかりの「<a href="/blog/2010/08/19-003955.html">jQuery で実現する高速キーワード検索とタグ検索（Movable Type 版）- jQuery Search Box</a>」なんですが、検索用の JSON の読み込みが完了する前にクリックされると何も起こらない状態だんたんですね。</p>
<p>個人的には、まあいいかなーと思ってしまっていたんですが、<a href="https://twitter.com/BUN">@BUN</a> さんから次のようなつぶやきを頂きました。</p>
<blockquote cite="https://twitter.com/BUN/status/21500572366" title="Twitter / 國分 亨: @tinybeans 例えばですけど。searchB ...より引用">
<p>@tinybeans 例えばですけど。searchBtnクリック時にdisable属性をボタンに付加して。onComplete時に、それを除去する・・・みたいにしたら、読み込み終わるまで重複のクリックできないように、なりませんかね？？？</p>
</blockquote>
<p><cite><a href="https://twitter.com/BUN/status/21500572366">Twitter / 國分 亨: @tinybeans 例えばですけど。searchB ...</a></cite></p>
<p>最終的には、</p>
<ol>
	<li>読み込み前にクリックイベントを bind して、var readed = &quot;0&quot; して、</li>
	<li>そこでクリックがあるとreaded++して、</li>
	<li>読み込み前のイベントを unbind して検索イベントを与えて、</li>
	<li>readed > 0 だったら検索イベントを実行する</li>
</ol>
<p>というように、ちょっと違う実装になりましたが、思考的にヒントになりました。ありがとうございました！</p>
<p>ということで、以下の記事も更新しましたので、よろしくお願いいたします。</p>
<ul>
	<li><a href="/blog/2010/08/19-003955.html">jQuery で実現する高速キーワード検索とタグ検索（Movable Type 版）- jQuery Search Box</a></li>
</ul>]]>
    </content>
</entry>
<entry>
    <title>jQuery で実現する高速キーワード検索とタグ検索（Movable Type 版）- jQuery Search Box</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2010/08/19-003955.html" />
    <id>tag:www.tinybeans.net,2010:/blog//1.378
tag:www.tinybeans.net,2010:/blog//1.324
tag:www.tinybeans.net,2010:http://www.tinybeans.net/blog//1.378</id>
    <published>2010-08-18T15:39:55Z</published>
    <updated>2010-08-24T05:23:11Z</updated>
    <summary>このブログの検索を自作の jQuery プラグイン「jQuery Search Box」に変えてみました。 まだまだイマイチなコードなんですが、とりあえずキーワード検索に加えてタグ検索も出来るようにし...</summary>
    <author>
        <name>tinybeans</name>
    </author>
        <category term="0104_jQuery" scheme="http://www.sixapart.com/ns/types#category" />
        <category term="1000_Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="jqueryplugins" label="jQuery Plugins" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jquerysearchbox" label="jQuery Search Box" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype" label="movabletype" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletypetemplate" label="movabletype-template" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p>このブログの検索を自作の jQuery プラグイン「jQuery Search Box」に変えてみました。</p>
<p>まだまだイマイチなコードなんですが、とりあえずキーワード検索に加えてタグ検索も出来るようにしたので、記事にしてみます。タグ検索の方は結構お気に入りです。</p>]]>
        <![CDATA[<h2>検索用JSONの準備</h2>
<p>jQuery Search Box プラグインは、あらかじめ用意された JSON ファイルを読み込み、その内容を検索する仕組みです。</p>
<p>したがって、検索させたい内容をすべて含んだ JSON ファイルが必要となります。Movable Type であれば、スタティックなファイルを自由に書き出せるので、そう言った意味で「Movable Type 版」と言い、以下では MT を前提に説明しますが、他の CMS やスタティックなサイトでも、JSON ファイルが用意できれば問題ありません。</p>
<p>さて、まずは MT でインデックステンプレートを作成します。作成するテンプレートの情報は次のようにします。</p>
<dl>
<dt>テンプレート名</dt>
<dd>検索用JSON（自由に設定してください）</dd>
<dt>出力ファイル名</dt>
<dd>search_data.js（変更しても構いません）</dd>
<dt>テンプレートの種類</dt>
<dd>カスタムインデックステンプレート</dd>
<dt>公開</dt>
<dd>スタティック（既定）</dd>
</dl>
<p>テンプレートの内容は、次の２パターンを用意しました。</p>
<h3>インデックステンプレートの作成（ブログ記事のみの場合）</h3>
<pre class="mtml"><code>{&quot;item&quot;:[
&lt;mt:entries lastn=&quot;0&quot;&gt;
&lt;mt:setvarBlock name=&quot;item{title}&quot;&gt;&lt;mt:entryTitle&gt;&lt;/mt:setvarBlock&gt;
&lt;mt:setvarBlock name=&quot;item{url}&quot;&gt;&lt;mt:entryPermalink&gt;&lt;/mt:setvarBlock&gt;
&lt;mt:setvarBlock name=&quot;item{tag}&quot;&gt;,&lt;mt:entryTags glue=&quot;,&quot;&gt;&lt;mt:tagName regex_replace=&quot;/ |　/g&quot;,&quot;%20&quot;&gt;&lt;/mt:entryTags&gt;,&lt;/mt:setvarBlock&gt;
&lt;mt:setvarBlock name=&quot;item{body}&quot;&gt;&lt;mt:entryBody remove_html=&quot;1&quot; regex_replace=&quot;/\n|\t| |　/g&quot;,&quot;&quot;&gt;&lt;/mt:setvarBlock&gt;
&lt;mt:setvarBlock name=&quot;item{more}&quot;&gt;&lt;mt:entryMore remove_html=&quot;1&quot; regex_replace=&quot;/\n|\t| |　/g&quot;,&quot;&quot;&gt;&lt;/mt:setvarBlock&gt;
&lt;mt:var name=&quot;item&quot; to_json=&quot;1&quot;&gt;&lt;mt:unless __last__&gt;,&lt;/mt:unless __last__&gt;
&lt;/mt:entries&gt;
]}
</code></pre>
<h3>インデックステンプレートの作成（ウェブページも含む場合）</h3>
<pre class="mtml"><code>{&quot;item&quot;:[
&lt;mt:entries lastn=&quot;0&quot;&gt;
&lt;mt:setvarBlock name=&quot;item{title}&quot;&gt;&lt;mt:entryTitle&gt;&lt;/mt:setvarBlock&gt;
&lt;mt:setvarBlock name=&quot;item{url}&quot;&gt;&lt;mt:entryPermalink&gt;&lt;/mt:setvarBlock&gt;
&lt;mt:setvarBlock name=&quot;item{tag}&quot;&gt;,&lt;mt:entryTags glue=&quot;,&quot;&gt;&lt;mt:tagName regex_replace=&quot;/ |　/g&quot;,&quot;%20&quot;&gt;&lt;/mt:entryTags&gt;,&lt;/mt:setvarBlock&gt;
&lt;mt:setvarBlock name=&quot;item{body}&quot;&gt;&lt;mt:entryBody remove_html=&quot;1&quot; regex_replace=&quot;/\n|\t| |　/g&quot;,&quot;&quot;&gt;&lt;/mt:setvarBlock&gt;
&lt;mt:setvarBlock name=&quot;item{more}&quot;&gt;&lt;mt:entryMore remove_html=&quot;1&quot; regex_replace=&quot;/\n|\t| |　/g&quot;,&quot;&quot;&gt;&lt;/mt:setvarBlock&gt;
&lt;mt:var name=&quot;item&quot; to_json=&quot;1&quot;&gt;,
&lt;/mt:entries&gt;
&lt;mt:pages lastn=&quot;0&quot;&gt;
&lt;mt:setvarBlock name=&quot;item{title}&quot;&gt;&lt;mt:pageTitle&gt;&lt;/mt:setvarBlock&gt;
&lt;mt:setvarBlock name=&quot;item{url}&quot;&gt;&lt;mt:pagePermalink&gt;&lt;/mt:setvarBlock&gt;
&lt;mt:setvarBlock name=&quot;item{tag}&quot;&gt;,&lt;mt:pageTags glue=&quot;,&quot;&gt;&lt;mt:tagName regex_replace=&quot;/ |　/g&quot;,&quot;%20&quot;&gt;&lt;/mt:pageTags&gt;,&lt;/mt:setvarBlock&gt;
&lt;mt:setvarBlock name=&quot;item{body}&quot;&gt;&lt;mt:pageBody remove_html=&quot;1&quot; regex_replace=&quot;/\n|\t| |　/g&quot;,&quot;&quot;&gt;&lt;/mt:setvarBlock&gt;
&lt;mt:setvarBlock name=&quot;item{more}&quot;&gt;&lt;mt:pageMore remove_html=&quot;1&quot; regex_replace=&quot;/\n|\t| |　&quot;,&quot;&quot;&gt;&lt;/mt:setvarBlock&gt;
&lt;mt:var name=&quot;item&quot; to_json=&quot;1&quot;&gt;&lt;mt:unless __last__&gt;,&lt;/mt:unless __last__&gt;
&lt;/mt:pages&gt;
]}
</code></pre>
<h3>構文チェック</h3>
<p>jQuery 1.4 から、JSON の解釈がより厳密になっているようなので（たぶん）、テンプレートから書き出された JSON の構文が正しいかどうか、一度「<a href="http://jslint.com/">JSLint, The JavaScript Code Quality Tool</a>」などでチェックすることをお勧めします。</p>
<blockquote cite="http://jquery14.com/day-01/jquery-14" title="jQuery 1.4 Released - Full Release Notes - The 14 Days of jQueryより引用">
<p><strong>Strict JSON parsing, using native JSON.parse</strong></p>
<p>jQuery 1.3 and earlier used JavaScript's eval to evaluate incoming JSON. jQuery 1.4 uses the native JSON parser if available. It also validates incoming JSON for validity, so malformed JSON (for instance {foo: &quot;bar&quot;}) will be rejected by jQuery in jQuery.getJSON and when specifying "json" as the dataType of an Ajax request.</p>
</blockquote>
<p><cite><a href="http://jquery14.com/day-01/jquery-14">jQuery 1.4 Released - Full Release Notes - The 14 Days of jQuery</a></cite></p>
<p>これを再構築して準備完了です。</p>
<h2 id="download_zip">jQuery Search Box のダウンロード</h2>
<ul>
	<li class="download"><a href="http://code.google.com/p/jquery-search-box/downloads/list">Downloads - jquery-search-box - Google Code</a></li>
</ul>
<p class="note">※Google Code に移動しました。</p>
<p>ファイルをダウンロードして解凍し、jQuerySearchBox フォルダをサーバーにアップロードします。フォルダ内のそれぞれのファイルのアップロード先はご自由にどうぞ。今は、このブログを前提として、以下のようにアップロードします。</p>
<ul>
	<li class="folder">ドメインルート/blog<ul>
	<li class="folder">js<ul>
	<li class="folder">jQuerySearchBox<ul>
	<li class="file">jQuerySearchBox.js</li>
	<li class="file">loading.gif</li>
	<li class="file">search_data.js</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
<h2>読み込みと適用</h2>
<p>次に、jQuerySearchBox.js を jQuery 本体の後に読み込みます。</p>
<pre class="html"><code>&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;/blog/js/jQuerySearchBox/jQuerySearchBox.js&quot;&gt;&lt;/script&gt;
</code></pre>
<p>さて、いよいよプラグインを実行するわけですが、jQuerySearchBox.js では、検索ボックス（input:text）と検索ボタン（input:button）が自動で生成されます（オプションで既存の要素を使うことも可能）。したがって、検索ボックスと検索ボタンを入れるボックスだけ用意して、そのボックス（セレクタ）に対して実行すればOKです。</p>
<p>このブログでは、dd#search_content の中に検索ボックスを表示したいので、その場合は、次のようなコードを読み込んだファイルより後に記述することになります。</p>
<pre class="jquery"><code>$('#search_content').jQuerySearchBox({
    // オプション設定（下記参照）
});
</code></pre>
<h2>オプション設定</h2>
<p>さて、このプラグインを実行するには、いくつかのオプションを設定する必要があります。デフォルトのままで良いものは省略してOKです（以下のそれぞれの値がデフォルト値です）。</p>
<h3>searchBoxCreate : true</h3>
<p>falseに設定すると、検索ボックスと検索ボタンは生成されません。</p>
<h3>searchTextID : &quot;search_text&quot;</h3>
<p>searchBoxCreate : false にした場合は、jQuerySearchBox.js で利用する検索ボックス（input:text）の id 属性値を指定します。</p>
<h3>searchBtnID : &quot;search_submit&quot;</h3>
<p>searchBoxCreate : false にした場合は、jQuerySearchBox.js で利用する検索ボタン（input:button）の id 属性値を指定します。</p>
<h3>searchBtn : &quot;Search&quot;</h3>
<p>自動で生成される検索ボタンのテキストを指定します。</p>
<h3>closeBtn : &quot;Close&quot;</h3>
<p>検索結果一覧の一番下に、その一覧を閉じるボタンが表示されます。そのテキストを指定します。</p>
<h3>loadingImgPath : &quot;/jQuerySearchBox/loading.gif&quot;</h3>
<p>アップロードしたローディング中の画像のパスを表示します。ドメインルートからの絶対パスか、絶対URLで指定してください。</p>
<h3>searchDataPath : &quot;/jQuerySearchBox/search_data.js&quot;</h3>
<p>MT のインデックステンプレートで書き出した search_data.js のパスを表示します。ドメインルートからの絶対パスか、絶対URLで指定してください。</p>
<h3>searchTagsClass : &quot;search_tags&quot;</h3>
<p>タグ検索も利用する場合、各ダグの a 要素に付けられている class 名を指定します。タグ検索については後述します。</p>
<h3>resultID : &quot;search_result&quot;</h3>
<p>検索結果を表示させるボックスの id 属性値を指定します。</p>
<h3>resultBox : &quot;&lt;div id='search_result_box'/&gt;&quot;</h3>
<p>上記の検索結果を表示させるボックス（#resultID）に入れる、検索結果一覧を表示するボックスを html で指定します。id 属性の指定を忘れないように注意してください。上記の resultID とこの resultBox の関係をみると次のようになります。</p>
<pre class="html"><code>&lt;div id=&quot;search_result&quot;&gt;
    &lt;div id='search_result_box'&gt;この中に一覧を表示&lt;/div&gt;
&lt;/div&gt;
</code></pre>
<p>このように、ここで html を指定するようにしたのは、この部分を自由に入れ子にしたり出来た方が、ブログのデザインやCSSを変更しなくても済むからです。実際に、このブログでは以下のようにしています。</p>
<pre class="jquery"><code>resultBox : '&lt;div id=&quot;search_result_wrapper&quot; class=&quot;content&quot;&gt;&lt;div id=&quot;search_result_box&quot; class=&quot;contentBody&quot;&gt;&lt;/div&gt;&lt;/div&gt;',
</code></pre>
<p>なお、このコード中の #search_result_wrapper も後で指定します。</p>
<h3>resultBoxID : &quot;search_result_box&quot;</h3>
<p>上記の resultBox で指定した html の id 属性値を指定します。</p>
<h3>resultWraperID : &quot;&quot;</h3>
<p>デフォルトは空ですが、上記の例の、このブログの場合のように、resultBox が入れ子になるときは、一番外側の要素に id を付け、その id 属性値を resultWraperID に指定します。</p>
<p>このブログの場合は、resultWraperID : 'search_result_wrapper' となります。</p>
<h3>resultBoxInsert : &quot;prepend&quot; // prepend,append,html</h3>
<p>検索結果を表示する方法を指定します。</p>
<ul>
	<li>prepend : resultID で指定した要素に、元々ある内容は残したまま、その先頭に挿入します。</li>
	<li>append : resultID で指定した要素に、元々ある内容は残したまま、その最後に追加します。</li>
	<li>html : resultID で指定した要素の内容を上書きして表示します。</li>
</ul>
<h3>cookie : false</h3>
<p>true を指定すると、ページを移動しても検索キーワードが検索ボックスの中に残ります。約15時間保存されます。</p>
<h3>cache : false</h3>
<p>true を指定すると、search_data.js をキャッシュします。</p>
<h3>limitFields : null</h3>
<p>limitFields オプションに連想配列を指定すると、検索対象を限定するためのセレクトボックスが生成されます。詳細は、以下の記事をご覧ください。</p>
<ul>
	<li><a href="/blog/2010/08/19-211501.html">jQuery Search Box 0.03 アップデート - 検索対象を選択可能に！もちろんカスタムフィールドもOK</a></li>
</ul>
<h2>絞り込みも可能な高速タグ検索</h2>
<p>このタグ検索はちょっとウリかもしれません。個人的にはすごく気に入っています。</p>
<p>デモはこのブログのタグ検索そのものですが（2010-08-18現在）、まず、タグクラウド（このブログの場合はタグリスト）でタグをクリックすると、</p>
<p class="image"><img alt="searchTags01.png" src="/blog/images/searchTags01.png" width="226" height="214" /></p>
<p>検索結果に、「今クリックしたタグ（画像ではmovabletype）が付いた記事に付いている他のタグ」が表示されます。</p>
<p class="image"><img alt="searchTags02.png" src="/blog/images/searchTags02.png" width="460" height="234" /></p>
<p>この一覧のタグをクリックすると、複数のタグで絞り込むことが出来ます。</p>
<h2>タグ検索用にタグクラウドを修正</h2>
<p>このタグ検索を利用するには、タグ検索の a 要素に「search_tags」という class を追加するか、もともと付いている class があれば、その class 属性値を searchTagsClass オプションで指定します。</p>
<pre class="mtml"><code>&lt;a class=&quot;search_tags&quot; href=&quot;&lt;$mt:TagSearchLink$&gt;&quot;&gt;&lt;$mt:TagName$&gt;&lt;/a&gt;
</code></pre>
<p>これで設置完了です。</p>
<h2>ちょっと覚えておいて</h2>
<p><ins id="unreaded_event_ins" datetime="2010-08-19T09:23:28+09:00">読み込み完了前の処理にも対応しました。</ins></p>
<del id="unreaded_event_del" style="display:none;">
<p>この jQuery Search Box は、非同期で search_data.js を読み込んでいます。そして、読み込みが完了した時点で、検索ボックス等のクリックイベントが付与されます。クリックしてから検索データを読み込むわけではないので、より高速な検索が出来るようになっていると思います。</p>
<p>その反面、万が一、search_data.js の読み込みが完了する前に検索ボタンがクリックされた場合、検索ボタンを生成するパターンの場合（searchBoxCreate : true）は何も起こりませんし、元からある検索ボタンに適用させた場合searchBoxCreate : falseは、元のボタンのときの動作になります。</p>
</del>
<p><del datetime="2010-08-19T09:25:46+09:00">したがって、</del>JavaScript off の環境でも確実に検索機能を実行させたい場合は、<ins datetime="2010-08-19T09:25:59+09:00"></ins>searchBoxCreate : false にして、MT のデフォルトの検索機能に対して searchTextID と searchBtnID の２つのオプションをしていして、処理を上書きした方がいいかも知れません。</p>
<script type="text/javascript">
$("#unreaded_event_ins")
    .css("cursor","pointer")
    .click(function(){
    $("#unreaded_event_del").slideToggle();
});
</script>
<p>以上です。</p>]]>
    </content>
</entry>
<entry>
    <title>$.MTAppFieldSort() 利用時のエラーの回避方法と MTAppjQuery 0.11 リリース</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2010/08/14-081245.html" />
    <id>tag:www.tinybeans.net,2010:/blog//1.376
tag:www.tinybeans.net,2010:/blog//1.324
tag:www.tinybeans.net,2010:http://www.tinybeans.net/blog//1.376</id>
    <published>2010-08-13T23:12:45Z</published>
    <updated>2010-08-13T23:24:30Z</updated>
    <summary>「MTAppjQuery - Movable Type 5 の管理画面をjQueryでカスタマイズしやすくするプラグイン」を利用しているとき、テンプレートの編集画面で、ちゃんとテンプレート名を入力して...</summary>
    <author>
        <name>tinybeans</name>
    </author>
        <category term="1002_プラグイン" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="movabletypeplugin" label="movabletype-plugin" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mtappjquery" label="MTAppjQuery" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p>「<a href="/blog/download/mt-plugin/mtapp-jquery.html">MTAppjQuery - Movable Type 5 の管理画面をjQueryでカスタマイズしやすくするプラグイン</a>」を利用しているとき、テンプレートの編集画面で、ちゃんとテンプレート名を入力しているにもかかわらず「テンプレート名を設定してください。」というアラートが出る不具合が発生していました。</p>
<p><p class="image"><img alt="MTAppFieldSort-insertID01.png" src="http://www.tinybeans.net/blog/images/MTAppFieldSort-insertID01.png" width="331" height="129" /></p></p>
<p>これは、MTAppjQuery の中の jQuery プラグイン「$.MTAppFieldSort()」が、ブログ記事の作成・編集画面のフィールドを並べ替えることを前提としていたために起こるものでした。</p>
<p>このエラーの対処法と、ブログ記事の作成・編集画面以外でもフィールドを並べ替えるための insertID オプションについて説明します。</p>]]>
        <![CDATA[<h2>エラーを回避する</h2>
<p>まず、上記のような不具合を回避するためには、$.MTAppFieldSort() をブログ記事の作成・編集画面に限定して適用させればOKです。</p>
<p>ブログ記事の作成・編集画面に限定するには、以下のような if 文で囲みます。</p>
<pre class="jquery"><code>if($('body#edit-entry').length){
    $.MTAppFieldSort({sort: 'foo,bar'});
}
</code></pre>
<p>なお、ページごとに限定する if 文を作るには、$.MTAppDebug() を使うと便利です。</p>
<ul>
	<li><a href="/blog/2010/08/13-211309.html">$.MTAppDebug() の使い方 - 管理画面のカスタマイズの手助けを</a></li>
</ul>
<h2>なぜ不具合があったのか</h2>
<p>そもそも、上記のようにテンプレートの編集画面で、ちゃんとテンプレート名を入力しているにもかかわらず「テンプレート名を設定してください。」というアラートが出る不具合はなぜ発生したのでしょうか。</p>
<p>これは、$.MTAppFieldSort() が、ブログ記事の作成・編集画面のフィールドを並べ替えることを前提としていたため、並べ替えたときに、「div#main-content-inner」の頭から挿入していく仕様になっているからです。</p>
<p>ここで、ブログ記事の作成・編集画面のソースの枠組みを見てみると以下のようになっています。</p>
<pre class="html"><code>div#container
    div#content
        div#content-body
            form#entry_form
                div#main-content
                    div#main-content-inner
                        各フィールド
</code></pre>
<p>つまり、仕様通り「div#main-content-inner」の中で並び替えても、form要素の中なので問題ないわけです。</p>
<p>次に、テンプレートの作成・編集画面のソースの枠組みを見てみます。</p>
<pre class="html"><code>div#container
    div#content
        div#content-body
            div#main-content
                div#main-content-inner
                    form#template-listing-form
                        各フィールド
</code></pre>
<p>ブログ記事の作成・編集画面と似ているんですが、こちらは「div#main-content-inner」の中に form要素があるので、$.MTAppFieldSort() で「div#main-content-inner」の頭から並べてしまうと、form要素の外へ各フィールドが出てしまうことになります。</p>
<p>なので、「保存」等をしたときに form 要素の中にテンプレート名のフィールドが見つからないので、「テンプレート名を設定してください。」というアラートが出てしまったわけです。</p>
<h2>それ以外の管理画面のフィールドを並べ替える</h2>
<p>つまり、このようにテンプレートの作成・編集画面でフィールドを並べ替えるときは、「form#template-listing-form」の中で並び替えなければならないことになります。</p>
<p>そのような場合は、次のように insertID オプションに並べ替える要素の id 属性値を設定します。</p>
<pre class="jquery"><code>// テンプレートの編集
if($('body#edit-template-index').length){
    $.MTAppFieldSort({
        sort: 'revision-note,outfile,title',
        insertID: 'template-listing-form'
    });
}
</code></pre>
<p>このように、各管理画面のソースは微妙に違っているので、あとは個別にソースを確認する必要があります。</p>
<p>以上です。</p>]]>
    </content>
</entry>
<entry>
    <title>$.MTAppDebug() の使い方 - 管理画面のカスタマイズの手助けを</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2010/08/13-211309.html" />
    <id>tag:www.tinybeans.net,2010:/blog//1.377
tag:www.tinybeans.net,2010:/blog//1.324
tag:www.tinybeans.net,2010:http://www.tinybeans.net/blog//1.377</id>
    <published>2010-08-13T12:13:09Z</published>
    <updated>2010-08-13T23:36:34Z</updated>
    <summary>「MTAppjQuery - Movable Type 5 の管理画面をjQueryでカスタマイズしやすくするプラグイン」に同梱されている jQuery プラグインのうち、今日は $.MTAppDeb...</summary>
    <author>
        <name>tinybeans</name>
    </author>
        <category term="1002_プラグイン" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="movabletypeplugin" label="movabletype-plugin" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mtappjquery" label="MTAppjQuery" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p>「<a href="/blog/download/mt-plugin/mtapp-jquery.html">MTAppjQuery - Movable Type 5 の管理画面をjQueryでカスタマイズしやすくするプラグイン</a>」に同梱されている jQuery プラグインのうち、今日は $.MTAppDebug() について説明します。</p>]]>
        <![CDATA[<h2>$.MTAppDebug() とは</h2>
<p>$.MTAppDebug() は、管理画面をカスタマイズする作業そのものを手助けする機能です。$.MTAppDebug() を有効にすると以下のような機能が管理画面に適用されます。</p>
<p>なお、この $.MTAppDebug() については、僕が作業している中で不便に感じたところを潰していこうという趣旨のものなので、逐次機能を追加していくかも知れません。</p>
<p>したがって、この記事は頻繁に更新されるかも知れません（し、されないかもしれません）。</p>
<h3>各ページ固有の情報を表示</h3>
<p class="image"><a href="/blog/images/MTAppDebug01.png"><img alt="MTAppDebug01.png" src="/blog/assets_c/2010/08/MTAppDebug01-thumb-450x31-1083.png" width="450" height="31" /></a></p>
<p>各ページのヘッダー部分に、そのページ固有の以下の情報を表示します。これらの固有の情報は、ページごと、ブログごと、ユーザーごとなどの条件分岐に利用できます。</p>
<ul>
	<li>body 要素の id 属性値（無い場合もあり）</li>
	<li>ブログID（var blogID = number：JavaScript の変数）</li>
	<li>ユーザーID（var authorID = number：JavaScript の変数）</li>
</ul>
<h3>各ページ固有の条件分岐文を表示</h3>
<p class="image"><a href="/blog/images/MTAppDebug02.png"><img alt="MTAppDebug02.png" src="/blog/assets_c/2010/08/MTAppDebug02-thumb-450x31-1085.png" width="450" height="31" /></a></p>
<p>各ページのヘッダー部分に、以下のようなリンクを表示します。これらをクリックすると、以下のような if 文が管理画面のメッセージとして表示されます（ if 文はサンプルです）。コピペして利用すると便利です。</p>
<dl>
<dt>Only this page（このページのみに適用）</dt>
<dd><pre class="jquery"><code>// ブログ記事の作成
if($('body#edit-entry').length){}
</code></pre></dd>
<dt>Only this page and blog（このページとブログのみに適用）</dt>
<dd><pre class="jquery"><code>// ブログ記事の作成
if($('body#edit-entry').length &amp;&amp; blogID == 2){}
</code></pre></dd>
<dt>Only this page and blog and author（このページとブログとユーザーのみに適用）</dt>
<dd><pre class="jquery"><code>// ブログ記事の作成
if($('body#edit-entry').length &amp;&amp; blogID == 2 &amp;&amp; authorID == 1){}
</code></pre></dd>
</dl>
<p class="image"><img alt="MTAppDebug03.png" src="/blog/images/MTAppDebug03.png" width="202" height="64" /></p>
<h3>ブログ記事やカテゴリ等の ID を表示</h3>
<p>ブログ記事一覧などの一覧画面で、各ブログ記事などの ID を表示します。</p>
<p class="image"><img alt="MTAppDebug04.png" src="/blog/images/MTAppDebug04.png" width="397" height="280" /></p>
<p>現在、対応している一覧ページは以下の通りです。</p>
<ul>
	<li>ブログ記事一覧</li>
	<li>カテゴリ一覧</li>
	<li>タグ一覧</li>
	<li>ウェブページ一覧</li>
	<li>フォルダ一覧</li>
</ul>
<h2>使い方</h2>
<p>user.js に、次の１行を記述すればOKです。</p>
<pre class="jquery"><code>$.MTAppDebug();
</code></pre>
<p>以上です。プラグインの詳細やダウンロードは以下からお願いします。</p>
<ul>
	<li><a href="/blog/download/mt-plugin/mtapp-jquery.html">MTAppjQuery - Movable Type 5 の管理画面をjQueryでカスタマイズしやすくするプラグイン</a></li>
</ul>]]>
    </content>
</entry>
<entry>
    <title>MTAppjQuery 0.10 リリース - スライドメニューの不具合を修正</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2010/08/04-181558.html" />
    <id>tag:www.tinybeans.net,2010:/blog//1.375
tag:www.tinybeans.net,2010:/blog//1.324
tag:www.tinybeans.net,2010:http://www.tinybeans.net/blog//1.375</id>
    <published>2010-08-04T09:15:58Z</published>
    <updated>2010-08-04T09:22:15Z</updated>
    <summary>「MTAppjQuery - Movable Type 5 の管理画面をjQueryでカスタマイズしやすくするプラグイン」のバージョン 0.10 をリリースしました。 今回はスライドメニューでブログI...</summary>
    <author>
        <name>tinybeans</name>
    </author>
        <category term="1002_プラグイン" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="movabletypeplugin" label="movabletype-plugin" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mtappjquery" label="MTAppjQuery" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p>「<a href="/blog/download/mt-plugin/mtapp-jquery.html">MTAppjQuery - Movable Type 5 の管理画面をjQueryでカスタマイズしやすくするプラグイン</a>」のバージョン 0.10 をリリースしました。</p>
<p>今回はスライドメニューでブログIDがおかしくなっていた不具合を修正しました。すいませんでした。</p>
<p>また、バージョンアップ時に誤って上書きしないようにと、ユーザーが編集するファイルを「 _user.css 」「 _user.js 」としていましたが、フォルダごとアップロードした場合（ほとんどそうしますよね）はまったくの無意味だと気付きまして、mt-static/plugins にアップロードするフォルダ名を「 _MTAppjQuery 」とすることにしました。</p>
<p>アップロード後に注意してリネームするか、user ファイル以外を個別にアップロードしてください。</p>
<p>また、$.MTAppDebug() という jQuery プラグインも、ちょっと便利そうになってきたので後日記事をアップしようと思います。</p>]]>
    </content>
</entry>
<entry>
    <title>.@junnama さんのギリギリトーク?! - 第2回広島MT学会inFUKUYAMA開催</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2010/08/04-054650.html" />
    <id>tag:www.tinybeans.net,2010:/blog//1.374
tag:www.tinybeans.net,2010:/blog//1.324
tag:www.tinybeans.net,2010:http://www.tinybeans.net/blog//1.374</id>
    <published>2010-08-03T20:46:50Z</published>
    <updated>2010-08-03T20:56:35Z</updated>
    <summary>先日の MTDDC Tokyo に続き、今度は広島県で「第2回広島MT学会inFUKUYAMA」が開催されます。 その内容は、藤本壱氏と野田純生氏によるセッションと、Pronetパートナーディスカッシ...</summary>
    <author>
        <name>tinybeans</name>
    </author>
        <category term="1000_Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
        <category term="セミナー" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="movabletype" label="movabletype" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="seminar" label="seminar" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p>先日の <a href="http://www.movabletype.jp/blog/mtddc_tokyo_theme_report.html">MTDDC Tokyo</a> に続き、今度は広島県で「<a href="http://creatorz.org/news/2010/07/8creatorz.html">第2回広島MT学会inFUKUYAMA</a>」が開催されます。</p>
<p>その内容は、藤本壱氏と野田純生氏によるセッションと、Pronetパートナーディスカッション、ライトニングトークということで、MT ファンとしてはとても気になります。</p>
<p>藤本さんは、Movable Type 5のテーマ機能についてお話しされるようです（<a href="http://www.h-fj.com/blog/archives/2010/08/02-125659.php">「第8回Creatorz × 第2回広島MT学会」は今週末開催 - The blog of H.Fujimoto</a>）。</p>
<p>野田さんは、自身のブログの記事「<a href="http://junnama.alfasado.net/online/2010/08/movable_type_on_buisinessweb.html">「Movable Type on Business」〜地方の小規模組織が勝ち抜くWeb構築ビジネスの戦略と施策〜 - Junnama Online</a>」で話す予定の内容を紹介しています。その中で、</p>
<blockquote cite="http://junnama.alfasado.net/online/2010/08/movable_type_on_buisinessweb.html" title="「Movable Type on Business」〜地方の小規模組織が勝ち抜くWeb構築ビジネスの戦略と施策〜 - Junnama Onlineより引用">
<p>東京では話せない(話せないことはないですが)、「地方の、東京の、MTの本当のところ」を話したいと思います。今回は中継はないんですよね? ギリギリトークで行きたいと思います。</p>
</blockquote>
<p>とのこと。非常に気になります。また、「<a href="http://alfasado.net/contents/news/201007301200.html">Movable Typeベースの電子書籍編集・出版ソリューション「ePublisher」を発表</a>」についても、どうやらこのイベントで初披露となるようです。</p>
<blockquote cite="http://twitter.com/junnama/status/20230215847" title="Twitter / Junnama Noda: 週末、広島でお披露目することにします。RT @ali ...より引用">
<p>週末、広島でお披露目することにします。RT @aliasmori デモが見たい。＞ Movable Typeベースの電子書籍編集・出版ソリューション「ePublisher」を8月10日より提供開始 <a href="http://bit.ly/bI1p45">http://bit.ly/bI1p45</a></p>
</blockquote>
<p>僕も時間とお金が許すなら是非とも参加したいイベントです。お近くにお住まいの方、旅費を会社の経費で落とせる方など是非とも参加を検討されるといいと思います。</p>]]>
    </content>
</entry>
<entry>
    <title>MTDDC Tokyo テーマ編でライトニングトークしました</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2010/08/03-084750.html" />
    <id>tag:www.tinybeans.net,2010:/blog//1.373
tag:www.tinybeans.net,2010:/blog//1.324
tag:www.tinybeans.net,2010:http://www.tinybeans.net/blog//1.373</id>
    <published>2010-08-02T23:47:50Z</published>
    <updated>2010-08-02T23:47:56Z</updated>
    <summary>2010年 7月31日、マイクロソフト株式会社 新宿本社にて開催された「MTDDC Tokyo テーマ編」に参加してきました。今回の MTDDC は MT5で追加された「テーマ機能」にフォーカスしたも...</summary>
    <author>
        <name>tinybeans</name>
    </author>
        <category term="1000_Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
        <category term="セミナー" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="movabletype" label="movabletype" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletypetheme" label="movabletype-theme" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="seminar" label="seminar" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p>2010年 7月31日、マイクロソフト株式会社 新宿本社にて開催された「MTDDC Tokyo テーマ編」に参加してきました。今回の MTDDC は MT5で追加された「テーマ機能」にフォーカスしたものでした。</p>
<p>会社の関係の催しがあり、残念ながら途中からの参加になってしまいましたが、最後の荒木さんのセッションは聞けたので、それだけでも十分に価値があったと思います。</p>
<p>さらに、飛び入りでライトニングトーク（LT）に参加させていただきました。</p>
<p>LT では、Movable Type 5 の管理画面を簡単にカスタマイズできるプラグイン「<a href="/blog/download/mt-plugin/mtapp-jquery.html">MTAppjQuery</a>」を紹介させていただきました。</p>
<p>デモがメインだったので、本来 LT の持ち時間は５分であるところを、５分近くもオーバーしてしまったようでした。司会の高橋さんの取り計らいにより最後まで続けさせていただきました。すいません！＆ありがとうございました！
</p>
]]>
        <![CDATA[<h2>MTAppjQueryについて</h2>
<p>LT 中でのチラッと言いましたが、このプラグインのために jQuery プラグインを書いているとなんだか凄く楽しくなってきちゃいます。</p>
<p>MT はサイトの「作りやすさ」はもう抜群だと思うので、あとはそこに管理画面の「使いやすさ」を付け加えれば、さらに良い CMS になると思います。</p>
<p>あ、MT のデフォルトの管理画面が使いにくいワケではありません。デフォルトのままでも使いやすいと思っています。</p>
<p>しかし、管理画面というのは、やはり案件ごとに理想の形が違ってくるでしょう。僕の CMS の理想の管理画面は、更新担当者さんが何も考えなくても更新できる、というか、どこに何を入れるんだっけとか余計なことは考えず中身のコンテンツだけ考えてればいい、というものです。</p>
<p>それを実現するのは予算的にも難しい場合が多いかもしれませんが、そこに手軽に近づけられるようになればいいなーと思います。</p>
<p>あと、自分が使いやすくしたいという単純な欲求も大きいかもｗ</p>
<p>MTDDC のテーマから少しそれてしまいました。。</p>
<ul>
	<li><a href="/blog/download/mt-plugin/mtapp-jquery.html#search_word=mtapp">MTAppjQuery - Movable Type 5 の管理画面をjQueryでカスタマイズしやすくするプラグイン</a></li>
</ul>
<h2>やっぱり荒木さんはすごい！</h2>
<p>僕がじっくり聞けたのは最後の荒木さんのセッションだったのですが、やっぱり荒木さんはすごい！本当にそう思います。内容がすごいのはもちろんですが、何しろ説明が丁寧で分かりやすいです。</p>
<p>今回の MTDDC では、141枚ものスライドを用意してとても丁寧に解説してくださいました。テーマのカスタマイズの内容は、僕も激しくオススメな本『<a href="http://www.amazon.co.jp/gp/product/4839934134?ie=UTF8&amp;tag=sufingbeginne-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4839934134">Movable Type 5 プロフェッショナルガイド</a>』とダブる部分もありますが、こちらの本は基本的に文字がメインなので、今回のスライドの図と合わせてもう一度読み直したいと思います。</p>
<p>この荒木さんのスライドの前に、『<a href="http://www.amazon.co.jp/gp/product/4797358831?ie=UTF8&tag=tinybeans-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4797358831">Movable Type 5実践テクニック</a>』の著者の一人、蒲生さんのセッションのスライドを読んでから荒木さんのスライドに行くと、より分かりやすいようです。</p>
<p>以下のページで両方確認することができます。</p>
<ul>
	<li><a href="http://www.koikikukan.com/archives/2010/08/01-235555.php">MT DDC TOKYO（テーマ編）スライド: 小粋空間</a></li>
</ul>
<p>ちなみに、荒木さんの本の感想は以下に書いてあります。</p>
<ul>
	<li><a href="/blog/2010/06/24-152637.html#search_word=yujiro">.@yujiro さんの『Movable Type 5 プロフェッショナルガイド』が良すぎる件（その２）</a></li>
	<li><a href="/blog/2010/05/29-105552.html#search_word=yujiro">.@yujiro さんの『Movable Type 5 プロフェッショナルガイド』が良すぎる件（その１）</a></li>
</ul>
<p>僕は見逃してしまった藤本さんのセッションについては以下に書いてあります。復習させていただきます！</p>
<ul>
	<li><a href="http://www.h-fj.com/blog/archives/2010/08/01-165252.php">MTDDC Tokyoテーマ編終了 - The blog of H.Fujimoto</a></li>
</ul>
<h2>MT5 のテーマについて</h2>
<p>MT5 で追加されたテーマ機能ですが、使いこなせば本当に便利だと思います。バックアップのため、制作の効率化のため、配布するためなど色々な用途が考えられます。</p>
<p>テーマといってもデザインとテンプレートのセットだけでなく、プラグインやその他もろもろの情報をすべてひとまとめに出来るのはすごく大きいと思います。</p>
<p>僕も何かテーマを作って、<a href="http://mtcontest.jp/">Movable Type コンテスト 2010</a>の中のテーマ部門に是非とも応募してみたいと思います！</p>]]>
    </content>
</entry>
<entry>
    <title>$.fn.MTAppInlineEdit() - MTAppjQuery で簡単に Inline Edit にする</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2010/07/27-130010.html" />
    <id>tag:www.tinybeans.net,2010:/blog//1.372
tag:www.tinybeans.net,2010:/blog//1.324
tag:www.tinybeans.net,2010:http://www.tinybeans.net/blog//1.372</id>
    <published>2010-07-27T04:00:10Z</published>
    <updated>2010-07-27T04:38:49Z</updated>
    <summary>MTAppjQuery プラグインに同梱されている jQuery プラグインのうち、今日は「$.fn.MTAppInlineEdit()」について説明します。バージョン 0.09 で追加しました。 M...</summary>
    <author>
        <name>tinybeans</name>
    </author>
        <category term="1002_プラグイン" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="movabletypeplugin" label="movabletype-plugin" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mtappjquery" label="MTAppjQuery" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p><a href="/blog/download/mt-plugin/mtapp-jquery.html">MTAppjQuery プラグイン</a>に同梱されている jQuery プラグインのうち、今日は「$.fn.MTAppInlineEdit()」について説明します。バージョン 0.09 で追加しました。</p>
<p>MT5 から、自分で追加したフィールドの class 属性に「.mt-edit-field」を付けると、Inline Edit とという状態になります。これは、「編集」ボタンを押すとテキストフィールドが現れ、編集できるようになるやつで、ブログ記事のベースネーム欄の様な感じになります。</p>
<p class="image"><img alt="mtapp-inlineedit.png" src="/blog/images/mtapp-inlineedit.png" width="172" height="65" /></p>
<p class="image"><img alt="inline-edit-slide.png" src="http://www.tinybeans.net/blog/images/inline-edit-slide.png" width="450" height="336" /></p>
<p><a href="http://www.slideshare.net/sakk/mtddc-201025-tokyo-brand-new-api">MTDDC 2010.2.5 Tokyo - Brand new API</a></p>
<p>$.fn.MTAppInlineEdit() を利用すると、これとほぼ同様の動作を実現できます。</p>]]>
        <![CDATA[<h2>$.fn.MTAppInlineEdit() と $.fn.mtEditInput() の違い</h2>
<p>MT5 標準の $.fn.mtEditInput() は、値が保存されていないときは、そのままフィールドを表示し、値が保存されると「編集」ボタンになります。また、対象となるのは input 要素に限定されていますね。</p>
<p>一方、$.fn.MTAppInlineEdit() は、上記の標準の機能の他に、値が保存されていなくても編集ボタンにしておくことができます。</p>
<p>また、対象となる要素も input に限らず textarea でも大丈夫です。</p>
<h2>使い方</h2>
<p>基本的な書き方は次のようになります。</p>
<pre class="jquery"><code>$('セレクタ').MTAppInlineEdit({
    edit:'編集', // 必須
    always:1 // 任意
});
</code></pre>
<h3>edit （必須）</h3>
<p>ボタンに表示されるテキストを設定します。</p>
<h3>always （任意）</h3>
<p>1 を設定すると、フォームに値が保存されていない場合でも、編集ボタンにします。</p>
<p>以上です。</p>
<p>これと似た機能が <a href="/blog/2010/07/05-123330.html#op_edit">$.MTAppCustomize() の edit オプション</a>でも可能です。そちらも合わせてご覧ください。</p>]]>
    </content>
</entry>
<entry>
    <title>$.MTAppInCats() の使い方 - MTAppjQuery でカテゴリごとにUIを変える</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2010/07/26-231600.html" />
    <id>tag:www.tinybeans.net,2010:/blog//1.370
tag:www.tinybeans.net,2010:/blog//1.324
tag:www.tinybeans.net,2010:http://www.tinybeans.net/blog//1.370</id>
    <published>2010-07-26T14:16:00Z</published>
    <updated>2010-07-26T14:16:14Z</updated>
    <summary>「MTAppjQuery - Movable Type 5 の管理画面をjQueryでカスタマイズしやすくするプラグイン」に $.MTAppInCats() というjQueryプラグインを追加しました...</summary>
    <author>
        <name>tinybeans</name>
    </author>
        <category term="1002_プラグイン" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="movabletypeplugin" label="movabletype-plugin" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mtappjquery" label="MTAppjQuery" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p>「<a href="/blog/download/mt-plugin/mtapp-jquery.html">MTAppjQuery - Movable Type 5 の管理画面をjQueryでカスタマイズしやすくするプラグイン</a>」に $.MTAppInCats() というjQueryプラグインを追加しました。現在のバージョンは 0.09 です。</p>
<p class="image"><img src="/blog/images/MTAppInCats-01.png" alt="MTAppInCats-01.png" /></p>
<p>$.MTAppInCats() を利用することで、ブログ記事作成・編集画面の UI をカテゴリごとにカスタマイズすることができます。きっと、一部の人には待望の機能かと。</p>
]]>
        <![CDATA[<h2>使い方</h2>
<p>使い方は簡単で、次のように user.js に書けばOKです。</p>
<pre class="jquery"><code>$.MTAppInCats({
    categories: '1,2,3', // カテゴリIDを指定。複数の場合はカンマ区切り
    code      : function(){
        // ここに指定したカテゴリのみに適用させたいカスタマイズを書く
    }
});
</code></pre>
<p>新規ブログ記事作成の場合は、ここで指定したカテゴリを選択した場合に UI が変更されます。そのカテゴリに属する記事を編集する場合は、最初から指定した UI となります。</p>
<p>この code オプションの function の中には、MTAppjQuery で利用できるその他の jQuery プラグインが使えます。</p>
<h2>サンプル</h2>
<p>例えば、キーワード欄を、次のように使い分ける場合を考えてみます。</p>
<ul>
	<li>通常の場合 : ラベルを「キャッチフレーズ」にカスタマイズしたテキストフィールド</li>
	<li>カテゴリIDが3のカテゴリの場合 : ラベルを「ジャンル」としたマルチチェックボックス</li>
</ul>
<h3>通常の場合 : ラベルを「キャッチフレーズ」にカスタマイズしたテキストフィールド</h3>
<p>この場合は、user.js に次のように書きます。</p>
<pre class="jquery"><code>$.MTAppCustomize({
    basename: 'keywords',
    label: 'キャッチフレーズ',
    hint: 'ここにはキャッチフレーズを入れましょう！'
});
</code></pre>
<h3>カテゴリIDが3のカテゴリの場合 : ラベルを「ジャンル」としたマルチチェックボックス</h3>
<p>この場合は、user.js に次のように書きます。ただし、カテゴリごとに指定する UI は、通常の場合の設定を上書きしなければならないので、上記で指定した「通常の場合」よりも後に、カテゴリごとのカスタマイズを記述する必要があります。</p>
<pre class="jquery"><code>$.MTAppInCats({
    categories: '3',
    code      : function(){
        $.MTAppCustomize({
            basename: 'keywords',
            label: 'ジャンル',
            hint: '記事が属するジャンルを選択してください'
        });
        $.MTAppMultiCheckbox({
            basename: 'keywords',
            label:    'Moveble Type,MTOS,TypePad,VOX'
        });
    }
});
</code></pre>
<p>このように、code:function(){ } 内には、MTAppjQueryプラグインに同梱されている jQuery プラグインも使うことができます。</p>
<p>プラグインの詳細やダウンロードは以下からお願いします。</p>
<ul>
	<li><a href="/blog/download/mt-plugin/mtapp-jquery.html">MTAppjQuery - Movable Type 5 の管理画面をjQueryでカスタマイズしやすくするプラグイン</a></li>
</ul>]]>
    </content>
</entry>
<entry>
    <title>$.MTAppFullscreen() - MTAppjQuery でブログ記事も書きやすく</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2010/07/26-221955.html" />
    <id>tag:www.tinybeans.net,2010:/blog//1.371
tag:www.tinybeans.net,2010:/blog//1.324
tag:www.tinybeans.net,2010:http://www.tinybeans.net/blog//1.371</id>
    <published>2010-07-26T13:19:55Z</published>
    <updated>2010-07-26T13:20:01Z</updated>
    <summary>ちょこちょことアップデートを繰り返している「MTAppjQuery - Movable Type 5 の管理画面をjQueryでカスタマイズしやすくするプラグイン」ですが、今日現在でバージョン 0.0...</summary>
    <author>
        <name>tinybeans</name>
    </author>
        <category term="1002_プラグイン" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="movabletypeplugin" label="movabletype-plugin" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mtappjquery" label="MTAppjQuery" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p>ちょこちょことアップデートを繰り返している「<a href="/blog/download/mt-plugin/mtapp-jquery.html">MTAppjQuery - Movable Type 5 の管理画面をjQueryでカスタマイズしやすくするプラグイン</a>」ですが、今日現在でバージョン 0.09 になっています。</p>
<p>ブログを書く時間がなかったので、アナウンスできませんでしたが、バージョン 0.08 では以下の変更を加えました。</p>
<ul>
	<li>$.MTAppFullscreen() を追加</li>
	<li>user.cssからデフォルトのCSSをMTAppjQuery.cssに独立（ご注意ください！）</li>
</ul>
<p>そして、バージョン 0.09 では以下の変更を加えました。</p>
<ul>
	<li>プラグインに入っている user.css と user.js のファイル名を _user.css と _user.js に変更（上書き防止です！）</li>
	<li>ブログ記事編集画面の UI をカテゴリごとに変更できる $.MTAppInCats() を追加</li>
	<li>$.fn.mtEditTextFormによる「.mt-edit-field」への対応と、$.MTAppCustomize()にこれと似た機能を追加（editオプション）</li>
</ul>
<p>この記事では、$.MTAppFullscreen() について説明し、$.MTAppInCats() などその他のアップデートについては別の記事で説明します。</p>]]>
        <![CDATA[<h3>$.MTAppFullscreen() - フルスクリーンエディタでブログ記事を書きやすく</h3>
<p>user.js に次の１行を追加すると、ブログ記事作成画面等のテキストエディタのタブに「FULL」というタブが追加されます。このタブをクリックすると、エディタがほぼフルスクリーンになります。これも僕はかなりのお気に入り。</p>
<pre class="jquery"><code>$.MTAppFullscreen();
</code></pre>
<p class="image"><a href="http://www.tinybeans.net/blog/images/MTAppFullscreen-01.png"><img alt="MTAppFullscreen-01.png" src="http://www.tinybeans.net/blog/assets_c/2010/07/MTAppFullscreen-01-thumb-450x220-1076.png" width="450" height="220" /></a></p>
<p class="note">※ただし、残念ながらリッチテキストには対応していません。</p>
<p>プラグインの詳細とダウンロードは以下からお願いします。</p>
<ul>
	<li><a href="/download/mt-plugin/mtapp-jquery.html">MTAppjQuery - Movable Type 5 の管理画面をjQueryでカスタマイズしやすくするプラグイン</a></li>
</ul>
<p>なんか色々楽しくなってきますよ、このプラグイン。</p>]]>
    </content>
</entry>
<entry>
    <title>ウェブサイトとブログの構造を分かりやすくするユーザーダッシュボードのカスタマイズ #mt5</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2010/07/22-004541.html" />
    <id>tag:www.tinybeans.net,2010:/blog//1.368
tag:www.tinybeans.net,2010:/blog//1.324
tag:www.tinybeans.net,2010:http://www.tinybeans.net/blog//1.368</id>
    <published>2010-07-21T15:45:41Z</published>
    <updated>2010-07-21T15:58:48Z</updated>
    <summary>Movable Type 5 になってから、「ウェブサイト」と「ブログ」という概念でウェブサイトを構造的に管理できるようになりました、とまではいいんですが、それにしてはちょっとダッシュボードのウェブサ...</summary>
    <author>
        <name>tinybeans</name>
    </author>
        <category term="1001_テンプレート" scheme="http://www.sixapart.com/ns/types#category" />
    <category term="movabletype" label="movabletype" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletypetemplate" label="movabletype-template" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p>Movable Type 5 になってから、「ウェブサイト」と「ブログ」という概念でウェブサイトを構造的に管理できるようになりました、とまではいいんですが、それにしてはちょっとダッシュボードのウェブサイトとブログのウィジェットが、、、全然構造的じゃないじゃん、と思っていたんですね。</p>
<p>そこで「<a href="/blog/2010/07/18-003138.html">MTAppjQuery 0.06 リリース - ストラクチャー・ウィジェットでウェブサイトとブログの構造を視覚的に確認</a>」ということで、<a href="/blog/download/mt-plugin/mtapp-jquery.html">MTAppjQuery プラグイン</a>にウェブサイトとブログを構造的に確認できるウィジェットを追加したわけです。</p>
<p class="image"><img alt="structure_widget.pngのサムネール画像" src="http://www.tinybeans.net/blog/assets_c/2010/07/structure_widget-thumb-480x388-1073.png" width="480" height="388" /></p>
<p>今日は、MTAppjQuery プラグインを使わずに、alt-tmpl でカスタマイズする方法を、自分の備忘録の意味でも書いておきます。</p>]]>
        <![CDATA[<h2>カスタマイズの準備</h2>
<p>まず、alt-tmpl ディレクトリに、cms/widget というディレクトリを作成します。その widget ディレクトリの中に、以下のファイルをコピーします。</p>
<ul>
	<li>/tmpl/cms/widget/favorite_blogs.tmpl これをコピーして</li>
	<li>/alt-tmpl/cms/widget/favorite_blogs.tmpl こっちに貼り付け</li>
</ul>
<h2>カスタマイズ</h2>
<h3>「構造」タブを追加</h3>
<p>早速、alt-tmpl にコピーしたファイルをカスタマイズしていきます。favorite_blogs.tmpl の 7行目の次に１行挿入し、「構造」というタブを追加します。</p>
<pre class="tmpl"><code>[7行目]
        &lt;li class=&quot;tab&quot;&gt;&lt;a href=&quot;#favorite-blog&quot;&gt;&lt;__trans phrase=&quot;Blogs&quot;&gt;&lt;/a&gt;&lt;/li&gt;
[次の１行を挿入]
        &lt;li class=&quot;tab&quot;&gt;&lt;a href=&quot;#favorite-structure&quot;&gt;構造&lt;/a&gt;&lt;/li&gt;
</code></pre>
<p>id属性には favorite-structure と入れておきます。日本語を直接書くので、ファイルは utf-8 で保存します。</p>
<p>これで、「構造」というタブが追加されました。</p>
<p class="image"><img src="/blog/images/fav-structure01.png" alt="fav-structure01.png" /></p>
<h3>favorite_blogs.tmpl の構造 : ウェブサイト部分</h3>
<p>さて、続いてテンプレートを見ていくと、12行目以降が、ウィジェットの本体（タブの中身）になります。ウィジェットの本体はウェブサイト一覧とブログ一覧に分かれていて、その構造は次のようになっています。</p>
<p>まずウェブサイトの方から見てみます。</p>
<pre class="tmpl"><code>[12〜15行目]
&lt;div id=&quot;favorite-website&quot;&gt;
&lt;mt:if name=&quot;website_object_loop&quot;&gt;
    &lt;div id=&quot;favorite-website-container&quot; class=&quot;blog-container&quot;&gt;
    &lt;mt:loop name=&quot;website_object_loop&quot;&gt;

    この中身が１つのウェブサイトに関する情報です

[74〜76行目]
    &lt;/mt:loop&gt;
    &lt;/div&gt;
&lt;mt:else&gt;

    省略

[88行目]
&lt;/div&gt;
</code></pre>
<p>この中の変数 website_object_loop には複数のウェブサイトに関する情報が入っています。それを15行目の mt:loop タグで順に出力しています。</p>
<h3>変数 website_object_loop の中身</h3>
<p>ループ中の変数 website_object_loop の中身をのぞいてみると、次のようなウェブサイトに関する情報が入っています。</p>
<pre class="perl"><code>'can_access_to_blog_list' =&gt; 1,
'can_access_to_blog_setting_screen' =&gt; 1,
'can_access_to_comment_list' =&gt; 1,
'can_access_to_page_list' =&gt; 1,
'can_access_to_template_list' =&gt; 1,
'can_apply_theme' =&gt; 1,
'can_create_new_page' =&gt; 1,
'website_blog_count' =&gt; '1',
'website_comment_count' =&gt; 0,
'website_description' =&gt; undef,
'website_id' =&gt; '1',
'website_name' =&gt; 'First Website',
'website_page_count' =&gt; '3',
'website_theme_thumb' =&gt; '/cms/MT-5.02-ja/mt-static/support//theme_thumbnails/professional_website/thumb-small.png',
'website_url' =&gt; 'http://localhost/mt/mt502/first_website/'
</code></pre>
<p>これらの値は、MTVar タグで取り出すことができます。試しに、以下のコードを74行目の &lt;/mt:loop&gt; の直前に貼り付けて見てください。</p>
<pre class="tmpl"><code>&lt;ul&gt;
    &lt;li&gt;can_access_to_blog_list : &lt;mt:var name=&quot;can_access_to_blog_list&quot;&gt;&lt;/li&gt;
    &lt;li&gt;can_access_to_blog_setting_screen : &lt;mt:var name=&quot;can_access_to_blog_setting_screen&quot;&gt;&lt;/li&gt;
    &lt;li&gt;can_access_to_comment_list : &lt;mt:var name=&quot;can_access_to_comment_list&quot;&gt;&lt;/li&gt;
    &lt;li&gt;can_access_to_page_list : &lt;mt:var name=&quot;can_access_to_page_list&quot;&gt;&lt;/li&gt;
    &lt;li&gt;can_access_to_template_list : &lt;mt:var name=&quot;can_access_to_template_list&quot;&gt;&lt;/li&gt;
    &lt;li&gt;can_apply_theme : &lt;mt:var name=&quot;can_apply_theme&quot;&gt;&lt;/li&gt;
    &lt;li&gt;can_create_new_page : &lt;mt:var name=&quot;can_create_new_page&quot;&gt;&lt;/li&gt;
    &lt;li&gt;website_blog_count : &lt;mt:var name=&quot;website_blog_count&quot;&gt;&lt;/li&gt;
    &lt;li&gt;website_comment_count : &lt;mt:var name=&quot;website_comment_count&quot;&gt;&lt;/li&gt;
    &lt;li&gt;website_description : &lt;mt:var name=&quot;website_description&quot;&gt;&lt;/li&gt;
    &lt;li&gt;website_id : &lt;mt:var name=&quot;website_id&quot;&gt;&lt;/li&gt;
    &lt;li&gt;website_name : &lt;mt:var name=&quot;website_name&quot;&gt;&lt;/li&gt;
    &lt;li&gt;website_page_count : &lt;mt:var name=&quot;website_page_count&quot;&gt;&lt;/li&gt;
    &lt;li&gt;website_theme_thumb : &lt;mt:var name=&quot;website_theme_thumb&quot;&gt;&lt;/li&gt;
    &lt;li&gt;website_url : &lt;mt:var name=&quot;website_url&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
</code></pre>
<p>すると、ウェブサイト一覧の各ウェブサイトの下に、これらの値がリストアップされます。</p>
<h3>favorite_blogs.tmpl の構造 : ブログ部分</h3>
<p>さて、続いてブログの方も見てみましょう。</p>
<pre class="tmpl"><code>[90〜93行目]
&lt;div id=&quot;favorite-blog&quot;&gt;
&lt;mt:if name=&quot;blog_object_loop&quot;&gt;
    &lt;div id=&quot;favorite-blog-container&quot; class=&quot;blog-container&quot;&gt;
    &lt;mt:loop name=&quot;blog_object_loop&quot;&gt;

    この中身が１つのブログに関する情報です

[152〜154行目]
    &lt;/mt:loop&gt;
    &lt;/div&gt;
&lt;mt:else&gt;

    省略

[166行目]
&lt;/div&gt;
</code></pre>
<p>この中の変数 blog_object_loop には複数のブログに関する情報が入っています。それを93行目の mt:loop タグで順に出力しています。</p>
<h3>変数 blog_object_loop の中身</h3>
<p>ループ中の変数 blog_object_loop の中身をのぞいてみると、次のようなブログに関する情報が入っています。</p>
<pre class="perl"><code>'blog_comment_count' =&gt; 0,
'blog_description' =&gt; undef,
'blog_entry_count' =&gt; '3',
'blog_id' =&gt; '2',
'blog_name' =&gt; 'First Blog',
'blog_page_count' =&gt; 0,
'blog_theme_thumb' =&gt; '/cms/MT-5.02-ja/mt-static/support//theme_thumbnails/pico/thumb-small.png',
'blog_url' =&gt; 'http://localhost/mt/mt502/first_website/first_blog/',
'can_access_to_blog_setting_screen' =&gt; 1,
'can_access_to_comment_list' =&gt; 1,
'can_access_to_entry_list' =&gt; 1,
'can_access_to_page_list' =&gt; 1,
'can_access_to_template_list' =&gt; 1,
'can_access_to_website' =&gt; 1,
'can_apply_theme' =&gt; 1,
'can_create_new_entry' =&gt; 1,
'website_id' =&gt; '1',
'website_name' =&gt; 'First Website'
</code></pre>
<p>これらの値も、MTVar タグで取り出すことができます。</p>
<h3>「構造」タブの中身を考える</h3>
<p>さて、いよいよ「構造」タブの中身を作っていきます。この中身は、ブログの一覧が終わったところ、つまり166行目の167行目の間に挿入していきます。</p>
<pre class="tmpl"><code>&lt;/div&gt;
ここに挿入する
&lt;/mtapp:widget&gt;
</code></pre>
<p>まずは大枠の div 要素となる次の３行を追加します。終了位置が分かりやすいようにコメントを入れておきます。この div 要素の id 属性は、最初に追加したタブの href 属性の値と同じになるようにします。</p>
<pre class="tmpl"><code>&lt;div id=&quot;favorite-structure&quot;&gt;
&lt;!-- /#favorite-structure --&gt;
&lt;/div&gt;
</code></pre>
<p>さて、この中身をどのように実装するか考えてみます。</p>
<ol>
	<li>ウェブサイトをループで出力する</li>
	<li>出力中のウェブサイトに属するブログをループで出力する</li>
</ol>
<p>こんな感じでしょうか。</p>
<h3>ウェブサイトをループで取り出す</h3>
<p>まずはウェブサイトをループで取り出します。ウェブサイトの情報は、先ほど見たように変数 website_object_loop に入っていますので、これをループさせている、13〜87行目をコピーして、div#favorite-structure の中に貼り付けます。</p>
<pre class="tmpl"><code>&lt;div id=&quot;favorite-structure&quot;&gt;
&lt;mt:if name=&quot;website_object_loop&quot;&gt;

    省略

&lt;/mt:if&gt;
&lt;!-- /#favorite-structure --&gt;
&lt;/div&gt;
</code></pre>
<p>この状態でユーザーダッシュボードをリロードすると、構造タブを選択したときに、ウェブサイト一覧が表示されます。</p>
<p class="image"><img src="/blog/images/fav-structure02.png" alt="fav-structure02.png" /></p>
<h3>ループ中のウェブサイトの ID を変数に格納する</h3>
<p>このウェブサイト一覧に、そのウェブサイトに属するブログを挿入していきます。</p>
<p>ブログに関する情報は、変数 blog_object_loop に格納されています。したがって、ウェブサイトのループの中で、そのループ中のウェブサイトの ID と変数 blog_object_loop に格納されているブログが属するウェブサイトの ID を比較し、一致するブログのみ出力するようにします。</p>
<p>先ほどの「変数 website_object_loop の中身」で見たウェブサイトの情報の中に「website_id」というのがあります。これが、そのウェブサイトの ID になります。</p>
<p>そこで、div#favorite-structure に挿入した変数 website_object_loop のループの先頭に、次の１行を挿入し、ループ中のウェブサイトの ID を変数 crt_website_id に格納します。</p>
<pre class="tmpl"><code>[167〜170行目付近]
&lt;div id=&quot;favorite-structure&quot;&gt;
&lt;mt:if name=&quot;website_object_loop&quot;&gt;
    &lt;div id=&quot;favorite-website-container&quot; class=&quot;blog-container&quot;&gt;
    &lt;mt:loop name=&quot;website_object_loop&quot;&gt;
    [ここに次の１行を挿入]
    &lt;mt:Var name=&quot;website_id&quot; setvar=&quot;crt_website_id&quot;&gt;
</code></pre>
<h3>ブログをループで取り出す</h3>
<p>次に、ウェブサイトのループの中で、１つのウェブサイトを出力した直後にブログをループで取り出します。ブログの情報は、先ほど見たように変数 blog_object_loop に入っていますので、これをループさせている、91〜165行目をコピーして、230行目付近の </mt:loop> の直前に貼り付けます。</p>
<p>その際、次の div#favorite-blog-container は不要なので削除し、後々ウェブサイトに属するブログにスタイルを適用するために div.favorite-structure-blog-container に変更しておきます。</p>
<pre class="tmpl"><code>        &lt;mt:if name=&quot;blog_object_loop&quot;&gt;
            &lt;div class=&quot;favorite-structure-blog-container&quot;&gt;
            &lt;div id=&quot;favorite-blog-container&quot; class=&quot;blog-container&quot;&gt; ←この行は削除
            &lt;mt:loop name=&quot;blog_object_loop&quot;&gt;

            省略

            &lt;/mt:loop&gt;
            &lt;/div&gt;
        &lt;mt:else&gt;
</code></pre>
<p>すると、構造タブの中身が、次のようにウェブサイトとブログの一覧になります。</p>
<ul>
	<li>ウェブサイト</li>
	<li>ブログ</li>
	<li>ブログ</li>
	<li>...</li>
	<li>ウェブサイト</li>
	<li>ブログ</li>
	<li>ブログ</li>
	<li>...</li>
</ul>
<p class="image"><img src="/blog/images/fav-structure03.png" alt="fav-structure03.png" /></p>
<h3>ループ中のブログが属するウェブサイトの ID は？</h3>
<p>さて、このままだと、各ウェブサイトの後に全てのブログがリストアップされてしまいます。したがって、ブログをループで取り出すときに、ブログが属するウェブサイトの ID と、ループ中のウェブサイトの ID が一致するものだけをリストアップするようにします。</p>
<p>このブログが属するウェブサイトの ID は、上述の「変数 blog_object_loop の中身」で見た中身の「website_id」になります。ループ中のウェブサイトの ID が入っている変数と同じ名前なんですね。</p>
<p>ループ中のウェブサイトの ID は、先ほど変数 crt_website_id に格納したので、変数 blog_object_loop のループの中で、crt_website_id = website_id になるブログだけをリストアップするようにします。</p>
<p>したがって、先ほど挿入した「ブログをループで取り出す」部分が次のようになります。</p>
<pre class="tmpl"><code>        &lt;mt:if name=&quot;blog_object_loop&quot;&gt;
        &lt;div class=&quot;favorite-structure-blog-container&quot;&gt;
            &lt;mt:loop name=&quot;blog_object_loop&quot;&gt;
                &lt;mt:if name=&quot;website_id&quot; eq=&quot;$crt_website_id&quot;&gt;

                省略

                &lt;/mt:if&gt;
            &lt;/mt:loop&gt;
        &lt;/div&gt;
        &lt;mt:else&gt;
</code></pre>
<h3>CSS を適用する</h3>
<p>あとは、これに CSS を適用させれば完成です。</p>
<p>CSS は、このファイルの最後に、次のコードようなコードを書いてみました。</p>
<pre class="tmpl"><code>&lt;mt:setvarblock name=&quot;html_head&quot; append=&quot;1&quot;&gt;
&lt;style type=&quot;text/css&quot;&gt;
.favorite-blogs-widget #favorite-structure .blog-container {
    height: auto;
}
.favorite-blogs-widget #favorite-structure .blog-container .favorite-structure-blog-container {
    margin-bottom: 20px;
    padding: 10px 0 0 110px;
    border-bottom: 1px solid #cfcfcf;
}
&lt;/style&gt;
&lt;/mt:setvarblock&gt;
</code></pre>
<p>append="1" モディファイアを付けて、ヘッダーの変数 html_head に追加します。これで完成です。</p>
<p class="image"><img src="/blog/images/fav-structure00.png" alt="fav-structure00.png" /></p>
<p>以上です。がんばって書いた記事ですが、需要は少ないかもしれませんねｗ</p>]]>
    </content>
</entry>
</feed>
