<?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>2008-11-20T20:49:21Z</updated>
    <subtitle>Walk sloWly in the Web - Web業界とは無縁の会社にいながら独学でWeb Creator を目指す！「Update Me, Everyday! 」</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.22-ja</generator>

<entry>
    <title>Gmailの検索オプションや定型文を簡単に取り出せるGreasemonkeyスクリプトを作ってみた</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2008/11/21-054050.html" />
    <id>tag:www.tinybeans.net,2008:/blog//1.213</id>

    <published>2008-11-20T20:40:50Z</published>
    <updated>2008-11-20T20:49:21Z</updated>

    <summary> 最近ハマっている jQuery を使って、Gmail の検索オプションや定型文を簡単に取り出せる機能を追加する Greasemonkey のユーザースクリプトを作ってみました。素人くささはモロに残っ...</summary>
    <author>
        <name>tinybeans</name>
        
    </author>
    
        <category term="3000_Tool" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="3002_Firefox" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="addons" label="add-ons" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="firefox" label="firefox" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="gmail" label="Gmail" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="greasemonkey" label="Greasemonkey" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p class="thumb"><img alt="Gmailの検索オプションや定型文を簡単に取り出せるGreasemonkeyスクリプトを作ってみた" src="http://www.tinybeans.net/blog/images/greasemonkey_gmail.png" width="133" height="62" /></p>

<p>最近ハマっている jQuery を使って、Gmail の検索オプションや定型文を簡単に取り出せる機能を追加する Greasemonkey のユーザースクリプトを作ってみました。素人くささはモロに残っていますが。</p>

<p>今や Gmail は、仕事でもプライベートでも、なくてはならない Web サービスの一つです。その魅力は多々あれど、「検索」が優れていることはかなりの高ポイントです。</p>

<p>Gmail の検索は、検索オプションを使うことで威力が倍増します。検索ボタンの横にある「検索オプションを表示」から検索しても結構絞り込めますが、それよりも自分で検索フォームに検索オプションを打ち込んだ方が絞込み精度が高まります。</p>]]>
        <![CDATA[<p>しかし、定番の検索オプション以外はなかなか覚えていられないので、『<a href="http://www.ideaxidea.com/archives/2008/05/gmail_1.html">Gmailの検索オプションまとめ | IDEA*IDEA</a>』のようなありがたいまとめ記事を何度も何度も見に行くことになります（検索オプションを使ったことがない方は、この記事が参考になりますのでご覧ください）。</p>

<p>そこで、Firefox では必須のアドオンと思われる Greasemonkey のユーザースクリプトという形で、それらの検索オプションを簡単に検索フォームに追加できるようにしてみました。</p>

<p>ついでに、会社用・個人用のメールの署名や、よく使う挨拶などの定型文も同じように取り出せたら便利だろうなーということで、その機能も入れてみました。</p>

<h2>インストール</h2>

<p>最初に Greasemonkey を Firefox にインストールします。</p>

<ul>
	<li><a href="https://addons.mozilla.org/ja/firefox/addon/748">Greasemonkey :: Firefox Add-ons</a></li>
</ul>

<p>続いて、以下のファイルをダウンロードして解凍します。</p>

<ul>
	<li class="download"><a href="http://www.tinybeans.net/blog/archive/gmail_user_options.zip">gmail_user_options.zip</a></li>
</ul>

<p>解凍すると次のような二つのファイルが入っています。</p>

<ul>
	<li class="folder">gmail_user_options<ul>
	<li class="file">jquery_for_greasemonkey.user.js</li>
	<li class="file">gmail_user_options.user.js</li>
</ul></li>
</ul>

<p>二つのファイルを、この順番で Firefox にドラッグ&amp;ドロップして、ユーザースクリプトをインストールします。</p>

<p class="image"><a href="http://www.tinybeans.net/blog/images/greasemonkey_gmail05.gif"><img alt="greasemonkey_gmail05.gif" src="http://www.tinybeans.net/blog/assets_c/2008/11/greasemonkey_gmail05-thumb-300x388-535.gif" width="300" height="388" /></a></p>

<p class="image"><img alt="greasemonkey_gmail06.gif" src="http://www.tinybeans.net/blog/images/greasemonkey_gmail06.gif" width="393" height="418" /></p>

<p>ステータスバーに「' ～ ' インストールに成功しました」と表示されます。</p>

<p class="image"><img alt="greasemonkey_gmail07.gif" src="http://www.tinybeans.net/blog/images/greasemonkey_gmail07.gif" width="299" height="31" /></p>

<h2>動作環境</h2>

<p>Firefox 3.0.4 で動作を確認しています。</p>

<h2>使い方</h2>

<h3>User options の起動方法</h3>

<p>Gmail のページが表示されたら、ページのどこでもいいので 1 回クリックすると、一番上のメニューバーに「 User options 」が追加されます。</p>

<p class="image"><a href="http://www.tinybeans.net/blog/images/greasemonkey_gmail00.gif"><img alt="greasemonkey_gmail00.gif" src="http://www.tinybeans.net/blog/assets_c/2008/11/greasemonkey_gmail00-thumb-300x17-543.gif" width="300" height="17" /></a></p>

<p>いきなりこのオプションを使いたいとき意外は、大抵何かしらのアクションのためにクリックするので、そんなに意識しなくても大丈夫だと思います。</p>

<h3>Search Opitions （検索オプション）</h3>

<p class="image"><img alt="greasemonkey_gmail01.gif" src="http://www.tinybeans.net/blog/images/greasemonkey_gmail01.gif" width="353" height="152" /></p>

<p>[add] をクリックすると、その検索オプションが検索フォームの最後に追加され、検索フォームがフォーカスされます。「 AND 」や「 OR 」にも対応できるように「 () 」をつけてあるので、その中に検索したいキーワードを入力します。</p>

<p class="image"><a href="http://www.tinybeans.net/blog/images/greasemonkey_gmail03.gif"><img alt="greasemonkey_gmail03.gif" src="http://www.tinybeans.net/blog/assets_c/2008/11/greasemonkey_gmail03-thumb-300x43-531.gif" width="300" height="43" /></a></p>

<p>「差出人」などの項目名をクリックすると、それに対応する検索オプションが選択された状態で表示されるので、それをドラッグ&amp;ドロップで、検索フォームの好きなところに挿入できます。</p>

<p class="image"><a href="http://www.tinybeans.net/blog/images/greasemonkey_gmail04.gif"><img alt="greasemonkey_gmail04.gif" src="http://www.tinybeans.net/blog/assets_c/2008/11/greasemonkey_gmail04-thumb-300x42-533.gif" width="300" height="42" /></a></p>

<h3>Text Options （定型文オプション）</h3>

<p class="image"><img alt="greasemonkey_gmail02.gif" src="http://www.tinybeans.net/blog/images/greasemonkey_gmail02.gif" width="353" height="207" /></p>

<p>各項目をクリックすると、定型文などが選択されるので、ドラッグ&amp;ドロップでメール本文に挿入します。</p>

<h3>Text Options （定型文オプション）の作り方</h3>

<p>Firefox で Gmail を表示した状態で、ステータスバー（右下）の<img alt="Greasemonkeyのアイコン" src="http://www.tinybeans.net/blog/images/greasemonkey_gmail08.gif" width="23" height="20" />を右クリックして、「ユーザスクリプトの管理」をクリックします。</p>

<p class="image"><img alt="greasemonkey_gmail09.gif" src="http://www.tinybeans.net/blog/images/greasemonkey_gmail09.gif" width="196" height="141" /></p>

<p>左上の「Gmail  user  options」を選択し、「編集」をクリックします。この作業を初めて行うときは、編集するテキストエディタを聞かれるので、文字コード「UTF-8 」 で読み書き可能なテキストエディタなど（ Windows では、<a href="http://www.forest.impress.co.jp/lib/offc/document/txteditor/hidemaru.html">秀丸エディタ</a>（シェアウェア）、<a href="http://www5f.biglobe.ne.jp/~t-susumu/library/tpad.html">TeraPad</a>（フリーソフト）が有名）を選択しておきます。</p>

<p>開いたファイルの 62 ～ 64 行目の &lt;textarea title=&quot; ～ &quot;&gt; ～ &lt;/textarea&gt; で囲まれた部分を編集することで定型文を設定できます。改行したいところは「 \n 」 を入力します。ソース中では改行せずに 1 行で記述します。「そんなの面倒くさい！」という方は、ページ下部に「<a href="#text_option_edit">テキストオプション作成フォーム</a>を用意しましたので、そちらをどうぞ。</p>

<pre class="javascript"><code>'&lt;textarea title=&quot;メール署名（会社）&quot;&gt;<em>------------------\n\nメールの署名など\n\n------------------</em>&lt;/textarea&gt;' +
'&lt;textarea title=&quot;メール署名（プライベート）&quot;&gt;<em>------------------\n\nメールの署名など\n\n------------------</em>&lt;/textarea&gt;' +
'&lt;textarea title=&quot;定型文&quot;&gt;<em>いつも使う文言など</em>&lt;/textarea&gt;' +
</code></pre>

<p>また、title=&quot; ～ &quot; 部分を変更すれば、その定型文のタイトルを変更できます。</p>

<p>&lt;textarea title=&quot; ～ &quot;&gt; ～ &lt;/textarea&gt; で囲まれた部分を増やしたり減らしたりすれば好きな数だけ定型文が作れます。</p>

<h2>発展途上の点</h2>

<p>以下の点が、特に素人くささが残ってしまっているところです。どなたか教えていただければ幸いです。</p>

<ul>
	<li>Gmail のスクリプトの読み込みが終わった後に、このスクリプトを実行したいのですが、色々試しましたが上手くできませんでした。それ故に、一度クリックしてメニューを表示するということになってしまっています。</li>
	<li>テキストエリアにクリックで追加することが出来ませんでした。</li>
</ul>

<h2 id="text_option_edit">テキストオプション作成フォーム</h2>

<p>以下のフォームに定型文のタイトルとメールの署名、定型文などを入力して、「作成する」をクリックすると、改行を「 \n 」に変換してソースを生成できます。すべて選択して、コピペすればOKです。</p>

<p>また、フォームの下にメールの署名のサンプルを載せておきました。サンプル番号をクリックするとフォームにそのサンプルが入りますので修正してお使いください。</p>

<p><label for="text_option_title">【定型文タイトル】</label><br /><input id="text_option_title" type="text" value="" size="30" /></p>
<p><label for="text_option_form">【定型文】</label><br /><textarea onblur="if (this.value == '') this.value = 'Text Options';" onfocus="mtCommentFormOnFocus();if (this.value == 'Text Options') this.value = '';" cols="50" rows="10" id="text_option_form">Text Options</textarea></p>

<p><input id="text_option_write" type="button" value="作成する" /><input id="text_option_clear" type="button" value="クリア" /></p>

<dl id="text_option_sample">
<dt>サンプル 1</dt>
<dd>━━━━━━━━━━━━━━━━━━━━━...‥・<br />
株式会社サンプル　(http://)<br />
サンプル部　サンプル課<br />
<br />
サンプル　太郎　(sample@email.com)<br />
<br />
〒000-0000<br />
住所<br />
TEL:00-0000-0000　　FAX:00-0000-0000<br />
<br />
・‥...━━━━━━━━━━━━━━━━━━━━━</dd>
<dt>サンプル　2</dt>
<dd>－・－・－・－・－・－・－・－・－・－・－・－・－<br />
株式会社サンプル　(http://)<br />
サンプル部　サンプル課<br />
サンプル　太郎　　sample@email.com<br />
〒000-0000<br />
住所<br />
TEL:00-0000-0000　　FAX:00-0000-0000<br />
－・－・－・－・－・－・－・－・－・－・－・－・－</dd>
<dt>サンプル　3</dt>
<dd>┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏<br />
┏━━━┓<br />
┃＼＿／┃株式会社サンプル<br />
┗━━━┛　サンプル部　サンプル課　サンプル　太郎　　<br />
┏┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌<br />
┏┌　<br />
┏┌　〒000-0000　住所<br />
┏┌　TEL　00-0000-0000　FAX　00-0000-0000　<br />
┏┌　sample@email.com　http://<br />
┏</dd>
<dt>サンプル　4</dt>
<dd>************************************************<br />
株式会社サンプル　サンプル　太郎<br />
<br />
〒000-0000　　　住所<br />
　　　　　　　　Tel　　00-0000-0000<br />
　　　　　　　　Fax　　00-0000-0000<br />
　　　　　　　　Mail　sample@email.com<br />
<br />
************************************************　</dd>
</dl>

<p>以上です。</p>

<span class="mt-enclosure mt-enclosure-file" style="display: none;"><a href="http://www.tinybeans.net/blog/js/post/000213.js">000213.js</a></span>]]>
    </content>
</entry>

<entry>
    <title>Custom Field GUI Utility の使い方などの FAQ</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2008/11/12-231227.html" />
    <id>tag:www.tinybeans.net,2008:/blog//1.212</id>

    <published>2008-11-12T14:12:27Z</published>
    <updated>2008-11-12T14:14:18Z</updated>

    <summary>当ブログで公開している WordPress のプラグイン、Custom Field GUI Utility について、訪問者さんからご質問をいただいたのでブログ記事にしてお答えします。...</summary>
    <author>
        <name>tinybeans</name>
        
    </author>
    
        <category term="1500_WordPress" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="1502_プラグイン" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="customfieldgui" label="Custom Field GUI" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wordpressplugin" label="wordpress-plugin" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p>当ブログで公開している WordPress のプラグイン、<a href="http://www.tinybeans.net/blog/download/wp-plugin/cfg-utility-100.html">Custom Field GUI Utility</a> について、訪問者さんからご質問をいただいたのでブログ記事にしてお答えします。</p>]]>
        <![CDATA[<h2>イメージフィールドは画像の URL を出力するのみですか？</h2>

<p>イメージフィールドが出力するのは基本的に画像の URL のみになります。</p>

<p>イメージフィールドは、もととしている Custom Field GUI には無い機能で、カスタムフィールドに画像の URL を入力するシーンが多いことを想定して追加した機能で、値を img 要素の src 属性に出力して使うのが基本となります。</p>

<p>したがって、img 要素で必須になる alt 属性については、通常のテキストフィールドを代用する必要があります。</p>

<p>例えば、イメージフィールドの「キー」が「 imagefield_common 」だったとすると、テンプレートで画像を出力するソースは次のようになります。</p>

<pre class="php"><code>&lt;img src=&quot;&lt;?php echo post_custom('imagefield_common'); ?&gt;&quot; alt=&quot;&quot; /&gt;
</code></pre>

<p>alt 属性に値を入れたいときは、イメージフィールドの前後に普通のテキストフィールドを使用して、その値を alt 属性に出力します。テキストフィールドの「キー」が「 textfield_common 」だったとすると、画像を出力するソースは次のようになります。</p>

<pre class="php"><code>&lt;img src=&quot;&lt;?php echo post_custom('imagefield_common'); ?&gt;&quot; alt=&quot;&lt;?php echo post_custom('textfield_common'); ?&gt;&quot; /&gt;
</code></pre>

<h2>カスタムフィールドの値が空の場合に、余計な空タグを残さない方法はありますか？</h2>

<p>例えば、デフォルトの普通のテキストフィールド「 1 行テキスト（共通表示）」の項目を、次のように strong 要素で強調表示させているとします。</p>

<pre class="php"><code>&lt;strong&gt;&lt;?php echo post_custom('textfield_common'); ?&gt;&lt;/strong&gt;
</code></pre>

<p>このようにした場合、投稿によって「 textfield_common 」の値が空の場合、strong タグだけが残ってしまうことになります。</p>

<p>この場合、以下のように全体を if タグで囲めば、そのフィールドの値が空の場合は何も表示されなくなります。</p>

<pre class="php"><code>&lt;?php if(post_custom('textfield_common')):?&gt;
    &lt;strong&gt;&lt;?php echo post_custom('textfield_common'); ?&gt;&lt;/strong&gt;
&lt;?php endif;?&gt;
</code></pre>]]>
    </content>
</entry>

<entry>
    <title>google-code-prettify + jQuery でソースコードをハイライトする</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2008/11/11-131736.html" />
    <id>tag:www.tinybeans.net,2008:/blog//1.211</id>

    <published>2008-11-11T04:17:36Z</published>
    <updated>2008-11-11T04:24:23Z</updated>

    <summary> ソースコードをハイライト表示してくれる JavaScript ライブラリは数多くありますが、今回、このブログに google-code-prettify というライブラリを導入してみました。 少し前...</summary>
    <author>
        <name>tinybeans</name>
        
    </author>
    
        <category term="0100_Webデザイン" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="0103_JavaScript" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jquery" label="jQuery" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="library" label="library" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p class="thumb"><img alt="ソースコードを見やすくするハイライト表示" src="http://www.tinybeans.net/blog/images/prettify.gif" width="269" height="91" /></p>

<p>ソースコードをハイライト表示してくれる JavaScript ライブラリは数多くありますが、今回、このブログに <a href="http://code.google.com/p/google-code-prettify/">google-code-prettify</a> というライブラリを導入してみました。</p>

<p>少し前までは <a href="http://code.google.com/p/syntaxhighlighter/">dp.SyntaxHighlighter</a>（<a href="http://www.tinybeans.net/blog/2008/01/-dpsyntaxhighlighter.html">ソースコードをカラフルに読みやすくする - dp.SyntaxHighlighter</a> ）を使っていましたが、どうもイマイチ好きになれなかったので使用をやめていましたので、久しぶりのハイライト表示です。</p>]]>
        <![CDATA[<p>google-code-prettify については、導入方法も含めて「<a href="http://journal.mycom.co.jp/articles/2007/03/27/gcp/menu.html">【ハウツー】ハイライトもGoogle流 - &quot;google-code-prettify&quot;でソースコードに色付けを | マイコミジャーナル</a>」で分かりやすく説明されていますので、ここでは jQuery を使っている環境下で、ブログ記事内のソースに一切手を加えない導入方法を紹介します。</p>

<p>もちろん、jQuery を使わなくても導入できるので、その場合はマイコミさんの記事をご覧ください。</p>

<p>まず、<a href="http://code.google.com/p/google-code-prettify/">google-code-prettify</a>からファイルをダウンロードして解凍します。</p>

<p>解凍したフォルダの中に、prettify.js と prettify.css が入っているので、それぞれサーバーにアップロードします。</p>

<ul>
	<li class="folder">src<ul>
	<li class="file">prettify.js</li>
	<li class="file">prettify.css</li>
</ul></li>
</ul>

<p>続いて、head 要素内で以下のようにしてアップロードしたファイルを読み込みます。ファイルへのパスは適宜変更してください。</p>

<pre class="html"><code>&lt;link href=&quot;/css/prettify.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;/&gt;
&lt;script src=&quot;/js/prettify.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</code></pre>

<p>さて、マイコミさんの記事だと、body onload=&quot;prettyPrint()&quot; で呼び出し、pre 要素に prettyprint クラスを追加する、という流れになりますが、せっかく jQuery を使っている（それが前提の記事です）のですから、prettyprint クラスの付与も自動化しましょう。</p>

<p>head 要素内で、先ほど追加した JavaScript の読み込みよりも後の行に、以下のように記述します。</p>

<pre class="html"><code>&lt;script type=&quot;text/javascript&quot;&gt;
// &lt;![CDATA[
$(document).ready(function(){
    $('pre').addClass('prettyprint');
    prettyPrint();
});
// ]]&gt;
&lt;/script&gt;</code></pre>

<p>これで、記事内のソースコードに手を加えることなく導入できます。</p>
]]>
    </content>
</entry>

<entry>
    <title>jQuery でファイルをインクルードする （ jQuery によるモジュール化）</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2008/11/10-173717.html" />
    <id>tag:www.tinybeans.net,2008:/blog//1.200</id>

    <published>2008-11-10T08:37:17Z</published>
    <updated>2008-11-10T21:45:30Z</updated>

    <summary>通常のスタティックな Web サイトにおいて、Web ページの中で更新頻度の高いパーツを別ファイルにして、それをインクルードするシーンは多々あるかと思います。 Movable Type でも、モジュー...</summary>
    <author>
        <name>tinybeans</name>
        
    </author>
    
        <category term="0103_JavaScript" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="1001_テンプレート" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jquery" label="jQuery" 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 class="thumb"><img alt="jQuery でシンプルにファイルをインクルードする" src="http://www.tinybeans.net/blog/images/jquery_inc.png" width="107" height="122" /></p><p>通常のスタティックな Web サイトにおいて、Web ページの中で更新頻度の高いパーツを別ファイルにして、それをインクルードするシーンは多々あるかと思います。</p>

<p>Movable Type でも、モジュールやウィジェットを「インデックステンプレートのコンテキストで全ページに表示させたい」なんてとき、インデックステンプレートに読み込み用のファイルを作って、それを MTInclude で読み込むという手法で実現するのが一般的だと思います。</p>

<p>さて、ファイルを読み込む方法には、大きく分けると、サーバーサイドインクルード（ SSI ）とクライアントサイドインクルード（ CSI ）、がありますが、今回は後者の「クライアントサイド」で読み込む方法を jQuery を使ってやってみました。</p>

<p>いわゆる「 <strong>jQuery によるモジュール化</strong>」と言ったところです。</p>]]>
        <![CDATA[<p>jQuery でのファイルの読み込みは、「<a href="http://bizcaz.com/archives/2008/10/01-214901.php">Movable Type 備忘録 - jQuery でカンタンに外部ファイルを読込む（jquery.inc）</a>」で紹介されている便利な jQuery プラグインを使う手もあります。手軽で便利なので試してみてください。</p>

<p>ただ、僕が使ったときは、ちゃんと UTF-8 で保存したのになぜか IE 6 で表示すると日本語が文字化けしてしまいました。なんで？　また、インクルードしたファイルは、インクルードを指定した要素の子要素としてしか読み込めないようなので、ウィジェット部分の dt、dd 要素だけを読み込みたいときにはちょっと困りました。</p>

<p>そこで、今回は自分的にもう少し使いやすくした jQuery_inc.js を作ってみました。</p>

<h2>メリット</h2>

<p>この JavaScript のメリットをいくつかあげてみます。</p>

<dl>
<dt>複数のモジュール（パーツ）を 1 ファイルで管理</dt>
<dd><p>1 つのファイルから、読み込むモジュールをCSS セレクタのように指定するので、複数のパーツを 1 ファイルにまとめて管理できます。</p>
<p>1 モジュール = 1 ファイルだと、数が増えてくると管理が大変になります。その点、全てのモジュールを 1 ファイルにまとめられれば管理が楽です。</p></dd>
<dt>文字化けしない（と思う）</dt>
<dd><p>XHTML ファイルにまとめることで、head 要素内で文字コードも宣言するので、IE でも文字化けしないと思います。</p></dd>
<dt>モジュール用のファイルを作らなくても可能</dt>
<dd><p>極端な話、モジュール用のインデックステンプレートすら作らなくても良くなります。メインインデックス（ index.html ）からインクルードするという荒業も可能です。お勧めしませんが。。</p></dd>
<dt>読み込み元の要素を、読み込んだ要素で置換可能</dt>
<dd><p>「&lt;div class=&quot;読み込み元&quot;&gt;<em>&lt;p&gt;ここに読み込む&lt;/p&gt;</em>&lt;/div&gt;」</p>
<p>のように子要素に読み込むだけでなく、</p>
<p>「<del datetime="2008-11-06T13:18:17+09:00">&lt;div class=&quot;読み込み元&quot;&gt;&lt;/div&gt;</del><em>&lt;p&gt;ここに読み込む&lt;/p&gt;</em>」</p>
<p>のように読み込み要素と置換することも可能です。</p>
<p>この柔軟性のおかげで、valid なソースを書きやすくなります。</p>
</dd>
<dt>読み込む要素を CSS セレクタなどで指定</dt>
<dd><p>モジュール用ファイルを編集しなくても、読込先を指定するセレクタを変更すれば、読み込む要素を変えられます。</p></dd>
</dl>


<h2>完成したソース</h2>

<pre class="javascript simple_accordion" id="jquery_inc_js" title="jQuery_inc.js"><code>/*
 * jQuery_inc.js
 *
 * Copyright (c) 2008 Tomohiro Okuwaki (http://www.tinybeans.net/blog/)
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * Modified: 2008-11-10
 * Document: http://www.tinybeans.net/blog/2008/11/10-173717.html
 *
 */

function strRef (text) {
	text = text.replace(/&amp;amp;/g,'&amp;');
	text = text.replace(/&amp;lt;/g,'&lt;');
	text = text.replace(/&amp;gt;/g,'&gt;');
	text = text.replace(/&amp;quot;/g,'&quot;');
	return text;
}
jQuery(document).ready(function(){
	jQuery('.jquery_inc').each(function(){
		var inc_url = '/jquery_inc.html';   /* &lt;== Edit it first */
		var inc_selector = jQuery(this).attr('title');
		var replace_inc = jQuery(this).filter('.replace_inc').size();
		var file_inc = jQuery(this).filter('.file_inc').size();
		var child_inc = jQuery(this).filter('.child_inc').size();
		inc_selector = strRef(inc_selector);

		if (jQuery.browser.msie) {
			/* for IE [start] */
			if (file_inc) {
				inc_selector = inc_selector.replace(/ ?/,':');
				inc_selector = inc_selector.split(':');
				inc_url = inc_selector[0];
				inc_selector = inc_selector[1];
			}
			if (child_inc) {
				var matchStr = inc_url.match(' ');
				if (matchStr) {
					inc_selector = inc_selector + '&gt;*';
				}
			}
			jQuery.ajax({cache: false});
			if (replace_inc) {
				jQuery(this).load(
					inc_url,
					function () {
						var default_content = jQuery(this).clone();
						var inc_content = default_content.find(inc_selector);
						jQuery(this).replaceWith(inc_content);
					}
				);
			} else {
				jQuery(this).load(
					inc_url,
					function () {
						var default_content = jQuery(this).clone();
						var inc_content = default_content.find(inc_selector);
						jQuery(this).html(inc_content);
					}
				);
			}
			/* for IE [ end ] */
		} else {
			if (file_inc) {
				inc_url = inc_selector;
			} else {
				inc_url = inc_url + ' ' + inc_selector;
			}
			if (child_inc) {
				var matchStr = inc_url.match(' ');
				if (matchStr) {
					inc_url = inc_url + '&gt;*';
				}
			}
			jQuery.ajax({cache: false});
			if (replace_inc) {
				jQuery(this).load(
					inc_url,
					function () {
						var default_content = jQuery(this).clone();
						var inc_content = default_content.html();
						jQuery(this).replaceWith(inc_content);
					}
				);
			} else {
				jQuery(this).load(inc_url);
			}
		}
	});
});</code></pre>

<p>このソースをコピーして保存するか、以下よりダウンロードしたファイルを解凍して保存します。</p>

<h2>ダウンロード</h2>

<ul>
	<li class="download"><a href="http://www.tinybeans.net/blog/archive/jquery_inc.zip">jquery_inc.zip</a></li>
</ul>

<h2>jquery_inc.js の使い方</h2>

<p>ここでは、Movable Type で使う場合を例に説明しますが、もちろん普通の Web サイトでも同様の考え方で使えます。</p>

<h3>モジュール用ファイル（インデックステンプレート）の作成</h3>

<p>まず初めに、モジュール用ファイルを作成しておきましょう。Movable Type の場合、モジュールとして読み込みたい部分をまとめてインデックステンプレートとして作成すればOKです。</p>

<p>ここでは、「Recent Comments （最近のコメント）」と「Recommended （オススメ）」をモジュール化してみます。</p>

<p>なお、読み込むファイルをできるだけ軽くするために、余計な要素は排除してシンプルにしましょう。また、以下の例では、検索ロボットは一応拒否しています。</p>

<dl>
<dt>テンプレートのデータ</dt>
<dd><ul>
	<li>インデックステンプレート</li>
	<li>出力ファイル名 : jquery_inc.html</li>
</ul></dd>
</dl>

<pre class="mtml"><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;ja&quot; lang=&quot;ja&quot; dir=&quot;ltr&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
&lt;title&gt;jQuery Include - &lt;$mt:BlogName$&gt;&lt;/title&gt;
&lt;meta name=&quot;ROBOTS&quot; content=&quot;NONE&quot; /&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;dl id=&quot;<strong>wdg_include</strong>&quot;&gt;
&lt;dt&gt;Recent Comments&lt;/dt&gt;
&lt;dd class=&quot;recentComments&quot;&gt;&lt;ul class=&quot;recentComments&quot;&gt;&lt;mt:Entries recently_commented_on=&quot;5&quot;&gt;
&lt;li&gt;&lt;a href=&quot;&lt;$mt:EntryLink$&gt;&quot;&gt;&lt;$mt:EntryTitle$&gt;&lt;/a&gt;
	&lt;ul&gt;&lt;mt:Comments&gt;
	&lt;li&gt;&lt;a href=&quot;&lt;mt:CommentEntry&gt;&lt;$mt:EntryLink$&gt;&lt;/mt:CommentEntry&gt;#comment&lt;$mt:CommentID$&gt;&quot; title=&quot;&lt;mt:SetVarBlock name=&quot;commentBodyCount&quot;&gt;&lt;$mt:CommentBody count_characters=&quot;1&quot;$&gt;&lt;/mt:SetVarBlock&gt;&lt;mt:If name=&quot;commentBodyCount&quot; gt=&quot;50&quot;&gt;&lt;$mt:CommentBody remove_html=&quot;1&quot; encode_html=&quot;1&quot; trim_to=&quot;50&quot; cat=&quot;...&quot; regex_replace=&quot;/\n|\r\n/g&quot;,&quot;&quot;$&gt;&lt;mt:Else&gt;&lt;$mt:CommentBody remove_html=&quot;1&quot; encode_html=&quot;1&quot;$&gt;&lt;/mt:If&gt;&quot; rel=&quot;nofollow&quot;&gt;&lt;mt:IfNonZero tag=&quot;CommentAuthor&quot;&gt;&lt;$mt:CommentAuthor$&gt;&lt;mt:Else&gt;No Name&lt;/mt:IfNonZero&gt; - &lt;$mt:CommentDate format=&quot;%m/%d&quot;$&gt;&lt;/a&gt;&lt;/li&gt;&lt;/mt:Comments&gt;
	&lt;/ul&gt;&lt;/li&gt;&lt;/mt:Entries&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;dt&gt;Recommended&lt;/dt&gt;
&lt;dd class=&quot;recommended&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://getfirefox.jp/&quot;&gt;&lt;img src=&quot;&lt;$mt:BlogURL$&gt;img/banner/firefox_125x125_rounded_blue.png&quot; alt=&quot;Mozilla Firefox ブラウザ無料ダウンロード&quot; title=&quot;Mozilla Firefox ブラウザ無料ダウンロード&quot; width=&quot;125&quot; height=&quot;125&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>

<p>再構築したファイルは次のようになります。</p>

<pre class="html" id="sample"><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;ja&quot; lang=&quot;ja&quot; dir=&quot;ltr&quot;&gt;
&lt;head&gt;
&lt;meta name=&quot;ROBOTS&quot; content=&quot;NONE&quot; /&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
&lt;title&gt;jQuery Include - かたつむりくんのWWW&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;dl id=&quot;<strong>wdg_include</strong>&quot;&gt;
    <em>&lt;dt&gt;Recent Comments&lt;/dt&gt;</em>
    <em>&lt;dd class=&quot;recentComments&quot;&gt;</em>
        <em>&lt;ul class=&quot;recentComments&quot;&gt;</em>
            <em>省略</em>
        <em>&lt;/ul&gt;</em>
    <em>&lt;/dd&gt;</em>
    <em>&lt;dt&gt;Recommended&lt;/dt&gt;</em>
    <em>&lt;dd class=&quot;recommended&quot;&gt;</em>
        <em>&lt;p&gt;&lt;a href=&quot;http://getfirefox.jp/&quot;&gt;&lt;img src=&quot;http://www.tinybeans.net/blog/img/banner/firefox_125x125_rounded_blue.png&quot; alt=&quot;Mozilla Firefox ブラウザ無料ダウンロード&quot; title=&quot;Mozilla Firefox ブラウザ無料ダウンロード&quot; width=&quot;125&quot; height=&quot;125&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</em>
    <em>&lt;/dd&gt;</em>
&lt;/dl&gt;

&lt;/body&gt;
&lt;/html&gt;</code></pre>

<p>以下の説明で出てくるサンプルも、基本的にこのモジュール用ファイルからインクルードすることにします。</p>

<h3 id="init">jquery_inc.js の初期設定</h3>

<p>jquery_inc.js の 22 行目当たりのファイルのパスを、作成したモジュール用ファイルのパスに変更します。</p>

<pre class="javascript"><code>var inc_url = '<em>/jquery_inc.html</em>';   /* &lt;== Edit it first */</code></pre>

<h3>jQuery などの読み込み</h3>

<p>jquery_inc.js をサーバーにアップロードし、jQuery とともに読み込みます。ファイルへのパス部分は適宜変更してください。ここでは jQuery は 「<a href="http://code.google.com/apis/ajaxlibs/">AJAX Libraries API - Google Code</a>」を使って読み込んでいます。</p>

<pre class="html"><code>&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.google.com/jsapi&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;google.load(&quot;jquery&quot;, &quot;1.2&quot;);&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;<em>/js/jquery_inc.js</em>&quot; charset=&quot;UTF-8&quot;&gt;&lt;/script&gt;</code></pre>

<h3>読み込みたい場所に title 属性、class 属性を設定</h3>

<p>インクルードしたい場所のソースに、以下のような title 属性、class 属性を設定します。</p>

<h3>title 属性（必須）</h3>

<p>モジュール用ファイルの読み込みたい要素を jQuery のセレクタで指定します。jQuery のセレクタについては、次のページが参考になります。シンプルな CSS セレクタなら、ほぼそのまま使えます。</p>

<ul>
	<li><a href="http://stacktrace.jp/jquery/api/selectors/">Selectors [ jQuery ] - StackTrace</a></li>
</ul>

<p>なお、&lt; &gt; &amp; などは実体参照にすることを忘れずに。</p>

<h3>jquery_inc クラス（必須）</h3>

<p>jquery_inc.js を使ってモジュールを読み込みたい要素に設定します。必須です。</p>

<pre class="html"><code>&lt;Element class=&quot;<strong>jquery_inc</strong>&quot; title=&quot;selector&quot;&gt; ～ &lt;/Element&gt;</code></pre>

<p>【サンプル】 dd.recommended 内の p 要素をインクルート</p>

<pre class="html"><code>[読み込みたいソースは次の p 要素]

&lt;dd class=&quot;recommended&quot;&gt;
    <em>&lt;p&gt;&lt;a href=&quot;http://getfirefox.jp/&quot;&gt;&lt;img src=&quot;http://www.tinybeans.net/blog/img/banner/firefox_125x125_rounded_blue.png&quot; alt=&quot;Mozilla Firefox ブラウザ無料ダウンロード&quot; title=&quot;Mozilla Firefox ブラウザ無料ダウンロード&quot; width=&quot;125&quot; height=&quot;125&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</em>
&lt;/dd&gt;

[読み込みたい場所のソース]

&lt;div class=&quot;<strong>jquery_inc</strong>&quot; title=&quot;<em>#wdg_List_RecentComments dd.recommended p</em>&quot;&gt;
    <em>ここに読み込みます</em>
&lt;/div&gt;

[読み込み後のソース]

&lt;div class=&quot;jquery_inc lastChild&quot; title=&quot;#wdg_List_RecentComments dd.recommended p&quot;&gt;
    <em>&lt;p&gt;&lt;a href=&quot;http://getfirefox.jp/&quot;&gt;&lt;img src=&quot;http://www.tinybeans.net/blog/img/banner/firefox_125x125_rounded_blue.png&quot; alt=&quot;Mozilla Firefox ブラウザ無料ダウンロード&quot; title=&quot;Mozilla Firefox ブラウザ無料ダウンロード&quot; width=&quot;125&quot; height=&quot;125&quot;&gt;&lt;/a&gt;&lt;/p&gt;</em>
&lt;/div&gt;</code></pre>

<h3>child_inc クラス（オプション）</h3>

<p>title 属性で指定した要素の「子要素」をインクルードしたい場合に設定します。</p>

<pre class="html"><code>&lt;Element class=&quot;<strong>jquery_inc child_inc</strong>&quot; title=&quot;selector&quot;&gt; ～ &lt;/Element&gt;</code></pre>

<p>一つ手前のサンプルでは、セレクタで dd.recommended の子要素の p 要素まで指定しましたが、child_inc クラスをつければ少しシンプルになります。</p>

<pre class="html"><code>[セレクタで指定]

&lt;div class=&quot;jquery_inc&quot; title=&quot;#wdg_include dd.recommended <em>p</em>&quot;&gt;

[child_inc クラスで指定]

&lt;div class=&quot;<strong>jquery_inc child_inc</strong>&quot; title=&quot;#wdg_include dd.recommended&quot;&gt;</code></pre>

<p>このように子要素が一つのときは無意味に思えるかもしれませんが、dl 要素の子要素の dt、dd 要素など、複数の子要素をまとめてインクルードしたいときに威力を発揮します。</p>

<h3 id="replace_inc">replace_inc クラス（オプション）</h3>

<p>インクルードしたい場所の要素を、インクルードした要素と置き換えます。</p>

<pre class="html"><code>&lt;Element class=&quot;<strong>jquery_inc replace_inc</strong>&quot; title=&quot;selector&quot;&gt; ～ &lt;/Element&gt;</code></pre>

<p>【サンプル】 span.test を dd.recommended 内の p 要素と置換</p>

<pre class="html"><code>[読み込みたいソースは次の p 要素]

&lt;dd class=&quot;recommended&quot;&gt;
    <em>&lt;p&gt;&lt;a href=&quot;http://getfirefox.jp/&quot;&gt;&lt;img src=&quot;http://www.tinybeans.net/blog/img/banner/firefox_125x125_rounded_blue.png&quot; alt=&quot;Mozilla Firefox ブラウザ無料ダウンロード&quot; title=&quot;Mozilla Firefox ブラウザ無料ダウンロード&quot; width=&quot;125&quot; height=&quot;125&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</em>
&lt;/dd&gt;

[読み込みたい場所のソース]

&lt;dl&gt;
    &lt;dt&gt;Recommended&lt;/dt&gt;
    &lt;dd class=&quot;recommended&quot;&gt;
        <em>&lt;span class=&quot;test</em> <strong>jquery_inc replace_inc</strong><em>&quot; title=&quot;dd.recommended p&quot;&gt;ここに読み込みます&lt;/span&gt;</em>
    &lt;/dd&gt;
&lt;/dl&gt;

[読み込み後のソース]

&lt;dl&gt;
    &lt;dt&gt;Recommended&lt;/dt&gt;
    &lt;dd class=&quot;recommended lastChild&quot;&gt;
        <em>&lt;p&gt;&lt;a href=&quot;http://getfirefox.jp/&quot;&gt;&lt;img src=&quot;http://www.tinybeans.net/blog/img/banner/firefox_125x125_rounded_blue.png&quot; alt=&quot;Mozilla Firefox ブラウザ無料ダウンロード&quot; title=&quot;Mozilla Firefox ブラウザ無料ダウンロード&quot; width=&quot;125&quot; height=&quot;125&quot;&gt;&lt;/a&gt;&lt;/p&gt;</em>
    &lt;/dd&gt;
&lt;/dl&gt;</code></pre>

<h3>file_inc クラス（オプション）</h3>

<p>通常は、<a href="#init">最初に設定</a>した一つのファイルからモジュールをインクルードしますが、file_inc クラスをつけると、別のファイルからインクルードすることができます。その場合、title 属性を「（読み込みたいファイルの URL ） + （半角スペース） + （セレクタ）」と記述します。</p>

<pre class="html"><code>&lt;Element class=&quot;<strong>jquery_inc file_inc</strong>&quot; title=&quot;<strong>URL selector</strong>&quot;&gt; ～ &lt;/Element&gt;</code></pre>

<p>【サンプル】 トップページの最新記事タイトルをインクルード</p>

<pre class="html"><code>[読み込みたい場所のソース]

&lt;p&gt;最新の記事 : &lt;span class=&quot;<strong>jquery_inc replace_inc file_inc</strong>&quot; title=&quot;<em>http://www.tinybeans.net/blog/ #primary h2 a:first</em>&quot;&gt;最新記事を読み込みます&lt;/span&gt;&lt;/p&gt;

[読み込み後のソース]

&lt;p&gt;最新の記事 : &lt;a href=&quot;http://www.tinybeans.net/blog/2008/11/05-124152.html&quot;&gt;ブログ記事を「公開した日時」を自動的にカスタムフィールドで保存するカスタマイズ&lt;/a&gt;&lt;/p&gt;</code></pre>

<h2>SEO 対策や JavaScript オフ時の対応</h2>

<p>この jQuery を使ったインクルードは、読み込み後のコンテンツがソースに反映されていないため、SEO 的に若干問題があるかもしれません。また、JavaScript がオフの状態だと、全く機能しなくなります。</p>

<p>しかし、<a href="#replace_inc">replace_inc</a> クラスを使えば、読み込みたい場所のソースを丸々置換できるので、代替コンテンツを入れておくことが可能です。</p>

<p>例えば、Movable Type の場合、全ページに同じ「インデックステンプレートのコンテキストの最新のブログ記事」を表示したいけど、保険として「ブログ記事コンテキスト（カテゴリごと）の最新のブログ記事」を表示させておく、などの方法が可能です。</p>

<h2>参考文献など</h2>

<p>jQuery について本で勉強したい場合は、以下の書籍がお勧めです。</p>

<ul>
	<li>『<a href="http://www.amazon.co.jp/o/ASIN/4774134902/tinybeans-22/">jQueryで作る Ajaxアプリケーション</a>』</li>
</ul>

<p>以上です。</p>]]>
    </content>
</entry>

<entry>
    <title>ブログ記事を「公開した日時」を自動的にカスタムフィールドで保存するカスタマイズ</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2008/11/05-124152.html" />
    <id>tag:www.tinybeans.net,2008:/blog//1.204</id>

    <published>2008-11-05T03:41:52Z</published>
    <updated>2008-11-05T13:23:32Z</updated>

    <summary>Movable Type で日付に関するタグはいくつかありますが（タグ date を含むテンプレートタグ一覧）、ブログ記事を「未公開（原稿）」からはじめて「公開」にしたときの日付を表示するタグは無いよ...</summary>
    <author>
        <name>tinybeans</name>
        
    </author>
    
        <category term="1000_Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="1001_テンプレート" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="movabletype" label="movabletype" 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 で日付に関するタグはいくつかありますが（<a href="http://movabletype.jp/cgi-bin/mt4/mt-search.cgi?tag=date&amp;blog_id=3&amp;IncludeBlogs=3">タグ date を含むテンプレートタグ一覧</a>）、ブログ記事を「未公開（原稿）」からはじめて「公開」にしたときの日付を表示するタグは無いようです。</p>

<p>そこで、ブログ記事の編集画面をカスタマイズして、カスタムフィールドに自動的に「公開した日時」を表示するカスタマイズをやってみました。</p>

<p class="image"><img alt="公開日時フィールド" src="http://www.tinybeans.net/blog/images/publicDate.gif" width="220" height="63" /></p>

<p>某コミュニティにこのような内容と思われる質問があったので、自分なりにやってみました。</p>]]>
        <![CDATA[<h2>実装する機能</h2>

<p>ブログ記事の公開状態を、はじめて「公開」にして「保存」したときの日時が、あらかじめ作成しておいたカスタムフィールドに自動的に保存されます。</p>

<p>カスタムフィールドが使えない MTOS であっても、「キーワード」フィールドなどを代用できます。</p>

<h2>カスタマイズ方法</h2>

<p class="thumb"><a href="http://www.amazon.co.jp/o/ASIN/4839927537/tinybeans-22/"><img src="http://ecx.images-amazon.com/images/I/419CBvudhTL._SL500_SS75_.jpg" title="Movable Type プロフェッショナル・スタイル MT4.1対応" width="75" height="75" /></a></p>

<p>管理画面のカスタマイズについては以前の記事（<a href="http://www.tinybeans.net/blog/2008/09/22-130424.html">Movable Type のブログ記事の出力ファイル名を変更する管理画面のカスタマイズ</a>や<a href="http://www.tinybeans.net/blog/2008/10/24-062136.html">Movable Type の記事投稿画面の UI をカテゴリごとに変えるカスタマイズ （ jQuery 版）</a>）でも書きましたが、『<a href="http://www.amazon.co.jp/o/ASIN/4839927537/tinybeans-22/">Movable Type プロフェッショナル・スタイル MT4.1対応</a>』の Track B の「 5 ユーザー指向の管理画面をつくる」がとても参考になります。</p>

<h3 id="edit_entry_tmpl">カスタマイズするファイルの準備</h3>

<p>今回カスタマイズするのは、ブログ記事やウェブページの編集画面用のテンプレートファイル「 edit_entry.tmpl 」です。このファイルは以下の場所にあります。</p>
<ul>
	<li class="folder">mt
	<ul>
		<li class="folder">tmpl
		<ul>
			<li class="folder">cms
			<ul>
				<li class="file"><em>edit_entry.tmpl</em></li>
			</ul></li>
		</ul></li>
	</ul></li>
</ul>

<p>このファイルをローカルにコピーして同名で保存したファイルをカスタマイズします。</p>

<h3>カスタムフィールドの作成</h3>

<p>まず、「公開日時」を保存するためのカスタムフィールドを作成します。作成方法は割愛しますが、設定内容は次のようにします。</p>

<dl>
<dt>システムオブジェクト</dt>
<dd>ブログ記事</dd>
<dt>名前</dt>
<dd>公開日時</dd>
<dt>説明</dt>
<dd>「未公開（原稿）」からはじめて「公開」した日時</dd>
<dt>種類</dt>
<dd>テキスト</dd>
<dt>ベースネーム</dt>
<dd>publicdate</dd>
<dt>テンプレートタグ</dt>
<dd>publicdate</dd>
</dl>

<h3>カスタマイズ内容</h3>

<p>さっそくカスタマイズしてみます。</p>

<p>まずは「保存」ボタンをクリックしたときに「公開日時」を書き込めるように、「保存」ボタンに onclick 属性を追加します。「 edit_entry.tmpl 」の 54 ～ 60 行目付近を次のようにします。</p>

<pre class="mtml"><code>&lt;button
    mt:mode=&quot;save_entry&quot;
    type=&quot;submit&quot;
    accesskey=&quot;s&quot;
    title=&quot;&lt;mt:var name=&quot;submit_button_title&quot;&gt;&quot;
    class=&quot;primary-button&quot;
    <strong>onclick=&quot;publicDate();&quot;</strong>
    &gt;&lt;__trans phrase=&quot;Save&quot;&gt;&lt;/button&gt;</code></pre>

<p>これで「保存」ボタンをクリックしたときに、publicDate という関数を呼び出すことになります。</p>

<p>次に、onclick 属性を挿入後の 906 行目の手前に、次のソースを挿入して、publicDate という JavaScript の関数を定義します。</p>

<pre class="mtml"><code>[挿入するソース]
&lt;mt:setvarblock name=&quot;html_head&quot; append=&quot;1&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
//&lt;![CDATA[
function digit(num) {
    if(num &lt; 10){num = '0' + num;}
    return num;
}
function publicDate () {
    var statusValue = document.entry_form.status.value;
    var publicValue = document.entry_form.<strong>customfield_publicdate</strong>.value;
    if ((statusValue == 2) &amp;&amp; (publicValue == '')) {
        var now = new Date();
        var publicYear = now.getFullYear();
        var publicMonth = digit(now.getMonth() + 1);
        var publicDate = digit(now.getDate());
        var publicHours = digit(now.getHours());
        var publicMinutes = digit(now.getMinutes());
        var publicSeconds = digit(now.getSeconds());
        var public = '' + publicYear + ':' + publicMonth + ':' + publicDate + ':' + publicHours + ':' + publicMinutes + ':' + publicSeconds;
        document.entry_form.<strong>customfield_publicdate</strong>.value = public;
    }
}
//]]&gt;
&lt;/script&gt;
&lt;/mt:setvarblock&gt;

[906行目]
&lt;mt:setvarblock name=&quot;html_body&quot; append=&quot;1&quot;&gt;</code></pre>

<p>カスタマイズはこれで完了です。</p>

<h3>カスタマイズの補足</h3>

<p>先ほどの設定でカスタムフィールドを作成していれば、管理画面上の「公開日時」カスタムフィールドは、id 属性に「 customfield_publicdate 」をもつ input 要素になっているはずです。うまく動作しない場合は、「公開日時」カスタムフィールドの input 要素の id 属性を確認してみてください。</p>

<p>また、カスタムフィールドの使えない MTOS では、「キーワード」フィールドなどを代用することができると思います。「キーワード」フィールドを代用する場合は、「 customfield_publicdate 」部分（ 2 箇所）を「 keywords 」に変更すればOKです。</p>

<h3>カスタマイズしたファイルをアップロード</h3>

<p>以上の内容に書き換えたファイルを文字コード UTF-8 で保存し、次のディレクトリにアップロードします。ファイル名は「 edit_entry.tmpl 」です。</p>

<ul>
	<li class="folder">mt
	<ul>
	<li class="folder"><strong>alt-tmpl</strong>
		<ul>
		<li class="file">edit_entry.tmpl</li>
		</ul></li>
	</ul></li>
</ul>

<p>最初に「 edit_entry.tmpl 」があったディレクトリとは別ですのでご注意ください。使用を中止したいときは、ここでアップロードしたファイルを削除すればOKです。</p>

<h2>使い方</h2>

<h3>公開するとき</h3>

<p>公開状態を「公開」にして保存すれば自動的に現時点での日時が「公開日時」カスタムフィールドに挿入されます。保存するフォーマットは次のようになります。</p>

<pre class="text"><code>年:月:日:時:分:秒
（例）2008:11:05:12:30:30</code></pre>

<p>フィールをに値が入っていると書き換えないようになっているので、後から編集して保存し直しても、この値は変更されません。値を修正したい場合は、手書きで修正するか、一度値を空にして保存し、もう一度保存すれば書き換わります。</p>
<h3>テンプレートで表示するとき</h3>

<p>このカスタムフィールドの値を出力するテンプレートタグは次のようになるはずです。</p>

<pre class="mtml"><code>テンプレートタグ : &lt;$mt:publicdate$&gt;
出力結果の例　　 : 2008:11:05:12:30:30</code></pre>

<p>このままでは使えないので、regex_replace モディファイアを使って出力方法を制御します。なぜこのような実用的でない形式にしているかというと、初めから整った形（2008年11月05日　12時30分30秒など）で値を保存してしまうと、後々出力方式を変更したくなったときに柔軟性に欠けると思われるためです。</p>

<p>さて、ここではいくつか出力の例を挙げておきます。以下の出力結果は、実際にこのブログ記事をはじめて「公開」した日時になります。</p>

<dl>
<dt>&lt;$mt:publicdate regex_replace=&quot;/(\d+):(\d+):(\d+):(\d+):(\d+):(\d+)/&quot;,&quot;\1年\2月\3日 \4時\5分\6秒&quot;$&gt;</dt>
<dd><$mt:publicdate regex_replace="/(\d+):(\d+):(\d+):(\d+):(\d+):(\d+)/","\1年\2月\3日 \4時\5分\6秒"$></dd>
<dt>&lt;$mt:publicdate regex_replace=&quot;/(\d+):(\d+):(\d+):(\d+):(\d+):(\d+)/&quot;,&quot;\1年\2月\3日&quot;$&gt;</dt>
<dd><$mt:publicdate regex_replace="/(\d+):(\d+):(\d+):(\d+):(\d+):(\d+)/","\1年\2月\3日"$></dd>
<dt>&lt;$mt:publicdate regex_replace=&quot;/(\d+):(\d+):(\d+):(\d+):(\d+):(\d+)/&quot;,&quot;\1-\2-\3 \4:\5:\6&quot;$&gt;</dt>
<dd><$mt:publicdate regex_replace="/(\d+):(\d+):(\d+):(\d+):(\d+):(\d+)/","\1-\2-\3 \4:\5:\6"$></dd>
<dt>&lt;$mt:publicdate regex_replace=&quot;/(\d+):(\d+):(\d+):(\d+):(\d+):(\d+)/&quot;,&quot;\1-\2-\3&quot;$&gt;</dt>
<dd><$mt:publicdate regex_replace="/(\d+):(\d+):(\d+):(\d+):(\d+):(\d+)/","\1-\2-\3"$></dd>
</dl>

<p>以上です。</p>

<p>※カスタマイズは自己責任でお願いします。</p>]]>
    </content>
</entry>

<entry>
    <title>CSS Nite ビギナーズに参加した感想とか要望とか</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2008/11/03-065639.html" />
    <id>tag:www.tinybeans.net,2008:/blog//1.203</id>

    <published>2008-11-02T21:56:39Z</published>
    <updated>2008-11-02T23:45:39Z</updated>

    <summary> 11月 1日、晴天に恵まれた三連休の初っ端、CSS Niteビギナーズに行ってきました。6 時間みっちりと CSS に関する基礎を復習することができました。...</summary>
    <author>
        <name>tinybeans</name>
        
    </author>
    
        <category term="4000_Diary" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="セミナー" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="cssnite" label="css nite" 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 class="thumb"><a href="http://cssnite.jp/beginners/tokyo/"><img src="http://cssnite.jp/images/banner_beginners_260-120.jpg" alt="CSS Niteビギナーズ" width="260" height="120" /></a></p>

<p>11月 1日、晴天に恵まれた三連休の初っ端、<a href="http://cssnite.jp/beginners/tokyo/">CSS Niteビギナーズ</a>に行ってきました。6 時間みっちりと CSS に関する基礎を復習することができました。</p>]]>
        <![CDATA[<h2>印象に残ったセッション</h2>

<p>どのセッションも勉強になりましたが、中でも次のセッションが印象に残りました。</p>

<dl>
<dt>Session 4 : CSS レイアウト（小林信次さん）</dt>
<dd><p>実用的で良かったです。</p></dd>
<dt>Session 5 : CSS デザインの実用テクニック（山田あかねさん）</dt>
<dd><p>table 周りのマークアップに苦手意識があったのですごく参考になりました。</p></dd>
<dt>Session 7 : CSS デザインのブラウザ調整（益子貴寛さん）</dt>
<dd><p>ブラウザ調整の心構えや IE のチェックに関する話が参考になりました。ちなみに『<a href="http://www.amazon.co.jp/o/ASIN/4798010928/tinybeans-22/">Web標準の教科書</a>』は僕にとっての仕様書です。</p></dd>
<dt>Session 8 : CSS セッティング（堀内敬子さん）</dt>
<dd><p>ここは自分でも試行錯誤をしている部分だったので、実務家の一つの例としてとても参考になりました。実践してみようと思います。</p></dd>
<dt>Session 10 : 多様なデバイスでの CSS デザイン（伊藤学さん）</dt>
<dd><p>ちょうど自分のフットサルチームのサイトを作っていて、携帯対応はどうしようかと思っていたところだったので、このセッションの内容を参考にしてやってみます。</p></dd>
</dl>

<h2>CSS Nite ビギナーズの感想など</h2>

<p>今回の CSS Nite ビギナーズに参加してみて、自分も知識レベルだけなら Web 制作者としてのビギナーの域には入れていると感じました。やはり今の自分に決定的に足りないものは「経験」だと感じました。ひたすら経験を積んで、いろいろと試行錯誤していきたいと思います。</p>

<p>このブログの CSS も試行錯誤の一つで、無駄なくらいカスケーディングで指定しています。その方が、どの要素にどんな指定がされているのかが明確になるかなーと思ってやったわけですが、その点は非常に効果があったのですが、当然ファイルサイズが大きくなっちゃうし、指定する量も多くなってしまいます。</p>

<p>また、CSS ファイルの分割も少なくしてみた結果、修正するときに一つのファイルを開けば良いというメリットと、パッと修正したい要素が探せないというデメリットが共存しています。</p>

<p>とまあ、これは Session 8 がらみのことですが、そのほか XHTML にしろ CSS にしろ、一つの文書構造に対するマークアップや CSS での指定方法は複数あるので、その辺もいろいろ試しながら試行錯誤していきたいと思います。</p>

<p>なんかワクワクするなぁ。</p>

<h2>連動書籍について</h2>

<p class="thumb"><a href="http://www.amazon.co.jp/o/ASIN/4839929734/tinybeans-22/"><img src="http://ecx.images-amazon.com/images/I/51byU08fB2L._SL160_AA115_.jpg" alt="現場のプロから学ぶXHTML+CSS" width="115" height="115" /></a></p>

<p>さて、今回の CSS Nite ビギナーズでは、連動書籍として『<a href="http://www.amazon.co.jp/o/ASIN/4839929734/tinybeans-22/">現場のプロから学ぶXHTML+CSS</a>』という書籍が作られました。</p>

<p>連動書籍がある CSS Nite には、以前「<a href="http://mt4lp5.cssnite.jp/">MT4LP5</a>」というのがあって、そちらにも参加しましたが（<a href="http://www.tinybeans.net/blog/2008/04/mt4lp5-1.html">MT4LP5へ参加してきた</a>）、MT4LP5 のときは、書籍と一応連動してはいるものの、「話す内容は書籍に書いていないこと」の方がメインだった気がしますが、今回の CSS Nite ビギナーズは、書籍に書いてあることが多かったように思います。</p>

<p>どちらのやり方も一長一短あるかもしれませんが、今回のようなビギナー企画は、書籍ともろに連動していたほうが、後で書籍を読むときにすんなりと理解できる気がしています。つまり、今回の CSS Nite ビギナーズの復習をしたかったら、急いで『<a href="http://www.amazon.co.jp/o/ASIN/4839929734/tinybeans-22/">現場のプロから学ぶXHTML+CSS</a>』を読んだ方が良いのでしょう。ということで僕もせっせと読み始めています（読むのが遅いのが痛い）。</p>

<h2>CSS Nite への要望っぽいこと</h2>

<p>CSS を数多く書いていると、「ここは IE で表示が乱れるから～しとこ」という勘どころが分かってくると思います。経験の浅い僕でも、</p>

<ul>
	<li>clearfix する</li>
	<li>xml 宣言を入れると IE6 が後方互換モードにあなるから width と margin、padding を一緒に指定しない</li>
	<li>float と同じ方向に指定した margin は 2 倍になる</li>
	<li>float した要素の子要素は背景が乱れる</li>
	<li>z-index は親要素の z-index の関係の方が優先されちゃう</li>
</ul>

<p>とか、一瞬で思いつくわけで、プロの方々はもっとそういう「勘どころ」が湧いてくるようにあるのだと思います。</p>

<p>というわけで、次の CSS Nite の CSS ネタとして、そういった「あらかじめ回避しておきたい CSS の勘どころ」みたいなのをやっていただけるとすごくうれしい気がします。</p>

<p>まあ、それは自分で経験を積んで覚えていくべきところではあると思いますが、CSS を学んでいく人の一助になると思います。今回のセミナーと書籍で、基礎固めをばっちりして、これからせっせと CSS の経験を積もうとがんばる僕らにとってすごくありがたいかなと思います。</p>

<p>以上です。</p>]]>
    </content>
</entry>

<entry>
    <title>記事投稿時間の横に Twitter みたいな「約～前」を表示する</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2008/11/02-070720.html" />
    <id>tag:www.tinybeans.net,2008:/blog//1.202</id>

    <published>2008-11-01T22:07:20Z</published>
    <updated>2008-11-04T21:34:23Z</updated>

    <summary> Movable Type や WordPress の記事投稿時間の横に、Twitter のように、その記事を投稿したのが現在時刻から「約時間～前」というのを表示する JavaScript （ jQu...</summary>
    <author>
        <name>tinybeans</name>
        
    </author>
    
        <category term="0103_JavaScript" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jquery" label="jQuery" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletypetemplate" label="movabletype-template" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wordpresstemplate" label="wordpress-template" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<p class="thumb"><img alt="記事投稿時間の横に Twitter みたいな「約～前」を表示する" src="http://www.tinybeans.net/blog/images/elapse01.gif" width="115" height="39" /></p>

<p>Movable Type や WordPress の記事投稿時間の横に、Twitter のように、その記事を投稿したのが現在時刻から「約時間～前」というのを表示する JavaScript （ jQuery ）です。</p>

<p>経過時間を解析する仕組みは、「<a href="http://www.tinybeans.net/blog/2008/09/25-062812.html">一定時間で自動的に消える New マークを付ける JavaScript の jQuery 版</a>」のカスタマイズのときとほぼ同様で、<a href="http://www.koikikukan.com/">小粋空間</a>さんのところで紹介されている「<a href="http://www.koikikukan.com/archives/2006/02/20-235151.php">新着エントリーのあるカテゴリーに New マークをつける</a>」を参考にさせていただきました。</p>]]>
        <![CDATA[<h2 id="source">完成したソース</h2>

<p>完成したソースは以下のようになります。</p>

<pre class="javascript"><code>function digit (num) {
    if (num &lt; 10) {num = ' ' + num;}
    return num;
}
jQuery(document).ready(function(){
    var currentDate = new Date();
    jQuery('.elapse').each(function(){
        var getEntryDate = jQuery(this).attr('title');
        var time = getEntryDate.split(':');
        var entryDate = new Date(time[0], time[1]-1, time[2], time[3], time[4], time[5]);
        var elapsedTime = (currentDate.getTime() - entryDate.getTime())/1000;
        elapsedTime = Math.ceil(elapsedTime); // 小数点以下切り上げ
        var message = null;
         if (elapsedTime &lt; 60) { //  1 分未満
            message =  'たった今';
        } else if (elapsedTime &lt; 120) { //  2 分未満
            message =  '約 1分前';
        } else if (elapsedTime &lt; (60*60)) { //  1 時間未満
            message =  '約' + digit(Math.floor(elapsedTime / 60)) + '分前';
        } else if (elapsedTime &lt; (120*60)) { //  2 時間未満
            message =  '約 1時間前';
        } else if (elapsedTime &lt; (24*60*60)) { //  1 日未満
            message =  '約' + digit(Math.floor(elapsedTime / 3600)) + '時間前';
        } else if (elapsedTime &lt; (7*24*60*60)) { // 1 週間未満
            message =  '約' + digit(Math.floor(elapsedTime / 86400)) + '日前';
        } else { // 1 週間以上
            message =  '約' + digit(Math.floor(elapsedTime / 604800)) + '週間前';
        }
        jQuery(this).text(jQuery(this).text() + ' ' + message);
    });
});</code></pre>

<h2>解説</h2>

<p>順番に解説してみます。</p>

<pre class="javascript"><code>function digit (num) {
    if (num &lt; 10) {num = ' ' + num;}
    return num;
}</code></pre>

<p>最初の 4 行で、数字が一桁のときは、その数字の手前に半角スペースを付ける関数を定義しています。</p>

<p>以下、ソースにコメントアウトする形で解説します。</p>

<pre class="javascript"><code>// ドキュメントが読み込まれ次第実行
jQuery(document).ready(function(){

    <em>// 現在の日時を変数 currentDate に代入（現在日時）</em>
    var currentDate = new Date();

    <em>// クラス名 elapse を持つ要素すべてに以下の内容を繰り返す</em>
    jQuery('.elapse').each(function(){

        <em>// その要素をtitle属性の値を変数 getEntryDate に代入</em>
        var getEntryDate = jQuery(this).attr('title');

        <em>// 取得したtitle属性の値を : で区切って変数 time に代入</em>
        var time = getEntryDate.split(':');

        <em>// 変数 time の値を日時として変数 entryDate に代入（記事投稿日時）</em>
        var entryDate = new Date(time[0], time[1]-1, time[2], time[3], time[4], time[5]);

        <em>// 現在日時から記事投稿日時を引いた値を秒単位で変数 elapsedTime に代入</em>
        var elapsedTime = (currentDate.getTime() - entryDate.getTime())/1000;

        <em>// 変数 elapsedTime の小数点以下を切り上げて整数にする</em>
        elapsedTime = Math.ceil(elapsedTime);

        <em>// 変数 message を定義</em>
        var message = null;

        <em>// これ以下で一定時間未満のごとのメッセージの表示方法を条件分岐</em>
        <em>// 表示する数字が1桁のときは関数 digit で頭に半角スペースを付ける</em>
        if (elapsedTime &lt; 60) { //  1 分未満
            message =  'たった今';
        } else if (elapsedTime &lt; 120) { //  2 分未満
            message =  '約 1分前';
        } else if (elapsedTime &lt; (60*60)) { //  1 時間未満
            message =  '約' + digit(Math.floor(elapsedTime / 60)) + '分前';
        } else if (elapsedTime &lt; (120*60)) { //  2 時間未満
            message =  '約 1時間前';
        } else if (elapsedTime &lt; (24*60*60)) { //  1 日未満
            message =  '約' + digit(Math.floor(elapsedTime / 3600)) + '時間前';
        } else if (elapsedTime &lt; (7*24*60*60)) { // 1 週間未満
            message =  '約' + digit(Math.floor(elapsedTime / 86400)) + '日前';
        } else { // 1 週間以上
            message =  '約' + digit(Math.floor(elapsedTime / 604800)) + '週間前';
        }

        <em>// クラス名 elapse を持つ要素の内部テキストに半角スペースを開けてメッセージを追加して表示</em>
        jQuery(this).text(jQuery(this).text() + ' ' + message);
    });
});</code></pre>

<h2>使用方法</h2>

<h3>ファイルのアップロード</h3>

<p><a href="#source">上記の完成したソース</a>をコピーして名前をつけて保存するか、以下のファイルをダウンロードして解凍します。</p>

<ul>
	<li class="download"><a href="http://www.tinybeans.net/blog/archive/jquery_elapse.zip">jquery_elapse.zip</a></li>
</ul>

<p>そのファイルをサーバーにアップロードします。ここでは jquery_elapse.js という名前を付けて、ブログが公開されているディレクトリ以下の js ディレクトリにアップロードしたとします。</p>

<ul>
	<li class="folder">ブログ公開ディレクトリ<ul>
	<li class="folder">js<ul>
	<li class="file">jquery_elapse.js</li>
</ul></li>
</ul></li>
</ul>

<h3>ファイルの読み込み</h3>

<p>「約～前」を表示させたい Web ページの head 要素内で、アップロードしたファイルと jQuery を読み込みます。ファイルまでのパスは適宜変更してください。また、ここでは、「<a href="http://code.google.com/apis/ajaxlibs/">AJAX Libraries API - Google Code</a>」を使って jQuery を読み込んでいます。</p>

<pre class="html"><code>&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.google.com/jsapi&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;google.load(&quot;jquery&quot;, &quot;1.2&quot;);&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;<em>/js/jquery_elapse.js</em>&quot; charset=&quot;UTF-8&quot;&gt;&lt;/script&gt;</code></pre>

<h3>title、class 属性の設定</h3>

<p>「約～前」を表示させたいところに、次のような title、class 属性を設定します。</p>

<dl>
<dt>title 属性</dt>
<dd><p>「年:月:日:時:分:秒」（例、2008:11:01:06:25:30）という形式でブログ記事の公開日時を指定します。</p>
<p><del datetime="2008-11-05T06:14:41+09:00">これは特に id 属性にこだわるわけではなく、title 属性などでも問題はありませんが、変更する場合は、jquery_elapse.js の 8 行目を次のように変更してください。</del><ins datetime="2008-11-05T06:14:46+09:00"> id 属性は数字から始めることはできないので、title 属性等にする必要があります。</ins></p>
<pre class="javascript"><code>【title 属性にする場合】

var getEntryDate = jQuery(this).attr('title');</code></pre>
</dd>
<dt>class 属性</dt>
<dd><p>「elapse」を追加します。</p></dd>
</dl>

<p>これらの属性を設定する要素は、「約～前」を表示させたいところに空の span 要素を追加しても良いですが、それは文書構造的には好ましくないので、すでにブログ記事の公開日時を表示させている要素に、title、class 属性を追加した方が良いでしょう。</p>

<h3>Movable Type で使う場合</h3>

<p>Movable Type で使用する場合は、次のように、テンプレートに title、class 属性を追加します。</p>

<p>ここでは、ul、li 要素でウェブページとブログ記事を条件分岐させて、公開日時を表示させている場合です。</p>

<pre class="mtml"><code>&lt;ul class=&quot;contentInfo&quot;&gt;
&lt;mt:If name=&quot;page_template&quot;&gt;&lt;mt:Ignore&gt;&lt;!-- ウェブページ --&gt;&lt;/mt:Ignore&gt;
    &lt;li class=&quot;contentDate <strong>elapse</strong>&quot; <strong>title=&quot;&lt;$mt:PageDate format=&quot;%Y:%m:%d:%H:%M:%S&quot;$&gt;&quot;</strong>&gt;&lt;$mt:PageDate format=&quot;%x %X&quot;$&gt;&lt;/li&gt;
    &lt;/mt:If&gt;
&lt;mt:Else&gt;&lt;mt:Ignore&gt;&lt;!-- ウェブページ以外 --&gt;&lt;/mt:Ignore&gt;
    &lt;li class=&quot;contentDate <strong>elapse</strong>&quot; <strong>title=&quot;&lt;$mt:EntryDate format=&quot;%Y:%m:%d:%H:%M:%S&quot;$&gt;&quot;</strong>&gt;&lt;$mt:EntryDate format=&quot;%x %X&quot;$&gt;&lt;/li&gt;
&lt;/mt:If&gt;
&lt;/ul&gt;</code></pre>

<h3>WordPress で使う場合</h3>

<p>WordPress で使用する場合は、次のように、テンプレートに title、class 属性を追加します。</p>

<p>ここでは、デフォルトのテーマの公開日時を表示させている部分に追加しています。</p>

<pre class="javascript"><code>&lt;small class=&quot;<strong>elapse</strong>&quot; <strong>title=&quot;&lt;?php the_time('Y:m:d:H:i:s') ?&gt;&quot;</strong>&gt;&lt;?php the_time(__('F jS, Y', 'kubrick')) ?&gt; &lt;!-- by &lt;?php the_author() ?&gt; --&gt;&lt;/small&gt;</code></pre>

<dl>
<dt>【2008-11-05 追記】</dt>
<dd><p>当初、一定のフォーマットのブログの公開日時を id 属性に指定していましたが、id 属性は数字で始めることはできないので、title 属性に記述するように、ソースと説明を修正しました。非常に初歩的なミスでした。</p></dd>
</dl>

<p>以上です。</p>]]>
    </content>
</entry>

<entry>
    <title>Movable Type で CAPTCHA 認証を使わないでスパム対策をしてみる</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2008/10/28-062133.html" />
    <id>tag:www.tinybeans.net,2008:/blog//1.199</id>

    <published>2008-10-27T21:21:33Z</published>
    <updated>2008-11-03T00:18:03Z</updated>

    <summary> CAPTCHA 認証は、ブログに限らず多くの Web サービスで取り入れられている代表的なスパム防止策です。もちろん Movable Type でも利用できます。しかし、 Web サービスによっては...</summary>
    <author>
        <name>tinybeans</name>
        
    </author>
    
        <category term="1000_Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="1001_テンプレート" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jquery" label="jQuery" 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 class="thumb"><img alt="CAPTCHA 認証" src="http://www.tinybeans.net/blog/images/captcha01.png" width="263" height="95" /></p>

<p>CAPTCHA 認証は、ブログに限らず多くの Web サービスで取り入れられている代表的なスパム防止策です。もちろん Movable Type でも利用できます。しかし、 Web サービスによっては結構見づらかったり、そもそも規則性のない文字列を入力するのは面倒だったりします。</p>

<p>そこで、効果があるかは分かりませんが、もう少しユーザーに手間をかけないスパム対策を考えてみました。</p>]]>
        <![CDATA[<p>CAPTCHA 認証は、フォームに入力した文字列が正しくないと「送信」が行なえないことでロボットのスパムを防止するという仕組みだと思います。だったら初めから「送信」ボタンがなかったらスパムは来ないんじゃない？という単純な発想です。</p>

<p>そこで今回、このブログの Movable Type のコメントフォームに導入して試してみます。最初はソース上でも「送信」ボタンはなくしてしまって（非表示ではなく）、何の変哲もないボタンをクリックすることで初めて「送信」ボタンが生成されるようにしてみました。</p>

<p>これなら、ユーザーは読みにくい文字を解読し入力するという作業が不要になり、クリックするだけで済みます。</p>

<p class="image"><a href="http://www.tinybeans.net/blog/images/captcha02.gif"><img alt="captcha02.gif" src="http://www.tinybeans.net/blog/assets_c/2008/10/captcha02-thumb-300x358-509.gif" width="300" height="358" /></a></p>

<p>「スパムではありません」ボタンをクリックするとコメントを「投稿」するボタンが初めて生成されます。</p>

<p class="image"><a href="http://www.tinybeans.net/blog/images/captcha03.gif"><img alt="captcha03.gif" src="http://www.tinybeans.net/blog/assets_c/2008/10/captcha03-thumb-300x73-511.gif" width="300" height="73" /></a></p>

<p>「実はスパムです」ボタンをクリックするとメッセージのみが表示されます。ここはお遊びです。</p>

<p class="image"><a href="http://www.tinybeans.net/blog/images/captcha04.gif"><img alt="captcha04.gif" src="http://www.tinybeans.net/blog/assets_c/2008/10/captcha04-thumb-300x74-513.gif" width="300" height="74" /></a></p>

<p>ボタン周りのソースは次のようになっています。</p>

<pre class="mtml"><code>&lt;div id=&quot;comments-open-footer&quot;&gt;
    &lt;div id=&quot;comments-open-spam-block&quot;&gt;
        &lt;p&gt;このコメントはスパムではありませんか？（スパム対策）&lt;/p&gt;
        &lt;p&gt;&lt;button id=&quot;noSpam&quot; type=&quot;button&quot;&gt;スパムではありません&lt;/button&gt;&lt;button id=&quot;spam&quot; type=&quot;button&quot;&gt;実はスパムです&lt;/button&gt;&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;</code></pre>

<p>コメントフォーム・テンプレートの最後の方の JavaScript に次のように jQuery を追加しています。別に jQuery にする必要はありませんが、普通に JavaScript を書くよりも楽だったので jQuery にしました。</p>

<pre class="javascript"><code>&lt;script type=&quot;text/javascript&quot;&gt;
// comments-open-spam-block
jQuery(function(){
	jQuery('button#noSpam').click(function(){
		jQuery('p.spam').remove();
		jQuery('div#comments-open-footer').append('&lt;p&gt;&lt;input type=&quot;submit&quot; name=&quot;post&quot; id=&quot;comment-submit&quot; value=&quot;投稿&quot; accesskey=&quot;9&quot; tabindex=&quot;9&quot; /&gt;&lt;/p&gt;');
		jQuery('div#comments-open-spam-block').html('&lt;p style=&quot;font-weight: bold;&quot;&gt;ありがとうございます。&lt;br /&gt;「投稿」をクリックするとコメントが送信されます。&lt;/p&gt;');
	});
	jQuery('button#spam').click(function(){
		jQuery('p.spam').remove();
		jQuery('div#comments-open-footer').append('&lt;p class=&quot;spam&quot;&gt;スパムは遠慮させていただきます f(^_^;&lt;/p&gt;');
	});
});
// comments-open-spam-block

mtAttachEvent(&quot;load&quot;, mtEntryOnLoad);
mtAttachEvent(&quot;unload&quot;, mtEntryOnUnload);
&lt;/script&gt;</code></pre>

<p>なお、jQuery オブジェクトを使うところを「 $ 」ではなく「 jQuery 」にしているのは、いつか <a href="http://www.prototypejs.org/">Prototype.js</a>を使いたくなったときのために書き換えなくて済むようにするためです。</p>

<p>これでスパムが防げるかどうか試してみます。</p>]]>
    </content>
</entry>

<entry>
    <title>Movable Type のブログ記事の公開日時を年号（元号）で表示する</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2008/10/27-001756.html" />
    <id>tag:www.tinybeans.net,2008:/blog//1.198</id>

    <published>2008-10-26T15:17:56Z</published>
    <updated>2008-10-26T21:56:33Z</updated>

    <summary>Movable Type のブログ記事の公開日時（ entryData ）などを「平成」などの年号（元号）にする方法を考えてみました。 例えば、このブログ記事の公開日時を次のようなタグで出力してみます...</summary>
    <author>
        <name>tinybeans</name>
        
    </author>
    
        <category term="1000_Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="1001_テンプレート" scheme="http://www.sixapart.com/ns/types#category" />
    
    <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 のブログ記事の公開日時（ entryData ）などを「平成」などの年号（元号）にする方法を考えてみました。</p>

<p>例えば、このブログ記事の公開日時を次のようなタグで出力してみます。</p>

<pre class="mtml"><code>&lt;$mt:EntryDate format=&quot;%x (%a)&quot;$&gt;</code></pre>

<p>これを再構築すると次のように出力されます。</p>

<pre class="text"><code><$mt:EntryDate format="%x (%a)"$></code></pre>

<p>こういった出力形式であれば、「<a href="http://www.movabletype.jp/documentation/appendices/date-formats.html">日付に関するテンプレートタグのモディファイアリファレンス | Movable Type 4 ドキュメント</a>」にあるとおり、format モディファイアで対応可能です。しかし、「平成」などの元号表示には、format モディファイアでは対応できません。</p>

<p>そこで変数を使って「年号表示」をする方法を考えてみました。</p>]]>
        <![CDATA[<h2>ブログ記事の公開日時を年号（元号）にするソース</h2>

<h3>「平成」のみに対応させる場合</h3>

<p>まず単純に西暦を「平成」にするソースは次のようになります。</p>

<pre class="mtml"><code>&lt;mt:SetVarBlock name=&quot;entry_date_heisei&quot;&gt;&lt;$mt:EntryDate format=&quot;%Y&quot;$&gt;&lt;/mt:SetVarBlock&gt;
&lt;mt:SetVar name=&quot;entry_date_heisei&quot; op=&quot;-&quot; value=&quot;1988&quot;&gt;
平成&lt;$mt:GetVar name=&quot;entry_date_heisei&quot;$&gt;年</code></pre>

<p>1 行目で変数 entry_date_heisei に 4 桁表記の西暦を代入します。</p>
<p>2 行目で変数 entry_date_heisei から 1988 を引いた数値で変数の値を上書きします。</p>
<p>3 行目でその変数に「平成」と「年」を付けて出力します。</p>
<p>後は、この変数に format モディファイア設定した entryDate タグで日付や曜日を出力して、年号と合わせればOKです。</p>

<h3>「昭和」と「平成」に対応させる場合</h3>

<p>「昭和」に対応させるにはもうひと工夫必要です。</p>

<p>「昭和」は1989年1月7日まで、「平成」は1月8日からとなります。それだけであれば、単純に1989年1月8日で条件分岐すれば良いのですが、平成1年1月8日から12月31日は「平成元年」とするのが一般的ですので、それも考慮して条件分岐をしなければなりません。</p>
<ul>
	<li>1989年1月8日以前 : 「昭和」</li>
	<li>1989年1月8日から1989年12月31日 : 「平成元年」</li>
	<li>1990年1月1日以降 : 「平成」</li>
</ul>

<p>これを考慮したソースは次のようになります。先ほどは、変数 entry_date_heisei には平成 xx 年に対する年の数値（ xx ）しか入れませんでしたが、次は年号自体が変わってくるので、変数に「平成 xx 年」となるように「年号」と「年」も入れてしまいます。</p>

<pre class="mtml"><code>&lt;!-- 公開日を yyyymmdd の形式で取得 --&gt;
&lt;mt:SetVarBlock name=&quot;entry_date_nengou&quot;&gt;&lt;$mt:EntryDate format=&quot;%Y%m%d&quot;$&gt;&lt;/mt:SetVarBlock&gt;

&lt;!-- 3パターンで条件分岐 --&gt;
&lt;!-- 1989年1月8日以前 : 「昭和」 --&gt;
&lt;mt:If name=&quot;entry_date_nengou&quot; lt=&quot;19890108&quot;&gt;
    &lt;mt:SetVarBlock name=&quot;entry_date_nengou&quot;&gt;&lt;$mt:EntryDate format=&quot;%Y&quot;$&gt;&lt;/mt:SetVarBlock&gt;
    &lt;mt:SetVar name=&quot;entry_date_nengou&quot; op=&quot;-&quot; value=&quot;1925&quot;&gt;
    &lt;mt:SetVarBlock name=&quot;entry_date_nengou&quot;&gt;昭和&lt;$mt:GetVar name=&quot;entry_date_nengou&quot;$&gt;年&lt;/mt:SetVarBlock&gt;
&lt;!-- 1989年1月8日から1989年12月31日 : 「平成元年」 --&gt;
&lt;mt:ElseIf name=&quot;entry_date_nengou&quot; ge=&quot;19890108&quot; lt=&quot;19900101&quot;&gt;
    &lt;mt:SetVarBlock name=&quot;entry_date_nengou&quot;&gt;&lt;$mt:EntryDate format=&quot;%Y&quot;$&gt;&lt;/mt:SetVarBlock&gt;
    &lt;mt:SetVarBlock name=&quot;entry_date_nengou&quot;&gt;平成元年&lt;/mt:SetVarBlock&gt;
&lt;!-- 1990年1月1日以降 : 「平成」 --&gt;
&lt;mt:ElseIf name=&quot;entry_date_nengou&quot; ge=&quot;19900101&quot;&gt;
    &lt;mt:SetVarBlock name=&quot;entry_date_nengou&quot;&gt;&lt;$mt:EntryDate format=&quot;%Y&quot;$&gt;&lt;/mt:SetVarBlock&gt;
    &lt;mt:SetVar name=&quot;entry_date_nengou&quot; op=&quot;-&quot; value=&quot;1988&quot;&gt;
    &lt;mt:SetVarBlock name=&quot;entry_date_nengou&quot;&gt;平成&lt;$mt:GetVar name=&quot;entry_date_nengou&quot;$&gt;年&lt;/mt:SetVarBlock&gt;
&lt;/mt:If&gt;</code></pre>

<p>さて、変数 entry_date_nengou に entryDate タグではなく直接数値をセットして出力結果をテストしてみます。</p>

<p>【 19760101 の場合】</p>

<mt:SetVarBlock name="entry_date_nengou">19760101</mt:SetVarBlock>
<mt:If name="entry_date_nengou" lt="19890108">
    <mt:SetVarBlock name="entry_date_nengou">1976</mt:SetVarBlock>
    <mt:SetVar name="entry_date_nengou" op="-" value="1925">
    <mt:SetVarBlock name="entry_date_nengou">昭和<$mt:GetVar name="entry_date_nengou"$>年</mt:SetVarBlock>
<mt:ElseIf name="entry_date_nengou" ge="19890108" lt="19900101">
    <mt:SetVarBlock name="entry_date_nengou"><$mt:EntryDate format="%Y"$></mt:SetVarBlock>
    <mt:SetVarBlock name="entry_date_nengou">平成元年</mt:SetVarBlock>
<mt:ElseIf name="entry_date_nengou" ge="19900101">
    <mt:SetVarBlock name="entry_date_nengou"><$mt:EntryDate format="%Y"$></mt:SetVarBlock>
    <mt:SetVar name="entry_date_nengou" op="-" value="1988">
    <mt:SetVarBlock name="entry_date_nengou">平成<$mt:GetVar name="entry_date_nengou"$>年</mt:SetVarBlock>
</mt:If>

<ul>
	<li>出力希望 : 昭和51年</li>
	<li>出力結果 : <$mt:GetVar name="entry_date_nengou"$></li>
</ul>

<p>【 19890107 の場合】</p>

<mt:SetVarBlock name="entry_date_nengou">19890107</mt:SetVarBlock>
<mt:If name="entry_date_nengou" lt="19890108">
    <mt:SetVarBlock name="entry_date_nengou">1989</mt:SetVarBlock>
    <mt:SetVar name="entry_date_nengou" op="-" value="1925">
    <mt:SetVarBlock name="entry_date_nengou">昭和<$mt:GetVar name="entry_date_nengou"$>年</mt:SetVarBlock>
<mt:ElseIf name="entry_date_nengou" ge="19890108" lt="19900101">
    <mt:SetVarBlock name="entry_date_nengou"><$mt:EntryDate format="%Y"$></mt:SetVarBlock>
    <mt:SetVarBlock name="entry_date_nengou">平成元年</mt:SetVarBlock>
<mt:ElseIf name="entry_date_nengou" ge="19900101">
    <mt:SetVarBlock name="entry_date_nengou"><$mt:EntryDate format="%Y"$></mt:SetVarBlock>
    <mt:SetVar name="entry_date_nengou" op="-" value="1988">
    <mt:SetVarBlock name="entry_date_nengou">平成<$mt:GetVar name="entry_date_nengou"$>年</mt:SetVarBlock>
</mt:If>

<ul>
	<li>出力希望 : 昭和64年</li>
	<li>出力結果 : <$mt:GetVar name="entry_date_nengou"$></li>
</ul>

<p>【 19890108 の場合】</p>

<mt:SetVarBlock name="entry_date_nengou">19890108</mt:SetVarBlock>
<mt:If name="entry_date_nengou" lt="19890108">
    <mt:SetVarBlock name="entry_date_nengou">1989</mt:SetVarBlock>
    <mt:SetVar name="entry_date_nengou" op="-" value="1925">
    <mt:SetVarBlock name="entry_date_nengou">昭和<$mt:GetVar name="entry_date_nengou"$>年</mt:SetVarBlock>
<mt:ElseIf name="entry_date_nengou" ge="19890108" lt="19900101">
    <mt:SetVarBlock name="entry_date_nengou">1989</mt:SetVarBlock>
    <mt:SetVarBlock name="entry_date_nengou">平成元年</mt:SetVarBlock>
<mt:ElseIf name="entry_date_nengou" ge="19900101">
    <mt:SetVarBlock name="entry_date_nengou"><$mt:EntryDate format="%Y"$></mt:SetVarBlock>
    <mt:SetVar name="entry_date_nengou" op="-" value="1988">
    <mt:SetVarBlock name="entry_date_nengou">平成<$mt:GetVar name="entry_date_nengou"$>年</mt:SetVarBlock>
</mt:If>

<ul>
	<li>出力希望 : 平成元年</li>
	<li>出力結果 : <$mt:GetVar name="entry_date_nengou"$></li>
</ul>

<p>【 19900101 の場合】</p>

<mt:SetVarBlock name="entry_date_nengou">19900101</mt:SetVarBlock>
<mt:If name="entry_date_nengou" lt="19890108">
    <mt:SetVarBlock name="entry_date_nengou">1989</mt:SetVarBlock>
    <mt:SetVar name="entry_date_nengou" op="-" value="1925">
    <mt:SetVarBlock name="entry_date_nengou">昭和<$mt:GetVar name="entry_date_nengou"$>年</mt:SetVarBlock>
<mt:ElseIf name="entry_date_nengou" ge="19890108" lt="19900101">
    <mt:SetVarBlock name="entry_date_nengou">1989</mt:SetVarBlock>
    <mt:SetVarBlock name="entry_date_nengou">平成元年</mt:SetVarBlock>
<mt:ElseIf name="entry_date_nengou" ge="19900101">
    <mt:SetVarBlock name="entry_date_nengou">1990</mt:SetVarBlock>
    <mt:SetVar name="entry_date_nengou" op="-" value="1988">
    <mt:SetVarBlock name="entry_date_nengou">平成<$mt:GetVar name="entry_date_nengou"$>年</mt:SetVarBlock>
</mt:If>

<ul>
	<li>出力希望 : 平成2年</li>
	<li>出力結果 : <$mt:GetVar name="entry_date_nengou"$></li>
</ul>

<p>【 <$mt:EntryDate format="%Y%m%d"$> の場合】</p>

<mt:SetVarBlock name="entry_date_nengou"><$mt:EntryDate format="%Y%m%d"$></mt:SetVarBlock>
<mt:If name="entry_date_nengou" lt="19890108">
    <mt:SetVarBlock name="entry_date_nengou"><$mt:EntryDate format="%Y"$></mt:SetVarBlock>
    <mt:SetVar name="entry_date_nengou" op="-" value="1925">
    <mt:SetVarBlock name="entry_date_nengou">昭和<$mt:GetVar name="entry_date_nengou"$>年</mt:SetVarBlock>
<mt:ElseIf name="entry_date_nengou" ge="19890108" lt="19900101">
    <mt:SetVarBlock name="entry_date_nengou"><$mt:EntryDate format="%Y"$></mt:SetVarBlock>
    <mt:SetVarBlock name="entry_date_nengou">平成元年</mt:SetVarBlock>
<mt:ElseIf name="entry_date_nengou" ge="19900101">
    <mt:SetVarBlock name="entry_date_nengou"><$mt:EntryDate format="%Y"$></mt:SetVarBlock>
    <mt:SetVar name="entry_date_nengou" op="-" value="1988">
    <mt:SetVarBlock name="entry_date_nengou">平成<$mt:GetVar name="entry_date_nengou"$>年</mt:SetVarBlock>
</mt:If>

<ul>
	<li>出力希望 : 平成20年</li>
	<li>出力結果 : <$mt:GetVar name="entry_date_nengou"$></li>
</ul>

<h2>使用例</h2>

<p>上記のそれぞれの場合のソースで事前に変数に値をセットした後、以下のように GetVar タグで値を出力します。</p>

<h3>「平成」のみに対応させる場合</h3>

<mt:SetVarBlock name="entry_date_heisei"><$mt:EntryDate format="%Y"$></mt:SetVarBlock>
<mt:SetVar name="entry_date_heisei" op="-" value="1988">

<p>【平成<$mt:GetVar name="entry_date_heisei"$>年<$mt:EntryDate format="%b月%e日（%a）"$>】</p>

<pre class="mtml"><code>平成&lt;$mt:GetVar name=&quot;entry_date_heisei&quot;$&gt;年&lt;$mt:EntryDate format=&quot;%b月%e日（%a）&quot;$&gt;</code></pre>

<p>【<$mt:EntryDate format="%Y年"$>（平成<$mt:GetVar name="entry_date_heisei"$>年）<$mt:EntryDate format="%b月%e日（%a）"$>】</p>

<pre class="mtml"><code>&lt;$mt:EntryDate format=&quot;%Y年&quot;$&gt;（平成&lt;$mt:GetVar name=&quot;entry_date_heisei&quot;$&gt;年）&lt;$mt:EntryDate format=&quot;%b月%e日（%a）&quot;$&gt;</code></pre>

<h3>「昭和」と「平成」に対応させる場合</h3>

<p>【 yyyy年（年号xx年）mm月dd日（曜日）】</p>

<pre class="mtml"><code>&lt;$mt:EntryDate format=&quot;%Y年&quot;$&gt;（&lt;$mt:GetVar name=&quot;entry_date_nengou&quot;$&gt;）&lt;$mt:EntryDate format=&quot;%b月%e日（%a）&quot;$&gt;</code></pre>

<p>この形式でこのブログ記事事態を再構築した結果は次のとおりです。</p>

<ul>
	<li><$mt:EntryDate format="%Y年"$>（<$mt:GetVar name="entry_date_nengou"$>）<$mt:EntryDate format="%b月%e日（%a）"$></li>
</ul>

<del datetime="2008-10-27T06:54:56+09:00"><p>この考え方で、さらに条件分岐すれば「昭和」など過去の年号にも対応できます。</p></del>

<dl>
<dt>【2008-10-27 追記】</dt>
<dd><p>「昭和」にも対応できるパターンの記述を追加しました。</p></dd>
</dl>

<p>以上です。</p>
]]>
    </content>
</entry>

<entry>
    <title>Movable Type の記事投稿画面の UI をカテゴリごとに変えるカスタマイズ （ jQuery 版）</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2008/10/24-062136.html" />
    <id>tag:www.tinybeans.net,2008:/blog//1.197</id>

    <published>2008-10-23T21:21:36Z</published>
    <updated>2008-11-10T21:17:40Z</updated>

    <summary>Movable Type の記事投稿画面で、各入力フォームのラベルや位置などのインターフェースを、カテゴリごとに変えられるように管理画面をカスタマイズしてみました。 カスタマイズといっても、管理画面の...</summary>
    <author>
        <name>tinybeans</name>
        
    </author>
    
        <category term="1000_Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jquery" label="jQuery" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype" label="movabletype" 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 の記事投稿画面で、各入力フォームのラベルや位置などのインターフェースを、カテゴリごとに変えられるように管理画面をカスタマイズしてみました。</p>

<p class="image"><a href="http://www.tinybeans.net/blog/images/uichanger01.gif"><img alt="uichanger01.gif" src="http://www.tinybeans.net/blog/assets_c/2008/10/uichanger01-thumb-300x228-491.gif" width="300" height="228" /></a></p>

<p>カスタマイズといっても、管理画面のテンプレートはほとんどいじらずに、jQuery で書いた JavaScript テンプレートを読み込むだけです。もう少し正確に言えば、本体のテンプレートは一切いじらず、コピーをカスタマイズして、別のディレクトリに置くだけです。</p>

<p>カスタムフィールドのない MTOS や、マルチブログにするほどでもないけどちょっとインターフェースを変えたいんだよなーってときに役立つと思います。</p>]]>
        <![CDATA[<h2>実装する機能</h2>

<p>ブログ記事の作成・編集画面に、あらかじめ設定したカテゴリごとにインターフェースを変えるボタンを追加します。</p>

<p>例えば、「スケジュール」カテゴリ専用のインターフェースを作る場合、編集画面に次のようなボタンが表示されます。</p>

<p class="image"><img alt="uichanger02.gif" src="http://www.tinybeans.net/blog/images/uichanger02.gif" width="165" height="28" /></p>

<p>これをクリックすると、ボタンが次のように変わり、各入力フォームのラベル名や位置が「スケジュール」カテゴリ専用のインターフェースに変わります。新規作成の場合は該当するカテゴリが自動的に選択されます。</p>

<p class="image"><img alt="uichanger03.gif" src="http://www.tinybeans.net/blog/images/uichanger03.gif" width="165" height="28" /></p>

<p>もう一度ボタンをクリックすると、ボタンがグレーになり、該当するカテゴリの選択も解除されます。</p>

<p>下のボタンをクリックしてみてください。少しイメージがつかめると思います。</p>

<p id="test_button" class="image"><img alt="uichanger02.gif" src="http://www.tinybeans.net/blog/images/uichanger02.gif" width="165" height="28" /></p>

<p id="test_screen_01" class="image"><img alt="uichanger09.gif" src="http://www.tinybeans.net/blog/assets_c/2008/10/uichanger09-thumb-450x283-503.gif" width="450" height="283" /></p>

<p id="test_screen_02" class="image"><img alt="uichanger10.gif" src="http://www.tinybeans.net/blog/assets_c/2008/10/uichanger10-thumb-450x283-505.gif" width="450" height="283" /></p>

<h2>カスタマイズ方法</h2>

<p class="thumb"><a href="http://www.amazon.co.jp/o/ASIN/4839927537/tinybeans-22/"><img src="http://ecx.images-amazon.com/images/I/419CBvudhTL._SL500_SS75_.jpg" title="Movable Type プロフェッショナル・スタイル MT4.1対応" width="75" height="75" /></a></p>

<p>管理画面のカスタマイズについては以前の記事（<a href="http://www.tinybeans.net/blog/2008/09/22-130424.html">Movable Type のブログ記事の出力ファイル名を変更する管理画面のカスタマイズ</a>）でも書きましたが、『<a href="http://www.amazon.co.jp/o/ASIN/4839927537/tinybeans-22/">Movable Type プロフェッショナル・スタイル MT4.1対応</a>』の Track B の「 5 ユーザー指向の管理画面をつくる」がとても参考になります。</p>

<h3 id="edit_entry_tmpl">カスタマイズするファイルの準備</h3>

<p>今回カスタマイズするのは、ブログ記事やウェブページの編集画面用のテンプレートファイル「 edit_entry.tmpl 」です。このファイルは以下の場所にあります。</p>
<ul>
	<li class="folder">mt
	<ul>
		<li class="folder">tmpl
		<ul>
			<li class="folder">cms
			<ul>
				<li class="file"><em>edit_entry.tmpl</em></li>
			</ul></li>
		</ul></li>
	</ul></li>
</ul>

<p>このファイルをローカルにコピーして同名で保存したファイルをカスタマイズします。</p>

<h3>カスタマイズ内容</h3>

<p>さて、このカスタマイズの内容を解説しようと思っていたのですが、結局ほぼすべてが jQuery の解説になってしまうのでここでは割愛します。その代わりと言ってはなんですが、カスタマイズしたファイルを置いておくので「使用方法」という形で解説します。</p>

<p class="thumb"><a href="http://www.amazon.co.jp/o/ASIN/4774134902/tinybeans-22/"><img src="http://ec2.images-amazon.com/images/I/517I%2Bb6q4kL._SL500_SS75_.jpg" alt="jQueryで作る Ajaxアプリケーション" width="75" height="75" /></a></p>

<p>なお、jQuery については、『<a href="http://www.amazon.co.jp/o/ASIN/4774134902/tinybeans-22/">jQueryで作る Ajaxアプリケーション</a>』という書籍で勉強しています。初心者の僕でも非常に分かりやすいです。</p>

<h2>最新版ダウンロード</h2>

<ul>
	<li class="download"><a href="http://www.tinybeans.net/blog/archive/ui_changer_mt422_02.zip">ui_changer_mt422_02.zip</a> （最新版）</li>
</ul>

<p><a href="#changeLog">チェンジログはこちら</a></p>

<p>ここにあるファイルは Movable Type 4.22 用です。それ以外の MT 4.x で使用する場合は<a href="#mt_4x">ページの最後の方</a>の説明を参考にしてください。</p>

<h2>使用方法（基本編）</h2>

<h3>インターフェースの設定</h3>

<p>ダウンロードしたファイルを解凍します。解凍して出来たフォルダの中に次のファイルとフォルダが入っています。</p>

<ul>
	<li class="file">edit_entry.tmpl</li>
	<li class="folder">include
<ul>
	<li class="file">jQuery.tmpl</li>
	<li class="file">ui_changer_setup.tmpl</li>
	<li class="file"><em>ui_changer.tmpl</em></li>
</ul></li>
</ul>

<p>これらのファイルの内、ui_changer.tmpl を UTF-8 で保存できるテキストエディタ等で開いて編集します。</p>

<p>まず、このファイルの 2 ～ 5 行目の、「スケジュール」と「3」の部分を変更します。</p>

<pre class="mtml"><code>&lt;mt:Ignore&gt;&lt;!-- ▼ Must Edit ▼ --&gt;&lt;/mt:Ignore&gt;
&lt;mt:setvarblock name=&quot;change_cat&quot;&gt;<em>スケジュール</em>&lt;/mt:setvarblock&gt;
&lt;mt:setvarblock name=&quot;change_cat_id&quot;&gt;<em>3</em>&lt;/mt:setvarblock&gt;
&lt;mt:Ignore&gt;&lt;!-- ▲ Must Edit ▲ --&gt;&lt;/mt:Ignore&gt;</code></pre>

<p>「スケジュール」部分にはユーザーインターフェース（以下「 UI 」）を変更する対象となるカテゴリ名を、「3」部分にはそのカテゴリ ID を入れます。カテゴリ ID は、各カテゴリ編集ページの URL の最後の「 id=3 」の部分の数字です。</p>

<p class="image"><img alt="uichanger04.gif" src="http://www.tinybeans.net/blog/images/uichanger04.gif" width="222" height="37" /></p>

<p>次に、26 行目の 「 // ▼ Edit ▼ 」から 82 行目の「 // ▲ Edit ▲ 」までの間を編集します。</p>

<pre class="javascript simple_accordion" title="ui_changer.tmpl （26 ～ 82 行目）"><code>// ▼ Edit ▼
    // タイトル
    title
//        .insertBefore()
//        .insertAfter()
        .find('label#title-label').text('タイトル');
    // 本文
    content
//        .insertBefore()
//        .insertAfter()
        .find('div#editor-inner div label:eq(0)').text('本文');
    // 続き
    content
//        .insertBefore()
//        .insertAfter()
        .find('div#editor-inner div label:eq(1)').text('続き');
    // タグ
    tags
//        .removeClass('hidden')/*  表示  */
//        .addClass('hidden')   /* 非表示 */
//        .insertBefore()
//        .insertAfter()
        .find('label#tags-label').text('タグ');
    // 概要
    excerpt
//        .removeClass('hidden')/*  表示  */
//        .addClass('hidden')   /* 非表示 */
//        .insertBefore()
//        .insertAfter()
        .find('label#excerpt-label').text('概要');
    // キーワード
    keywords
//        .removeClass('hidden')/*  表示  */
//        .addClass('hidden')   /* 非表示 */
//        .insertBefore()
//        .insertAfter()
        .find('label#keywords-label').text('キーワード');
    // 公開日
    authored_on
//        .removeClass('hidden')/*  表示  */
//        .addClass('hidden')   /* 非表示 */
//        .insertBefore()
//        .insertAfter()
        .find('label#authored_on-label').text('公開日');
});
// 公開日をメインコンテンツ（左カラム）に移す場合のスタイル設定
/* ← この行を削除
jQuery('div#authored_on-field').each(function(){
    jQuery(this).find('div.field-header')
        .css({'float':'none','width':'auto'});
    jQuery(this).find('div.field-content')
        .css('margin-left','0');
    jQuery(this).find('label#authored_on-label')
        .css('text-align','left');
});
この行を削除 → */
// ▲ Edit ▲</code></pre>

<h3>ラベルを変更する方法</h3>

<p>それぞれのフォームの「 ～.text('<em>タイトル</em>'); 」の部分を変更します。デフォルトのラベル名が入っているので分かりやすいと思います。</p>

<p>（例）　デフォルトのラベル名「タイトル」を「場所」に変更する場合</p>

<pre class="javascript"><code>    // タイトル
    title
//        .insertBefore()
//        .insertAfter()
        .find('label#title-label').text('<em>場所</em>');</code></pre>

<h3>位置を変更する方法</h3>

<p>それぞれのフォームの次のどちらかの（かっこ）内に値を入れて、行頭の「 // 」を削除します。</p>

<pre class="javascript"><code>//        .insertBefore()
//        .insertAfter()</code></pre>

<p>この 2 行の役割は次のとおりです。少しややこしいですが、慣れれば簡単です。</p>

<dl>
<dt>insertBefore(title)</dt>
<dd><p>title の前に挿入（移動）します。</p></dd>
<dt>insertAfter(title)</dt>
<dd><p>title の後に挿入（移動）します。</p></dd>
</dl>

<p>（かっこ）内に入れる値は、コメントアウトしてある各フォーム名の直下にある変数名です。「本文」と「続き」は、場所的には 2 つで 1 セットなので同じ変数名になっています。</p>

<pre class="javascript"><code>    // タイトル
    <em>title</em>
//        .insertBefore()
//        .insertAfter()
        .find('label#title-label').text('タイトル');
    // 本文
    <em>content</em>
//        .insertBefore()
//        .insertAfter()
        .find('div#editor-inner div label:eq(0)').text('本文');</code></pre>

<h3>表示・非表示を設定する方法</h3>

<p>「タグ」、「概要」、「キーワード」、「公開日」に関しては、強制的に表示・非表示を切り替えることができます。</p>

<p>次のどちらかの行頭の「 // 」を削除すればOKです。</p>

<pre class="javascript"><code>//        .removeClass('hidden')/*  表示  */
//        .addClass('hidden')   /* 非表示 */</code></pre>

<h3>「公開日」フォームを左（メイン）カラムに移動する方法</h3>

<p>ラベルを変更する可能性のあるフォームの中で、「公開日」だけが右カラムにあります。これを左カラムに移動する場合はスタイルを変更する必要があります。</p>

<p>その場合、次の 2 行目の「 /* ← この行を削除 」と最後の「 この行を削除 → */ 」を削除します。</p>

<pre class="javascript"><code>// 公開日をメインコンテンツ（左カラム）に移す場合のスタイル設定
<em>/* ← この行を削除</em>
jQuery('div#authored_on-field').each(function(){
    jQuery(this).find('div.field-header')
        .css({'float':'none','width':'auto'});
    jQuery(this).find('div.field-content')
        .css('margin-left','0');
    jQuery(this).find('label#authored_on-label')
        .css('text-align','left');
});
<em>この行を削除 → */</em></code></pre>

<h3>ファイルのアップロード</h3>

<p>ここまでで設定したファイルを上書きし、解凍したをフォルダとファイルを丸ごと、Movable Type 本体がインストールしてあるディレクトリ内の alt-tmpl ディレクトリにアップロードすればOKです。</p>

<ul>
	<li class="folder">mt<ul>
	<li class="folder"><strong>alt-tmpl</strong><ul>
	<li class="file">edit_entry.tmpl</li>
	<li class="folder">include
<ul>
	<li class="file">jQuery.tmpl</li>
	<li class="file">ui_changer_setup.tmpl</li>
	<li class="file"><em>ui_changer.tmpl</em></li>
</ul></li>
</ul></li>
</ul></li>
</ul>

<p>使用を中止したいときは、ここでアップロードしたファイルを削除すればOKです。</p>

<h2>使用方法（応用編）</h2>

<p>2 つ以上のカテゴリを、個別のインターフェースで使用したい場合、上記の方法で ui_changer.tmpl ファイルを編集し、別名で保存します。ここでは ui_changer_2.tmpl として保存したとします。</p>

<p>次に、edit_entry.tmpl を編集します。</p>

<ul>
	<li class="file"><strong>edit_entry.tmpl</strong></li>
	<li class="folder">include
<ul>
	<li class="file">jQuery.tmpl</li>
	<li class="file">ui_changer_setup.tmpl</li>
	<li class="file">ui_changer.tmpl</li>
	<li class="file"><em>ui_changer_2.tmpl</em></li>
</ul></li>
</ul>

<p>edit_entry.tmpl の 983 ～ 986 行目に次の記述があります。</p>

<pre class="mtml"><code>&lt;mt:include name=&quot;include/jQuery.tmpl&quot;&gt;
&lt;mt:include name=&quot;include/ui_changer_setup.tmpl&quot;&gt;
&lt;mt:include name=&quot;include/ui_changer.tmpl&quot;&gt;
&lt;mt:include name=&quot;include/header.tmpl&quot; id=&quot;header_include&quot;&gt;</code></pre>

<p>この 3 行目の下に、先ほど別名で保存したファイルをインクルードする 1 行を加えればOKです。</p>

<pre class="mtml"><code>&lt;mt:include name=&quot;include/jQuery.tmpl&quot;&gt;
&lt;mt:include name=&quot;include/ui_changer_setup.tmpl&quot;&gt;
&lt;mt:include name=&quot;include/ui_changer.tmpl&quot;&gt;
<em>&lt;mt:include name=&quot;include/ui_changer_2.tmpl&quot;&gt;</em>
&lt;mt:include name=&quot;include/header.tmpl&quot; id=&quot;header_include&quot;&gt;</code></pre>

<p>サンプルとして、「スケジュール専用 UI 」と「試合結果専用 UI 」を作ってみました。</p>

<p class="image"><a href="http://www.tinybeans.net/blog/images/uichanger05.gif"><img alt="uichanger05.gif" src="http://www.tinybeans.net/blog/assets_c/2008/10/uichanger05-thumb-300x180-499.gif" width="300" height="180" /></a></p>

<p class="image"><a href="http://www.tinybeans.net/blog/images/uichanger06.gif"><img alt="uichanger06.gif" src="http://www.tinybeans.net/blog/assets_c/2008/10/uichanger06-thumb-300x197-501.gif" width="300" height="197" /></a></p>

<p>使い方は以上です。</p>

<h2>補足</h2>

<h3 id="mt_4x">Movable Type 4.22 以外で使用する場合</h3>

<p>ここに置いてあるファイルは Movable Type 4.22 用ですが、以下のようにすればそれ以外の MT 4 でも使えると思います。</p>

<p>まず、本体の edit_entry.tmpl をコピーして開きます（ページ中ほどの<a href="#edit_entry_tmpl">カスタマイズするファイルの準備</a>参照）。</p>

<p>開いたファイルのだいたい 980 行付近に次の 1 行があると思います。</p>

<pre class="mtml"><code>&lt;mt:include name=&quot;include/header.tmpl&quot; id=&quot;header_include&quot;&gt;</code></pre>

<p>この行の直前に、次の 3 行を挿入すればOKです。</p>

<pre class="mtml"><code>&lt;mt:include name=&quot;include/jQuery.tmpl&quot;&gt;
&lt;mt:include name=&quot;include/ui_changer_setup.tmpl&quot;&gt;
&lt;mt:include name=&quot;include/ui_changer.tmpl&quot;&gt;</code></pre>

<h3>その他</h3>

<ul>
	<li>ここでは、Google AJAX API を使って jQuery を読み込んでいます。（参考：<a href="http://blog.kyosuke.jp/2008/06/04/55">inputlog - Google AJAX APIを使ってjQueryを読み込む</a>）</li>
	<li>他のライブラリと競合しないように、jQuery の「 $ 」は無効にしてあるので、jQuery オブジェクトを使う場合は「 jQuery 」とする必要があります。カスタマイズする際はご注意ください。</li>
</ul>

<h2>ダウンロード</h2>

<ul>
	<li class="download"><a href="http://www.tinybeans.net/blog/archive/ui_changer_mt422_02.zip">ui_changer_mt422_02.zip</a> （最新版）</li>
	<li class="download"><a href="http://www.tinybeans.net/blog/archive/ui_changer_mt422.zip">ui_changer_mt422.zip</a></li>
</ul>

<h2 id="changeLog">チェンジログ</h2>
<dl>
<dt>【2008-10-26】</dt>
<dd><p>カテゴリにチェックを入れる動きを少し修正しました。</p>
<p>UI チェンジャーをクリックすると、自動的に対象カテゴリにチェックが入り、もう一度クリックすると対象カテゴリのチェックが外れる動作を、新規投稿時も編集時も安定して行うようになりました。</p></dd>
</dl>

<p>※ご利用は自己責任でお願いします。</p>]]>
    </content>
</entry>

<entry>
    <title>Custom Field GUI Utility 1.0.0 にバージョンアップ</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2008/10/18-060833.html" />
    <id>tag:www.tinybeans.net,2008:/blog//1.196</id>

    <published>2008-10-17T21:08:33Z</published>
    <updated>2008-10-17T21:10:32Z</updated>

    <summary>Custom Field GUI Utility をバージョン 1.0.0 にバージョンアップしました。WordPressのカスタムフィールドが、より使いやすくなると思います。 主な変更点は以下のとお...</summary>
    <author>
        <name>tinybeans</name>
        
    </author>
    
        <category term="1500_WordPress" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="1502_プラグイン" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="customfieldgui" label="Custom Field GUI" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wordpressplugin" label="wordpress-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="http://www.tinybeans.net/blog/download/wp-plugin/cfg-utility-100.html">Custom Field GUI Utility</a> をバージョン 1.0.0 にバージョンアップしました。<a href="http://wordpress.org/">WordPress</a>のカスタムフィールドが、より使いやすくなると思います。</p>

<p>主な変更点は以下のとおりです。WordPress 2.6.x をご利用の方は、最新版がお勧めです。</p>

<ul>
	<li>「投稿」及び「ページ」の作成・編集画面に生成されるフォームのインターフェースを、WordPress 2.6.x の他のフィールドと同じにしました。カスタムフィールドを増やしても管理画面上の違和感がなくなります。</li>
	<li>イメージフィールドに、WordPress オリジナルのアップローダーを使用して URL を挿入できるようになりました。</li>
	<li>画像のサムネイル表示が <a href="http://famspam.com/facebox">Facebox 1.2</a>を使ったオーバーレイ表示になりました。</li>
</ul>

<p>WordPress でカスタムフィールドを使おうと思っている方は、是非チェックしてみてください。</p>

<ul>
	<li><a href="http://www.tinybeans.net/blog/download/wp-plugin/cfg-utility-100.html">Custom Field GUI Utility - WordPress プラグイン</a></li>
</ul>]]>
        
    </content>
</entry>

<entry>
    <title>CSS Nite in Ginza, Vol.27 に参加した感想と実践</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2008/10/17-122814.html" />
    <id>tag:www.tinybeans.net,2008:/blog//1.194</id>

    <published>2008-10-17T03:28:14Z</published>
    <updated>2008-10-17T13:49:47Z</updated>

    <summary>CSS Nite in Ginza, Vol.27に参加した感想と実践です。実践したCSSを反映させるために個別ページでご覧ください。...</summary>
    <author>
        <name>tinybeans</name>
        
    </author>
    
        <category term="4000_Diary" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="セミナー" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="cssnite" label="css nite" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.tinybeans.net/blog/">
        <![CDATA[<mt:If name="main_index"><p><a href="http://cssnite.jp/ginza/vol27/">CSS Nite in Ginza, Vol.27</a>に参加した感想と実践です。実践したCSSを反映させるために<a href="http://www.tinybeans.net/blog/2008/10/17-122814.html">個別ページ</a>でご覧ください。</p></mt:If>]]>
        <![CDATA[<div class="sample"><div>
<p style="text-align: left; text-indent: 15px;background: url('http://www.tinybeans.net/blog/images/no01.png') no-repeat left top;">さっそく実践してみました。<br />display : inline-block ！</p>
<p style="text-align: left;">さて、<a href="http://cssnite.jp/ginza/vol27/">CSS Nite in Ginza, Vol.27（2008年10月16日開催）</a>に参加しました。おー、<a href="http://cssnite.jp/archives/post_1156.html">CSS Nite in Ginza, Vol.27が終了しました＋フォローアップ</a>の写真に僕も写ってます。<br /><a id="who_am_i" href="#cssnite_ginza27">特定してみる？</a></p>

<div id="cssnite_ginza27" style="position: relative; display: none;">
<a href="http://cssnite.jp/archives/post_1156.html"><img src="http://cssnite.jp/images/DSC0219.jpg" title="CSS Nite in Ginza, Vol.27が終了しました＋フォローアップ | CSS Nite公式サイト" /></a>
<span id="cssnite_ginza27_span" style="display: none;position: absolute;width:100px;height:120px;top:160px;left:110px;border: 3px dotted #cccccc;background-color: transparent;"></span>
<input type="button" value="CLOSE" /></div>

<script type="text/javascript">
$('a#who_am_i').click(function(){
	$('#cssnite_ginza27 input').click(function(){
		$(this).parent('#cssnite_ginza27').fadeOut();
	});
	$('#cssnite_ginza27').show(
		'slow',
		function(){$('#cssnite_ginza27_span').fadeIn(
			3000,
			function(){$(this).fadeOut(3000)}
		);}
	);
});
</script>

<p style="text-align: left;" class="last_odd">では本題です。</p>
</div></div>

<div class="sample"><div>
<p style="text-align: left; text-indent: 15px;background: url('http://www.tinybeans.net/blog/images/no02.png') no-repeat left top;">今回の CSS Nite では『Webの世界に情報発信しよう！』（<a href="http://www.hamashun.com/" title="hamashun.com">浜　俊太朗</a>）と	『書籍などに紹介されていない display : inline-block について』（<a href="http://yomotsu.net/index.xhtml" title="ヨモツネット">小山田 晃浩</a>）の 2 本立てでした。</p>

<p style="text-align: left;" class="last_even">セッション 1 の『Webの世界に情報発信しよう！』で話された内容は、以前、僕が<a href="http://hyper-text.org/" title="WWW WATCH">ひそかに尊敬するお方</a>から聞いていたことでした。つまりこのブログも、浜さんがおっしゃっていたことを意識しつつ、こうして細々と実践しているわけです。</p>
</div></div>

<div class="sample"><div>
<p style="text-align: left; text-indent: 15px;background: url('http://www.tinybeans.net/blog/images/no03.png') no-repeat left top;">しかし、やはり自分は素人なので、技術系の話をエントリーするのは勇気がいることだったのですが、浜さんのセミナーを聞いて、少し吹っ切れた気がしました。だからと言って極力手は抜かず、しっかりと調べてエントリーしていきたいと思います。</p>

<p style="text-align: left;" class="last_odd">それにしても浜さん、セミナーに登壇するのは初めてだとは思えないほど聞きやすく、分かりやすく、飽きなくて良かったと思いますよ。</p>
</div></div>

<div class="sample"><div>
<p style="text-align: left; text-indent: 15px;background: url('http://www.tinybeans.net/blog/images/no04.png') no-repeat left top;">セッション 2 の『書籍などに紹介されていない display : inline-block について』については、このブログ記事でもさっそく実践してみました。読みにくいかもしれませんが、どうしてもやってみたかったのです。</p>

<p style="text-align: left;" class="last_even">この display : inline-block を使ったレイアウト、上手く活用すればサイト管理がかなり楽になる部分もでてくると思います。float レイアウトは、僕の CSS 力が未熟だからか、どうも柔軟性に欠けると思うこともあるので、積極的に活用していきたいと思います。</p>
</div></div>

<div class="sample"><div>
<p style="text-align: left; text-indent: 15px;background: url('http://www.tinybeans.net/blog/images/no05.png') no-repeat left top;">また、サクッと Dreamweaver ハックを見せちゃう鷹野さん、さすがです。</p>
</div></div>]]>
    </content>
</entry>

<entry>
    <title>Make Link を使って Amazon アソシエイトの個別商品リンクを作る</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2008/10/14-131352.html" />
    <id>tag:www.tinybeans.net,2008:/blog//1.192</id>

    <published>2008-10-14T04:13:52Z</published>
    <updated>2008-10-15T06:03:54Z</updated>

    <summary>僕が愛用している Firefox のアドオンの中に、Make Link というアドオンがあります。 これは、リンク用のソースコード等を右クリックから色々な形式でコピーすることができるようになるアドオン...</summary>
    <author>
        <name>tinybeans</name>
        
    </author>
    
        <category term="3000_Tool" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="3002_Firefox" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="addons" label="add-ons" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="firefox" label="firefox" 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://mozilla.jp/firefox/">Firefox</a> のアドオンの中に、<a href="https://addons.mozilla.org/ja/firefox/addon/142">Make Link</a> というアドオンがあります。
</p>

<p>これは、リンク用のソースコード等を右クリックから色々な形式でコピーすることができるようになるアドオンで、その形式も自由にカスタマイズ可能ということもあり、ブログを書くときに重宝しています。</p>

<p>今回は、この <a href="https://addons.mozilla.org/ja/firefox/addon/142">Make Link</a> を使って、<a href="https://affiliate.amazon.co.jp/">Amazon.co.jp アソシエイト（アフィリエイト）</a>の「個別商品テキストリンク」を簡単に作成できるようにしてみました。</p>

<p>ちなみに、今回作成するのは、「本」についての以下のような形式の個別商品リンクです。</p>

<pre class="html"><code>&lt;a href=&quot;http://www.amazon.co.jp/o/ASIN/<em>10桁のISBN</em>/<em>トラッキングID</em>/&quot;&gt;<em>書名</em>&lt;/a&gt;</code></pre>]]>
        <![CDATA[<h2>リンク形式のカスタマイズ方法</h2>

<p>Make Link をインストールしたら、「ツール」＞「アドオン」＞Make Link の「設定」を開くか、任意のWeb ページ上で右クリックして「 Make Link 」＞「設定」をクリックします。</p>

<p class="image"><a href="http://www.tinybeans.net/blog/images/marklink_amazon01.jpg"><img alt="marklink_amazon01.jpg" src="http://www.tinybeans.net/blog/assets_c/2008/10/marklink_amazon01-thumb-300x340.jpg" width="300" height="340" /></a></p>

<p>「 Make Link オプション」が開きますので「新規」をクリックします。</p>

<p class="image"><a href="http://www.tinybeans.net/blog/images/marklink_amazon02.jpg"><img alt="marklink_amazon02.jpg" src="http://www.tinybeans.net/blog/assets_c/2008/10/marklink_amazon02-thumb-300x200.jpg" width="300" height="200" /></a></p>

<p>「名前」に「 Amazon - Title 」と入力し、「フォーマット」に以下のように入力し、「HTMLエンティティを使用する」にチェックを入れて「OK」をクリックします。「トラッキングID」は自分のものを入れてください。</p>

<pre class="html"><code>&lt;a href=&quot;http://www.amazon.co.jp/o/ASIN/%text%/<strong>トラッキングID</strong>/&quot;&gt;%input%&lt;/a&gt;</code></pre>

<p class="image"><a href="http://www.tinybeans.net/blog/images/makelink_amazon03.jpg"><img alt="makelink_amazon03.jpg" src="http://www.tinybeans.net/blog/assets_c/2008/10/makelink_amazon03-thumb-300x225.jpg" width="300" height="225" /></a></p>

<h2>個別商品リンクの作成方法</h2>

<p>個別商品リンクを作りたい本のページを表示して、「書名」をコピーします。</p>

<p class="image"><a href="http://www.tinybeans.net/blog/images/makelink_amazon04.jpg"><img alt="makelink_amazon04.jpg" src="http://www.tinybeans.net/blog/assets_c/2008/10/makelink_amazon04-thumb-300x33.jpg" width="300" height="33" /></a></p>

<p>次に、「 ISBN-10 」を選択した状態で、右クリック＞「 Make Link 」＞「 Amazon - Title 」をクリックします。</p>

<p class="image"><a href="http://www.tinybeans.net/blog/images/makelink_amazon05.jpg"><img alt="makelink_amazon05.jpg" src="http://www.tinybeans.net/blog/assets_c/2008/10/makelink_amazon05-thumb-300x211.jpg" width="300" height="211" /></a></p>

<p>入力フォームが現れるので、先ほどコピーした「書名」をペーストして「OK」をクリックすれば完了です。</p>

<p class="image"><a href="http://www.tinybeans.net/blog/images/makelink_amazon06.jpg"><img alt="makelink_amazon06.jpg" src="http://www.tinybeans.net/blog/assets_c/2008/10/makelink_amazon06-thumb-300x136.jpg" width="300" height="136" /></a></p>

<p>これで以下のようなリンクがクリップボードにコピーされます。</p>

<ul>
	<li><a href="http://www.amazon.co.jp/o/ASIN/4873113733/tinybeans-22/">Head First JavaScript 頭とからだで覚えるJavaScriptの基本</a></li>
</ul>

<pre class="html"><code>&lt;a href=&quot;http://www.amazon.co.jp/o/ASIN/4873113733/tinybeans-22/&quot;&gt;Head First JavaScript 頭とからだで覚えるJavaScriptの基本&lt;/a&gt;</code></pre>

<h2>応用</h2>

<p>これを応用して、フォーマットに毎回書くような定型分まで入れてしまえば、ブログに本の感想を書くのが少し効率かできたりもします。</p>

<pre class="html"><code>&lt;p&gt;『&lt;a href=&quot;http://www.amazon.co.jp/o/ASIN/%text%/<strong>トラッキングID</strong>/&quot;&gt;%input%&lt;/a&gt;』を読みました。&lt;/p&gt;

&lt;p&gt;概要を書く&lt;/p&gt;

&lt;p&gt;一言でこの本の印象を言うなら「」といった感じです。&lt;/p&gt;</code></pre>

<dl>
<dt>【2008-10-15 追記】</dt>
<dd><p><a href="http://www.amazon.co.jp/">Amazon.co.jp</a> に、アソシエイトツールバーなるものが登場していました！個別商品リンクを作成するのがすごく簡単になっています。</p>

<p>ただ、Amazon の方で作るリンクだと、URL が <a href="http://openlab.ring.gr.jp/k16/htmllint/htmllint.html">lint</a> に引っかかるので、しばらくこの記事の方法で続けます。</p></dd>
</dl>

<p>以上です。</p>]]>
    </content>
</entry>

<entry>
    <title>WordPress の記事編集画面で各フィールドへジャンプするリンクを生成するプラグイン</title>
    <link rel="alternate" type="text/html" href="http://www.tinybeans.net/blog/2008/10/10-063932.html" />
    <id>tag:www.tinybeans.net,2008:/blog//1.190</id>

    <published>2008-10-09T21:39:32Z</published>
    <updated>2008-10-19T21:01:34Z</updated>

    <summary>WordPressの記事作成・編集画面で、各入力フィールドへジャンプするリンクをサイドバーに生成するプラグインを作ってみました。「投稿」「ページ」どちらにも対応しています。 Custom Field ...</summary>
    <author>
        <name>tinybeans</name>
        
    </author>
    
        <category term="1500_WordPress" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="1502_プラグイン" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="fieldnavigation" label="Field Navigation" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wordpressplugin" label="wordpress-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="http://wordpress.org/">WordPress</a>の記事作成・編集画面で、各入力フィールドへジャンプするリンクをサイドバーに生成するプラグインを作ってみました。「投稿」「ページ」どちらにも対応しています。</p>

<p class="image"><img alt="field_navi01.gif" src="http://www.tinybeans.net/blog/images/field_navi01.gif" width="265" height="247" /></p>

<p><a href="http://www.tinybeans.net/blog/download/wp-plugin/cfg-utility-100.html" title="当ブログで公開している Custom Field GUI のカスタマイズ版">Custom Field GUI Utility</a