<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom">
    <title>あんちもん2.Lab</title>
    <link rel="alternate" type="text/html" href="http://www.antimon2.atnifty.com/" />
    
   <id>tag:www.antimon2.atnifty.com,2006://1</id>
    <link rel="service.post" type="application/atom+xml" href="http://www.antimon2.atnifty.com/mt/mt-atom.cgi/weblog/blog_id=1" title="あんちもん2.Lab" />
    <updated>2008-12-02T03:20:26Z</updated>
    <subtitle>MovaleType実験室 + MooToolsを中心としたJavaScriptの話題</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type  4.01</generator>
 

<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/a2lab" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="a2lab" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <title>『日付の言語』の設定を拡張！ - DateLangX プラグイン for MT4</title>
    <link rel="alternate" type="text/html" href="http://www.antimon2.atnifty.com/2008/12/datelangx4mt4.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.antimon2.atnifty.com/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=185" title="『日付の言語』の設定を拡張！ - DateLangX プラグイン for MT4" />
    <id>tag:www.antimon2.atnifty.com,2008://1.185</id>
    
    <published>2008-12-02T03:05:35Z</published>
    <updated>2008-12-02T03:20:26Z</updated>
    
    <summary>『日付の言語』機能を拡張するプラグイン DateLangX for MT4 の公開！</summary>
    <author>
        <name>Antimon2</name>
        <uri>http://www.antimon2.atnifty.com/</uri>
    </author>
    
        <category term="MTplugin" />
    
    <content type="html" xml:lang="ja-sl" xml:base="http://www.antimon2.atnifty.com/">
        ニッチなニーズに応えられる（かもしれない）プラグイン、MT4対応版を公開します。
Movable Type (以下、MT) の、ブログ記事設定『日付の言語』を拡張する、DateLangXプラグインです。
MT4.0以降に対応しています（MT4.01、MT4.22で動作確認済み）。
インストールすると、以下の図のように『日付表示用の言語』に項目が追加されます。

&lt;img alt="DateLangX4MT42.jpg" src="http://www.antimon2.atnifty.com/images/DateLangX4MT42.jpg" width="356" height="390" /&gt;

&lt;span style="color: red;"&gt;※&lt;/span&gt;このプラグインは、MT4.x用です。&lt;a href="http://www.antimon2.atnifty.com/2007/01/datelangx.html"&gt;MT3.xをご利用の方はこちらをご覧ください&lt;/a&gt;。
        &lt;h4&gt;ダウンロード&lt;/h4&gt;

(どちらかを選択してください。内容は同じです。)

&lt;h5&gt;ver.0.1 [New!]&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.antimon2.atnifty.com/works/archives/DateLangX4MT4.zip"&gt;DateLangX4MT4.zip&lt;/a&gt;[4,839 Bytes]&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.antimon2.atnifty.com/works/archives/DateLangX4MT4.tar.gz"&gt;DateLangX4MT4.tar.gz&lt;/a&gt;[2,585 Bytes]&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;動作環境&lt;/h4&gt;

MT4.0x以降（transformer利用）。
MT4.01、MT4.22 で動作確認を行っております。

&lt;h4&gt;インストール&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;ダウンロードしたファイルを解凍してください。&lt;br /&gt;解凍ソフトに「ディレクトリ構造を**」というオプションがある場合は、「ディレクトリ構造を有効（再現、等）」にして解凍すると、以下のようなディレクトリ構造が生成されます：&lt;br /&gt;
&lt;pre&gt;&lt;samp&gt;DateLangX
&amp;nbsp;&amp;nbsp;┣DateLangX.pl
&amp;nbsp;&amp;nbsp;┗lib
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;┗DateLangX
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;┣L10N.pm
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;┗L10N
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;┣en_us.pm
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;┗ja.pm&lt;/samp&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;解凍して得られた DateLangX フォルダごと、[MT]/plugins/ フォルダ内にコピー（アップロード）してください。&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;機能 - 日付の言語の拡張&lt;/h4&gt;

インストールすると、ブログ記事設定（各ブログ→グランドナビの「設定」→「ブログ記事設定」、もしくは「設定」→「ブログの設定」→「ブログ記事設定」）の『日付の言語』に、いくつか項目が追加されます。
ver.0.1では、以下の2つが追加されます。

&lt;ul&gt;&lt;li&gt;英語(日付 '/' 区切り)&lt;/li&gt;&lt;li&gt;日本語(日付 '/' 区切り)&lt;/li&gt;&lt;/ul&gt;

例えば、『日本語(日付 '/' 区切り)』を選択し「保存」すると、以降ブログを再構築した場合、ブログの基本的な日付表記が「2008/12/02」のようなスラッシュ区切りになります。
（拙作「&lt;a href="http://www.antimon2.atnifty.com/2006/06/dateslashedfilter.html" title="あんちもん2.Lab: 日本語の日付表記をスラッシュ区切りに - DateSlashedFilter"&gt;DateSlashedFilter&lt;/a&gt;」の代替として使用いただけます。）

&lt;h4&gt;現在分かっている問題点&lt;/h4&gt;

このプラグインは、現在のところ、ダイナミックパブリッシングには対応しておりません。
よってダイナミックパブリッシング環境では、『日本語(日付 '/' 区切り)』に設定しても表示は日本語の通常の表示（例：2008年12月2日）になってしまいます。
これを解決するには、MTのコアライブラリになる MTUtil.php を直接弄ってして改造しないとなりません。
機会があれば、そのハック方法もご紹介したいと思います。
（なおこの問題は、MT3用のDateLangXでも同様です。）

&lt;h4&gt;更新履歴&lt;/h4&gt;

&lt;dl&gt;
&lt;dt&gt;2007/01/20&lt;/dt&gt;&lt;dd&gt;(for MT3 ver.0.1 公開)&lt;ul&gt;
&lt;li&gt;「英語(日付 '/' 区切り)」、「日本語(日付 '/' 区切り)」を提供&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;dt&gt;2008/12/02&lt;/dt&gt;&lt;dd&gt;for MT4 ver.0.1 公開 [New!]&lt;ul&gt;
&lt;li&gt;MT4.x への対応完了。別アーカイブとして公開。&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;h4&gt;免責事項&lt;/h4&gt;

Movable Type のユーザーは目的を問わず、このプラグインを無償で自由に利用することができます。著作権は Antimon2 が保持します。
このプラグインは無保証です。このプラグインの利用によるいかなる損害にも作者は一切の責任を負いません。

&lt;div class="ask-donation" id="ask-donation"&gt;&lt;p&gt;
継続的な開発をご支援くださる方は、よろしければ&lt;a href="http://www.antimon2.atnifty.com/donation.html"&gt;ドネーション&lt;/a&gt;をお願いいたします。&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.antimon2.atnifty.com/donation.html#paypal"&gt;PayPal によるドネーション&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;
    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=6fr7ieV6H2Y:fCHZswNyhzo:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?i=6fr7ieV6H2Y:fCHZswNyhzo:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=6fr7ieV6H2Y:fCHZswNyhzo:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>

<entry>
    <title>丸1年ぶりの更新です。。。</title>
    <link rel="alternate" type="text/html" href="http://www.antimon2.atnifty.com/2008/12/1.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.antimon2.atnifty.com/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=184" title="丸1年ぶりの更新です。。。" />
    <id>tag:www.antimon2.atnifty.com,2008://1.184</id>
    
    <published>2008-12-01T14:01:37Z</published>
    <updated>2008-12-01T14:29:50Z</updated>
    
    <summary>業務多忙を言い訳にほぼ丸1年更新できませんでした。これから少しずつ更新を再開します。</summary>
    <author>
        <name>Antimon2</name>
        <uri>http://www.antimon2.atnifty.com/</uri>
    </author>
    
        <category term="information" />
    
    <content type="html" xml:lang="ja-sl" xml:base="http://www.antimon2.atnifty.com/">
        業務多忙を言い訳にかなーり更新さぼってしまいました。
それに加え、業務ではJavaScriptがメインになってしまい、Movable Type からはしばらく遠ざかっていました。

いろいろあったのですけれど、これから、少しずつ更新を再開します。
表示がおかしいところも直していって、できればMTOS4.2xに移行していきたいな、と。。。

        この1年で、MovableTypeはver.4.2xまでバージョンアップしたし、MooToolsは最近1.2.1にやはりバージョンアップ。
MooToolsは業務でも常に接しているので、ネタはあるし技術ノウハウもかなり溜まってます。
でも一方のMovableTypeの方は、実質MT4.01（今日時点でこのブログのMTのバージョン）を少しかじった程度で基本知識はMT3.3x止まり。

ただ、これから業務でMT4.22を触るので、MovableTypeの方も少しずつ時流に追いつけるかなー、と。

あと、ここだけの話（になるのか？）、会社の方で技術ブログを立ち上げる話も出ていたんです。
そうなったらそちらに移行するかも、という構想もあったのですが、話が進まないまま1年が経過しようとしているので、待つのはやめて行動を起こさないと、と思ったわけでして。

ということで、細々とした更新を続けていくことになると思われますが、これからもよろしくお願いします。

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=xr3JSpSALtE:8pqFOETaR3A:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?i=xr3JSpSALtE:8pqFOETaR3A:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=xr3JSpSALtE:8pqFOETaR3A:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>

<entry>
    <title>リニューアル（ほぼ）完了</title>
    <link rel="alternate" type="text/html" href="http://www.antimon2.atnifty.com/2007/12/renewal.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.antimon2.atnifty.com/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=167" title="リニューアル（ほぼ）完了" />
    <id>tag:www.antimon2.atnifty.com,2007://1.167</id>
    
    <published>2007-12-02T20:22:43Z</published>
    <updated>2007-12-02T20:37:15Z</updated>
    
    <summary>ブログのMT4化＆デザイン変更（小粋空間テンプレートのカスタマイズ）が完了。</summary>
    <author>
        <name>Antimon2</name>
        <uri>http://www.antimon2.atnifty.com/</uri>
    </author>
    
        <category term="information" />
    
    <content type="html" xml:lang="ja-sl" xml:base="http://www.antimon2.atnifty.com/">
        ブログをMT4化しました（やっとこさ）。
取り敢えずきちんと動作しているはずです。

デザインも変更しました。
今まで小粋空間テンプレートのMT3.2用をカスタマイズして使用していましたが、MT4用のものに差し替え、さらに少しカスタマイズして使用しています。

ただまだちょっと完全ではなく、一部のページが旧テンプレートで表示されてしまいます……。
少しずつ直していきますので、長い目(——_——)で見てやってください。
他にも、何か動作がおかしいところとかありましたらご指摘ください。

        
    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=l4mxEbX_oDI:FAsdKtqU11o:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?i=l4mxEbX_oDI:FAsdKtqU11o:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=l4mxEbX_oDI:FAsdKtqU11o:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>

<entry>
    <title>JavaScript-XPathのMooTools用プラグインを作成</title>
    <link rel="alternate" type="text/html" href="http://www.antimon2.atnifty.com/2007/11/xpath4mootools.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.antimon2.atnifty.com/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=164" title="JavaScript-XPathのMooTools用プラグインを作成" />
    <id>tag:www.antimon2.atnifty.com,2007:/lab40//1.164</id>
    
    <published>2007-11-29T13:42:34Z</published>
    <updated>2008-06-12T03:19:30Z</updated>
    
    <summary>MooToolsでXPathを手軽に扱うための拡張を追加するプラグインを作成しました。（XPath for Prototype の MooTools版です。）</summary>
    <author>
        <name>Antimon2</name>
        <uri>http://www.antimon2.atnifty.com/</uri>
    </author>
    
        <category term="MooTools" />
    
    <content type="html" xml:lang="ja-sl" xml:base="http://www.antimon2.atnifty.com/">
        Prototype.js で XPath を手軽に扱うためのプラグイン &lt;a href="http://coderepos.org/share/wiki/JavaScript-XPath/bindings/Prototype" title="XPath for Prototype" target="XPATH"&gt;XPath for Prototype&lt;/a&gt; というものが公開されています。
作者の &lt;a href="http://d.hatena.ne.jp/amachang/" title="IT戦記" target="amachang"&gt;amachang さんのブログ&lt;/a&gt; の、&lt;a href="http://d.hatena.ne.jp/amachang/20071116/1195216866" title="JavaScript-XPath の jQuery 用のプラグインと Prototype.js 用のプラグインを公開しました - IT戦記" target="amachang"&gt;プラグイン公開を紹介する記事&lt;/a&gt;に、「他のライブラリのプラグインに関して」という見出しでこんなことが……。

&lt;blockquote&gt;
もし&lt;br /&gt;
誰か書いてくれる人がいればとてもありがたいなあ。。。とか思っています。&lt;br /&gt;
いませんよねいませんよね＞＜？
&lt;/blockquote&gt;

面白そうなので、書いちゃいました(^-^)
XPath for Prototype の MooTools 版、名付けて「XPath for MooTools」（まんま）。

&lt;strong&gt;【&lt;span style="color:red"&gt;※&lt;/span&gt;2008/06/12 ver.0.2 にバージョンアップ】&lt;/strong&gt;
        &lt;h4&gt;.jsファイル本体&lt;/h4&gt;

以下よりダウンロードしてください。

&lt;a href="http://www.antimon2.atnifty.com/works/xpath4mootools/xpath4mootools.js" title="XPath for MooTools 0.2"&gt;XPath for MooTools 0.2&lt;/a&gt;

&lt;span style="color:red;"&gt;※&lt;/span&gt;2008/06/10に正式公開されたMooTools v.1.2に対応しました。従来のバージョン(v.0.1)はMooTools1.2には対応していません。MooToolsをバージョンアップする際は XPath for MooTools も v.0.2 にバージョンアップをお願いします。

&lt;span style="font-size: smaller"&gt;&lt;span style="color:red;"&gt;※&lt;/span&gt; &lt;a href="http://coderepos.org/share/wiki/JavaScript-XPath/bindings/Prototype" title="XPath for Prototype" target="XPATH"&gt;XPath for Prototype&lt;/a&gt; と比較すると分かると思いますが、ほとんどソースをそのまま流用させていただいています。
MooToolsはProtptype.jsをお手本に開発されたものなので、仕様もコンセプトもとてもよく似ているのです。&lt;/span&gt;

&lt;h4&gt;動作に必要なモノ&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://mootools.net/" target="MooTools" title="mootools - home"&gt;MooTools&lt;/a&gt; v1.x&lt;br /&gt;&lt;span style="color:red;"&gt;※&lt;/span&gt;&lt;del&gt;MooTools v1.2βでは動作確認を行っていません。多分 compatible オプション付きでダウンロードしたモノでないと動かないと思います。&lt;/del&gt;&lt;ins&gt;2008/06/10に正式公開された新バージョンのMooTools v.1.2に対応しました。従来どおり MooTools v.1.11 にも対応しています。&lt;/ins&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://coderepos.org/share/wiki/JavaScript-XPath" title="JavaScript-XPath" target="XPATH"&gt;JavaScript-XPath&lt;/a&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;※&lt;/span&gt;XPathをネイティブでサポートしていないブラウザのために必要です。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;使用方法&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;MooToolsのJavaScriptファイルを読み込みます。&lt;/li&gt;
&lt;li&gt;JavaScript-XPathのJavaScriptファイルを読み込みます。&lt;/li&gt;
&lt;li&gt;XPath for MooToolsのJavaScriptファイルを読み込みます。&lt;/li&gt;
&lt;li&gt;XPathで楽しんでください！&lt;/li&gt;
&lt;/ul&gt;

&lt;span style="font-size: smaller"&gt;&lt;span style="color:red;"&gt;※&lt;/span&gt; &lt;a href="http://coderepos.org/share/wiki/JavaScript-XPath/bindings/Prototype" title="XPath for Prototype" target="XPATH"&gt;本家サイト&lt;/a&gt;の真似っこです(^-^;)&lt;/span&gt;

&lt;h4&gt;簡単なサンプル&lt;/h4&gt;

こちらも XPath for Prototype のサンプルをベースにしています。
MooTools用にカスタマイズした部分に対する動きのサンプルも追加しています。

&lt;blockquote class="code"&gt;&lt;pre&gt;
&amp;lt;html&amp;gt;
 &amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Hello, XPath!&amp;lt;/title&amp;gt;
  
  &amp;lt;!-- import MooTools --&amp;gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;mootools.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;!-- import JavaScript-XPath --&amp;gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;javascript-xpath.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;!-- import XPath for MooTools --&amp;gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;xpath4mootools.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
  
  &amp;lt;!-- use XPath --&amp;gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
// &amp;lt;![CDATA[
window.addEvent(&amp;#39;domready&amp;#39;, function() {
  
  var li = $x(&amp;#39;//ul/li[&amp;#64;title=&amp;quot;xpath&amp;quot;]&amp;#39;)[0];
  //li.setHTML(&amp;#39;Enjoy &amp;#39; + li.innerHTML + &amp;#39;!&amp;#39;);  // &amp;lt;- for MooTools v.1.11
  li.set(&amp;#39;html&amp;#39;, &amp;#39;Enjoy &amp;#39; + li.innerHTML + &amp;#39;!&amp;#39;);  // &amp;lt;- for MooTools v.1.2
  
//  alert($(document.body).xpath(&amp;#39;ul/li[1]&amp;#39;)[0].innerHTML);
  alert($(document.body).getElementByXPath(&amp;#39;ul/li[1]&amp;#39;).innerHTML);
//  alert(document.getElementsByXPath(&amp;#39;//ul/li[1]&amp;#39;)[0].innerHTML);
  alert(document.getElementByXPath(&amp;#39;//ul/li[1]&amp;#39;).innerHTML);
  
  // Demo of Original Feature for MooTools
  document.getElementsByXPath(&amp;#39;//ul/li&amp;#39;).addEvent(&amp;#39;mouseenter&amp;#39;, function (event) {
    event = new Event(event);
    event.target.setStyle(&amp;#39;font-style&amp;#39;, &amp;#39;oblique&amp;#39;);
  }).addEvent(&amp;#39;mouseleave&amp;#39;, function (event) {
    new Event(event).target.setStyle(&amp;#39;font-style&amp;#39;, &amp;#39;normal&amp;#39;);
  });
  
});
// ]]&amp;gt;
  &amp;lt;/script&amp;gt;
  
 &amp;lt;/head&amp;gt;
 &amp;lt;body&amp;gt;
  &amp;lt;h1&amp;gt;Hello, XPath!&amp;lt;/h1&amp;gt;
  &amp;lt;ul&amp;gt;
   &amp;lt;li title=&amp;quot;xpath&amp;quot;&amp;gt;xpath&amp;lt;/li&amp;gt;
   &amp;lt;li&amp;gt;dom core&amp;lt;/li&amp;gt;
   &amp;lt;li&amp;gt;css selector&amp;lt;/li&amp;gt;
  &amp;lt;/ul&amp;gt;
 &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;

実際の動きを確認できます。→&lt;a href="http://www.antimon2.atnifty.com/works/xpath4mootools/"&gt;デモ&lt;/a&gt;

&lt;h4&gt;サポートブラウザ&lt;/h4&gt;

&lt;dl&gt;
&lt;dt&gt;MooToolsの動作する（サポートされている）全てのブラウザ：&lt;/dt&gt;
&lt;dd&gt;&lt;ul&gt;
&lt;li&gt;IE 6.0以降&lt;/li&gt;
&lt;li&gt;Safari 2.0以降&lt;/li&gt;
&lt;li&gt;Firefox 2.0以降&lt;/li&gt;
&lt;li&gt;Opera 9.0以降&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;h4&gt;XPath for Prototype との差異&lt;/h4&gt;

XPath for MooTools は、XPath for Prototype をお手本に（てゆーかぶっちゃけほとんどソースを流用）しているので、XPath for Prototype (0.1.2) と互換性があります。
以下に、MooTools用にカスタマイズされた追加機能を中心に、XPath for MooTools の機能を簡単に紹介します。（XPath for MooTools 固有の機能は&lt;strong&gt;強調表示&lt;/strong&gt;しておきます。）

&lt;dl&gt;
&lt;dt&gt;$x() 関数&lt;/dt&gt;
&lt;dd&gt;引数に XPath 表現（、取得開始位置、結果のソートを期待するかどうかの真偽値）を受け取ります。&lt;br /&gt;&lt;strong&gt;戻り値は $$()関数と同じElements型になる（内部で$$()関数を呼んでいる）ため、複数要素への一括のスタイル設定・イベントハンドラ追加等が可能です。&lt;/strong&gt;&lt;/dd&gt;
&lt;dt&gt;document.getElementsByXPath() メソッド&lt;/dt&gt;
&lt;dd&gt;引数に XPath 表現（、取得開始位置、結果のソートを期待するかどうかの真偽値）を受け取ります。機能的には $x() 関数と全く同じです。&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;document.getElementByXPath() メソッド&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;引数に XPath 表現（、取得開始位置、結果のソートを期待するかどうかの真偽値）を受け取ります。&lt;br /&gt;&lt;strong&gt;戻り値は、要素が取得できた場合はその要素（複数存在する場合は最初の要素1つのみ）(Element型)、存在しなかった場合は null です。&lt;br /&gt;初めから要素が一意に特定できることが分かっている XPath 表現を用いるときに有効です。&lt;/strong&gt;&lt;/dd&gt;
&lt;dt&gt;Element::xpath(), Element::getElementsByXpath() メソッド&lt;/dt&gt;
&lt;dd&gt;引数に XPath 表現（、結果のソートを期待するかどうかの真偽値）を受け取ります。&lt;br /&gt;取得開始位置はその要素自身となります。&lt;br /&gt;戻り値は $x() 関数や document.getElementsByXPath() メソッドと同様です。&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Element::getElementByXPath() メソッド&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;引数に XPath 表現（、結果のソートを期待するかどうかの真偽値）を受け取ります。&lt;br /&gt;取得開始位置はその要素自身となります。&lt;br /&gt;&lt;strong&gt;戻り値は document.getElementByXPath() メソッドと同様です。&lt;/strong&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;span style="color:red;"&gt;※&lt;/span&gt; getElementByXPath() メソッド（&amp;quot;Elements&amp;quot;じゃない方）は、最初に見つかった要素1つのみを返す getElement() というメソッドがMooToolsに用意されているので、そのコンセプトを受け継いで用意しました。
    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=kbXq_GdTv_0:RpfZPCoIrOw:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?i=kbXq_GdTv_0:RpfZPCoIrOw:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=kbXq_GdTv_0:RpfZPCoIrOw:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>

<entry>
    <title>非対応ブラウザでMooToolsを完全に無効にする方法</title>
    <link rel="alternate" type="text/html" href="http://www.antimon2.atnifty.com/2007/11/mootools4legacybrowser.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.antimon2.atnifty.com/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=165" title="非対応ブラウザでMooToolsを完全に無効にする方法" />
    <id>tag:www.antimon2.atnifty.com,2007:/lab40//1.165</id>
    
    <published>2007-11-23T05:21:08Z</published>
    <updated>2007-12-02T00:26:28Z</updated>
    
    <summary>MooTools非対応ブラウザで、スクリプトエラーを出さないための一工夫。</summary>
    <author>
        <name>Antimon2</name>
        <uri>http://www.antimon2.atnifty.com/</uri>
    </author>
    
        <category term="MooTools" />
    
    <content type="html" xml:lang="ja-sl" xml:base="http://www.antimon2.atnifty.com/">
        いきなり後ろ向きなエントリーでちょっと恐縮なのです(汗)

趣味の範囲を超えて『仕事』でMooToolsを使用していると、ブラウザの対応範囲の問題というモノには常に悩まされます。
具体的には、一番困るのが「古いブラウザにも対応して欲しい」というモノ。
それはなんとか説得できたとして、次に来るのが「じゃあ、せめて非対応ブラウザでエラーが出ないようにして欲しい」。

そこで、非対応ブラウザでエラーが出ないようにするMooToolsの微カスタマイズをお教えします。
と言っても、元のソースもロジックも触らず、ちょっとだけ書き加えるだけです。
        &lt;h4&gt;0. MooToolsを&lt;!--Packerオプションで--&gt;ダウンロード&lt;/h4&gt;

まずは、&lt;a href="http://mootools.net/" target="MooTools" title="MooTools"&gt;MooTools&lt;/a&gt;の準備。
サイトから、download を選択し、必要なオプションを選択してダウンロードします。

『Choose the Components you need』は、もちろん必要なモノだけでOKです。初めてでよく分からないという人は、全てにチェックを入れてしまえばOK。その際、下から順にチェックを入れると簡単です。コンポーネントの依存性がある場合、必要なコンポーネントにも自動的にチェックが入りますので。

ここで、ポイントは『Choose compression type』オプション。
クリックするとラジオボタン（のようにデザインされたオプション群）が表示されますが、一番上の「JavaScript Packer」を選択します（何もしていなければデフォルトで選択されていると思います）。
これを選択する理由は、「後の作業が一番分かりやすいから」。
以降、この「JavaScript Packer」オプションでダウンロードされたモノとして続けます。

&lt;h5&gt;0-1. MooTools1.2b1の場合&lt;/h5&gt;

2007/11/22 現在、MooToolsの最新ベータ版 ver.1.2b1 が公開されています。
そちらのダウンロードページを見ると、『Choose compression type』オプションにまだ「JavaScript Packer」が用意されていません。
1.2b1 でかつPackerで圧縮されたモノを使用したい場合は、ご自分で&lt;a href="http://dean.edwards.name/packer/" target="packer" title="/packer/"&gt;Dean　Edwards Packer&lt;/a&gt;のサイトで圧縮してみてください。
ただし自己責任でお願いします。

&lt;h4&gt;1. .jsファイルの編集&lt;/h4&gt;

（「JavaScript Packer」オプションでダウンロードした場合、）.jsファイルをテキストエディタで開くと、中身はおおざっぱに以下のようになっています。

&lt;blockquote class="code"&gt;&lt;pre&gt;
 1: //MooTools, My Object Oriented Javascript Tools. Copyright (c) 2006-2007 Valerio Proietti, &amp;lt;http://mad4milk.net&amp;gt;, MIT Style License.
 2: 
 3: eval(function(p,a,c,k,e,d){e=function(c){return(c&amp;lt;a?'':e(parseInt(c/a)))+((c=c%a)&amp;gt;35?String.fromCharCode(c+29):c.toString(36))};&lt;em&gt;...（長いので以下省略）&lt;/em&gt;
&lt;/pre&gt;&lt;/blockquote&gt;

1行目はライセンス表示、2行目は空行、3行目は、MooToolsのすべての（選択された）コンポーネントのコードを圧縮した長い1行（eval()1文）になっています。
この3行目の前と、３行目の後（＝ファイルの最後尾）に、それぞれ以下の内容を挿入します。

&lt;div&gt;（3行目の前）&lt;/div&gt;
&lt;blockquote class="code"&gt;&lt;pre&gt;
if((window.ActiveXObject)||(document.childNodes&amp;amp;&amp;amp;!document.all&amp;amp;&amp;amp;!navigator.taintEnabled)||(document.getBoxObjectFor!=null)||window.opera)/*&amp;#64;cc_on &amp;#64;if (&amp;#64;_win32 &amp;amp;&amp;amp; &amp;#64;_jscript_version &amp;gt; 5.5) &amp;#64;*/
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;div&gt;（ファイル最後尾）&lt;/div&gt;
&lt;blockquote class="code"&gt;&lt;pre&gt;
//&amp;#64;end
&lt;/pre&gt;&lt;/blockquote&gt;

つまり全体として、以下のようになります。

&lt;blockquote class="code"&gt;&lt;pre&gt;
 1: //MooTools, My Object Oriented Javascript Tools. Copyright (c) 2006-2007 Valerio Proietti, &amp;lt;http://mad4milk.net&amp;gt;, MIT Style License.
 2: 
 3: if((window.ActiveXObject)||(document.childNodes&amp;amp;&amp;amp;!document.all&amp;amp;&amp;amp;!navigator.taintEnabled)||(document.getBoxObjectFor!=null)||window.opera)/*&amp;#64;cc_on &amp;#64;if (&amp;#64;_win32 &amp;amp;&amp;amp; &amp;#64;_jscript_version &amp;gt; 5.5) &amp;#64;*/
 4: eval(function(p,a,c,k,e,d){e=function(c){return(c&amp;lt;a?'':e(parseInt(c/a)))+((c=c%a)&amp;gt;35?String.fromCharCode(c+29):c.toString(36))};&lt;em&gt;...（長いので以下省略）&lt;/em&gt;
 5: //&amp;#64;end
&lt;/pre&gt;&lt;/blockquote&gt;

これで終わりです。
MooTools非対応ブラウザでは、MooToolsは一切機能しません。
この.jsファイルを使用すればOK、というワケです。

&lt;h4&gt;2. 非対応ブラウザでエラーを出さないスクリプト記述&lt;/h4&gt;

上記のように加工した.jsファイルを使用すると、MooToolsを使用している前提で記述したスクリプトは、そのままだと非対応ブラウザだとエラーになってしまいます。（対応ブラウザなら問題ありません。）
そこで、エラーを出さないようにするためにもう一工夫。

MooToolsを使用したい箇所を、以下のようなif文ブロックで括ります。

&lt;blockquote class="code"&gt;&lt;pre&gt;
if (window.MooTools) {
    // MooToolsの機能を利用したスクリプトの記述
}
&lt;/pre&gt;&lt;/blockquote&gt;

これは、MooToolsが有効ならば、グローバルな変数（≒window オブジェクトに設定されたプロパティ）に&lt;code&gt;MooTools&lt;/code&gt;というオブジェクトが設定されるからです。
それが有効かどうかで、MooToolsが使えるかどうかを判別する、と言うわけです。

&lt;h4&gt;3. おまけ：技術情報&lt;/h4&gt;

念のため、.jsファイル内に追記した記述がどのような意味なのかを簡単に解説。
これは実は、MooTools(v1.1x)内のブラウザ判別ルーチンをほぼそのまま拝借しているだけです。
興味のない方は読み飛ばしてください。

3行目のifの条件節は、「||」（論理和）で4つに別れます。
最初が「IEかどうか」、2番目が「Safari（およびそれと同じWebKitを利用したブラウザ）かどうか」、3番目が「Firefox、Netscape等のGeckoエンジンを利用したブラウザかどうか」、4番目は「Operaかどうか」（まんま）です。
2番目の「WebKitかどうか」についてのみ詳細。その中が更に「&amp;amp;&amp;amp;」で3つに別れます。
最初は「document.childNodes」が有効か（＝DOMが有効か）。これはほとんどのモダンブラウザなら有効です。
一つ飛ばして3番目は、「navigator.taintEnabled が無効か」。
navigator.taintEnabled() というのは、「ユーザーに非通知でデータ送信が可能かどうか（データテイント機能の使用有無）を返すメソッド」です。「何それ？」て思われた方、ご安心ください。Netscape Navigator 3.x の時代の、古い古ーい仕様で、データテイント機能は現在使われておりません。多くのブラウザは、ただ&lt;code&gt;false&lt;/code&gt;を返すだけです。
ただしSafari（WebKit）では、このメソッドそのものを定義していません。よって「!navigator.taintEnabled が true」＝「navigator.taintEnabled()が定義されていない」＝「Safari(WebKit)」という判別になるのです。
じゃぁ2番目の「!document.all」は何なのか、というと。分かる方は分かると思いますが、「document.all」はIE固有のプロパティです。つまりこれはIEを除外するための記述です。（実際にはOperaも除外されてしまいますけれど）。
なぜこれが必要なのかというと、どうやらIEでは、後ろに「()」をつけない「navigator.taintEnabled」を記述すると「オブジェクトまたはプロパティは存在しません」というエラーになってしまうようなのです。それを避けるための記述、ということですね。
ただその前に「window.ActiveXObject」でIEかどうかは判別できているはずなので、やっぱりここでは要らないような気もしますけれど、一応、念のため付加してあります。

ifの条件節の後に続くコメントは、IE固有の「条件付きコンパイル」の記述です。
そういう前提で眺めてみれば大体分かると思いますので、さらっと。ここでは、「WindowsでかつIE5.5より上のバージョン（＝WinIE6以上）」を判定しています。つまりWinIE5.5以下やmacIEを排除しています。
ちなみにファイル最後尾に追記した「//&amp;#64;end」は、この条件付きコンパイル内の「&amp;#64;if」に対応する「if文（ブロック）の終わり」を表しています。

&lt;h4&gt;4. 応用・発展性&lt;/h4&gt;

今回は、私が実際に仕事で（必要に迫られて）書いたものですが、同じような記述を応用すれば、MooTools以外のJavaScriptライブラリ使用時にも流用・転用できると思います。
またMooToolsでも、理由があってPacker圧縮したものを使用できない（あるいはPackerが信用できない）という場合でも、ちょっと書き方を変えれば利用できるはずです。
例えば、追記する記述中の、3行目の最後尾（条件付きコンパイルコメントの終わりの「*/」の後）に「{」を、最終行の「//&amp;#64;end」の前に「}」を付ける↓

&lt;div&gt;（3行目の前）&lt;/div&gt;
&lt;blockquote class="code"&gt;&lt;pre&gt;
if((window.ActiveXObject)||(document.childNodes&amp;amp;&amp;amp;!document.all&amp;amp;&amp;amp;!navigator.taintEnabled)||(document.getBoxObjectFor!=null)||window.opera)/*&amp;#64;cc_on &amp;#64;if (&amp;#64;_win32 &amp;amp;&amp;amp; &amp;#64;_jscript_version &amp;gt; 5.5) &amp;#64;*/{
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;div&gt;（ファイル最後尾）&lt;/div&gt;
&lt;blockquote class="code"&gt;&lt;pre&gt;
}//&amp;#64;end
&lt;/pre&gt;&lt;/blockquote&gt;

これだけで、他の多くのパターン（特にPackerを使用できない/したくない場合）に応用できるはずです。
（ただし実験していないので、何か問題が起きても私は保証できかねますm(_ _)m）
    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=gyzzOTKT8sE:72CbUbRBu48:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?i=gyzzOTKT8sE:72CbUbRBu48:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=gyzzOTKT8sE:72CbUbRBu48:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>

<entry>
    <title>そろそろ……。</title>
    <link rel="alternate" type="text/html" href="http://www.antimon2.atnifty.com/2007/11/post-2.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.antimon2.atnifty.com/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=166" title="そろそろ……。" />
    <id>tag:www.antimon2.atnifty.com,2007:/lab40//1.166</id>
    
    <published>2007-11-22T13:58:07Z</published>
    <updated>2007-12-02T00:26:28Z</updated>
    
    <summary>3ヶ月以上更新してませんでした。 仕事忙しくて、MT4全然さわれなくて。 この3...</summary>
    <author>
        <name>Antimon2</name>
        <uri>http://www.antimon2.atnifty.com/</uri>
    </author>
    
        <category term="draft" />
    
    <content type="html" xml:lang="ja-sl" xml:base="http://www.antimon2.atnifty.com/">
        3ヶ月以上更新してませんでした。
仕事忙しくて、MT4全然さわれなくて。

この3連休をきっかけに、少しずつ動き出します。
キーワードは2つ。
『MT4化』と、『ダブルMT化』
        まずは、『MT4化』。裏では準備中です。
余力があればデザインも少し触りたい。

そして、『ダブルMT化』。
つまり、サイトの方向性変更を検討中。
Movable Type とともに、&lt;a href="http://mootools.net/" target="MooTools" title="MooTools"&gt;MooTools&lt;/a&gt;を中心とした JavaScript の話題をどんどん盛り込んで、半分は JavaScript サイトにしようか、と考えているわけです。
ぶっちゃけ、今MovableType全然触っていない代わりにJavaScriptバリバリの仕事をしているので。
で、MovableTypeもMooToolsも、頭文字を取ると&amp;quot;MT&amp;quot;なので『ダブルMT』、と。

まずは、明日辺りに1件、MooToolsの話題を一つ振る予定です。
    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=tiHS4_khdQs:lfQahR7wPG4:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?i=tiHS4_khdQs:lfQahR7wPG4:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=tiHS4_khdQs:lfQahR7wPG4:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>

<entry>
    <title>拙作プラグイン MovableType4 （随時）正式対応（中）</title>
    <link rel="alternate" type="text/html" href="http://www.antimon2.atnifty.com/2007/08/my-plugins-on-movabletype4.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.antimon2.atnifty.com/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=81" title="拙作プラグイン MovableType4 （随時）正式対応（中）" />
    <id>tag:www.antimon2.atnifty.com,2007://1.81</id>
    
    <published>2007-08-18T14:04:40Z</published>
    <updated>2008-12-02T03:38:17Z</updated>
    
    <summary>拙作MTプラグインのMT4対応状況報告。</summary>
    <author>
        <name>Antimon2</name>
        <uri>http://www.antimon2.atnifty.com/</uri>
    </author>
    
        <category term="MTplugin" />
    
        <category term="information" />
    
    <content type="html" xml:lang="ja-sl" xml:base="http://www.antimon2.atnifty.com/">
        やはりちょっと出遅れましたけれど。
MovableType 4.0 が正式公開されました。

これに伴い、拙作プラグインのMT4.0正式対応版を順次公開していきます。
対応状況は、このエントリーで随時紹介していきます。

&lt;h4&gt;一覧&lt;/h4&gt;

&lt;table border="1"&gt;
&lt;col /&gt;&lt;col align="center" /&gt;&lt;col /&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;プラグイン&lt;/th&gt;
&lt;th&gt;対応&lt;/th&gt;
&lt;th&gt;備考&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.antimon2.atnifty.com/2006/06/dateslashedfilter.html" title="あんちもん2.Lab: 日本語の日付表記をスラッシュ区切りに - DateSlashedFilter"&gt;DateSlashedFilter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;○&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.antimon2.atnifty.com/2007/08/my_plugins_on_movabletype4.html#DateSlashedFilter"&gt;&lt;em&gt;非推奨&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.antimon2.atnifty.com/2006/06/mtspan.html" title="あんちもん2.Lab: 汎用コンテンツタグ - Span"&gt;MTSpan&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;◎&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.antimon2.atnifty.com/2006/06/mtspan.html" title="あんちもん2.Lab: 汎用コンテンツタグ - Span"&gt;2007/08/15付で正式対応&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.antimon2.atnifty.com/2006/08/autoincrementalvar.html" title="あんちもん2.Lab: 数え上げや連番生成ができる！ - AutoIncrementalVar"&gt;AutoIncrementalVar&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;◎&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.antimon2.atnifty.com/2006/08/autoincrementalvar.html" title="あんちもん2.Lab: 数え上げや連番生成ができる！ - AutoIncrementalVar"&gt;2007/08/18付で正式対応&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.antimon2.atnifty.com/2006/11/catsort.html" title="あんちもん2.Lab: 意外と知られていない機能を引き出す！ カテゴリーソートプラグイン"&gt;CatSort&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;○&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.antimon2.atnifty.com/2007/01/datelangx.html" title="あんちもん2.Lab: 『日付表示用の言語』の設定を拡張！ - DateLangX プラグイン"&gt;DateLangX&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;◎&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.antimon2.atnifty.com/2007/08/my-plugins-on-movabletype4.html#DateLangX"&gt;MT4用を別アーカイブで提供(2008/12/02)&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.antimon2.atnifty.com/2007/02/sbcode.html" title="あんちもん2.Lab: シンプル コメントスパム フィルター - SbCode プラグイン"&gt;SbCode&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;△&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.antimon2.atnifty.com/2007/08/my_plugins_on_movabletype4.html#SbCode"&gt;一部機能が動作せず&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.antimon2.atnifty.com/2007/08/mtvoid.html" title="あんちもん2.Lab: 評価だけして中身を出力しない - MTVoid"&gt;MTVoid&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;◎&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.antimon2.atnifty.com/2007/08/mtvoid.html" title="あんちもん2.Lab: 評価だけして中身を出力しない - MTVoid"&gt;2007/08/15付で公開&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.antimon2.atnifty.com/mt/mt-search.cgi?tag=PHPize&amp;blog_id=1" title="ブログ: あんちもん2.Lab でタグ: PHPize が指定されているエントリー"&gt;PHPize プロジェクトによる各種PHP版プラグイン&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;×&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.antimon2.atnifty.com/2007/08/my_plugins_on_movabletype4.html#PHPize"&gt;ファイルを編集すれば動作&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;span style="font-weight: bold;"&gt;&lt;span style="color: red;"&gt;※&lt;/span&gt;【2008/12/02】&lt;/span&gt; &lt;a href="http://www.antimon2.atnifty.com/2008/12/datelangx4mt4.html"&gt;DateLangX MT4.x対応版公開&lt;/a&gt;に伴い一部追記・修正。
        &lt;h4 id="DateSlashedFilter"&gt;&lt;a href="http://www.antimon2.atnifty.com/2006/06/dateslashedfilter.html" title="あんちもん2.Lab: 日本語の日付表記をスラッシュ区切りに - DateSlashedFilter"&gt;DateSlashedFilter&lt;/a&gt;について&lt;/h4&gt;

このプラグインは、個人的な需要とプラグイン作成の練習のために制作したモノです。
「日付の表記を'/'区切りにする」という目的のためには、拙作の「&lt;a href="#DateLangX"&gt;DateLangX&lt;/a&gt;」プラグインを使用することをオススメします。
（ただし、DateLangX は2007/08/18時点ではまだMT4には正式対応していません。）

&lt;h4 id="DateLangX"&gt;&lt;a href="http://www.antimon2.atnifty.com/2007/01/datelangx.html" title="あんちもん2.Lab: 『日付表示用の言語』の設定を拡張！ - DateLangX プラグイン"&gt;DateLangX&lt;/a&gt;について&lt;/h4&gt;

&lt;del&gt;メインの機能である、「ブログの基本設定の『日付表示用の言語』に『日付 '/' 区切り』の項目を追加」が、2007/08/18現在動作しません。
（近日中にMT4対応版を公開する予定です。）&lt;/del&gt;

別扱いでMT4対応版を公開しました。
以下を参照してください。
&lt;a href="http://www.antimon2.atnifty.com/2008/12/datelangx4mt4.html" title="『日付の言語』の設定を拡張！ - DateLangX プラグイン for MT4"&gt;『日付の言語』の設定を拡張！ - DateLangX プラグイン for MT4&lt;/a&gt;

なお、ドキュメント化されていない機能ですが、日付を表示する各種テンプレートタグの属性（修正子）として、language=&amp;quot;ja_sl&amp;quot; もしくは language=&amp;quot;en_sl&amp;quot; と指定すれば、日付がスラッシュ区切りで表示されます。

例：

&lt;blockquote class="code"&gt;&lt;pre&gt;&amp;lt;$MTDate&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;$MTDate language=&amp;quot;ja_sl&amp;quot;&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;

↓

&lt;blockquote&gt;&lt;p&gt;2007&amp;#24180;06&amp;#26376;10&amp;#26085; 09:20&lt;br /&gt;2007/06/10 09:20&lt;/p&gt;&lt;/blockquote&gt;

&lt;h4 id="SbCode"&gt;&lt;a href="http://www.antimon2.atnifty.com/2007/02/sbcode.html" title="あんちもん2.Lab: シンプル コメントスパム フィルター - SbCode プラグイン"&gt;SbCode&lt;/a&gt;について&lt;/h4&gt;

※2007/08/18時点では、MT4.0に正式対応しておりません。
（ただし、とりあえずダイナミック環境以外では正常に動作します。またダイナミック・パブリッシングでも、&lt;a href="http://www.antimon2.atnifty.com/2007/06/plugins_for_dynamic_publishing_on_mt4.html" title="あんちもん2.Lab: ダイナミック・パブリッシング対応プラグインの MT4 における仕様変更について"&gt;.phpファイルを小文字化&lt;/a&gt;すればとりあえず動作します。）

MT4の標準テンプレートは、かなり細かくモジュール分割がされています。
そのおかげで、MT4の標準テンプレートに &amp;lt;$SbCode$&amp;gt; タグを埋め込む場合、編集するテンプレートは1つだけ（コメントフォームモジュール）で済みます。

各ブログの管理画面から、
デザイン → テンプレート → テンプレートモジュール → Comment Form
と進んでください。
表示されたテンプレートソース中に、今までと同様に「&lt;code&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;entry_id&amp;quot; value=&amp;quot;&amp;lt;$MTEntryID$&amp;gt;&amp;quot; /&amp;gt;&lt;/code&gt;」という記述がありますので、その直後に記述すればOKです。

例：

&lt;blockquote class="code"&gt;&lt;pre&gt; :&lt;br /&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;static&amp;quot; value=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;entry_id&amp;quot; value=&amp;quot;&amp;lt;$MTEntryID$&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;$MTSbCode$&amp;gt;&lt;br /&gt; :&lt;/pre&gt;&lt;/blockquote&gt;

&lt;h4 id="PHPize"&gt;&lt;a href="http://www.antimon2.atnifty.com/mt/mt-search.cgi?tag=PHPize&amp;blog_id=1" title="ブログ: あんちもん2.Lab でタグ: PHPize が指定されているエントリー"&gt;PHPize プロジェクトによる各種PHP版プラグイン&lt;/a&gt;について&lt;/h4&gt;

近日中にMT4正式対応版を公開したいと思います。
（とりあえず、&lt;a href="http://www.antimon2.atnifty.com/2007/06/plugins_for_dynamic_publishing_on_mt4.html" title="あんちもん2.Lab: ダイナミック・パブリッシング対応プラグインの MT4 における仕様変更について"&gt;.phpファイルの小文字化&lt;/a&gt;を実施すれば、現在公開しているものでも動作します。）

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=ZoDwiq4eDao:ZHRKFf46zKM:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?i=ZoDwiq4eDao:ZHRKFf46zKM:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=ZoDwiq4eDao:ZHRKFf46zKM:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>

<entry>
    <title>評価だけして中身を出力しない - MTVoid</title>
    <link rel="alternate" type="text/html" href="http://www.antimon2.atnifty.com/2007/08/mtvoid.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.antimon2.atnifty.com/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=80" title="評価だけして中身を出力しない - MTVoid" />
    <id>tag:www.antimon2.atnifty.com,2007://1.80</id>
    
    <published>2007-08-15T00:54:05Z</published>
    <updated>2007-09-17T08:16:47Z</updated>
    
    <summary>中身を評価するだけで何も出力しないコンテンツタグ「MTVoid」を提供するMovableTypeプラグイン。</summary>
    <author>
        <name>Antimon2</name>
        <uri>http://www.antimon2.atnifty.com/</uri>
    </author>
    
        <category term="MTplugin" />
    
    <content type="html" xml:lang="ja-sl" xml:base="http://www.antimon2.atnifty.com/">
        MTVoid 0.1 を公開します。
&amp;lt;MTVoid&amp;gt; というコンテンツタグを提供します。内容は評価するけれども、実際には何も出力しない、という動作をします。

簡単な使用例：
&lt;code&gt;&amp;lt;MTVoid&amp;gt;&amp;lt;$MTInclude identifier=&amp;quot;styles&amp;quot;$&amp;gt;&amp;lt;/MTVoid&amp;gt;&lt;/code&gt;
↓
（MTIncludeの処理は行われますが、その内容は出力されません。）

&lt;h4&gt;動作環境&lt;/h4&gt;

Movable Type（以下、MTと略記）ver.3.x、ver.4 以降。

        &lt;h4&gt;ダウンロード&lt;/h4&gt;

(どちらかを選択してください。内容は同じです。)

&lt;h5&gt;MTVoid プラグイン本体&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.antimon2.atnifty.com/works/archives/MTVoid.zip"&gt;MTVoid.zip&lt;/a&gt;[1,528 Bytes]&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.antimon2.atnifty.com/works/archives/MTVoid.tar.gz"&gt;MTVoid.tar.gz&lt;/a&gt;[666 Bytes]&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;MTVoid プラグイン MT3ダイナミックパブリッシング対応差分&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.antimon2.atnifty.com/works/archives/MTVoid_php_MT3.zip"&gt;MTVoid_php_MT3.zip&lt;/a&gt;[351 Bytes]&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.antimon2.atnifty.com/works/archives/MTVoid_php_MT3.tar.gz"&gt;MTVoid_php_MT3.tar.gz&lt;/a&gt;[194 Bytes]&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;インストール&lt;/h4&gt;

&lt;h5&gt;MT3, MT4 共通&lt;/h5&gt;

&lt;ol&gt;
&lt;li&gt;プラグイン本体のアーカイブをダウンロードしてください。&lt;/li&gt;
&lt;li&gt;ダウンロードしたファイルを解凍してください。&lt;br /&gt;解凍ソフトに「ディレクトリ構造を**」というオプションがある場合は、「ディレクトリ構造を有効（再現、等）」にして解凍すると、以下のようなディレクトリ構造が生成されます：&lt;br /&gt;
&lt;pre&gt;&lt;samp&gt;┗[MTVoid]
&amp;nbsp;┣MTVoid.pl
&amp;nbsp;┗[php]
&amp;nbsp;&amp;nbsp;┗block.mtvoid.php&lt;/samp&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;MTVoid フォルダごと [MT]/plugins/ フォルダにコピー（アップロード）してください。&lt;/li&gt;
&lt;/ol&gt;

&lt;h5&gt;MT3.x でダイナミックパブリッシングをご使用の場合&lt;/h5&gt;

以降の操作は、MT4では不要です。

&lt;ol&gt;
&lt;li&gt;MT3ダイナミックパブリッシング対応差分のアーカイブをダウンロードしてください。&lt;/li&gt;
&lt;li&gt;ダウンロードしたファイルを解凍してください。&lt;br /&gt;解凍すると、ただ1つのファイル block.MTVoid.php が生成されます。
&lt;/li&gt;
&lt;li&gt;解凍して得られたファイルを [MT]/php/plugins/ フォルダにコピー（アップロード）してください。&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;使い方&lt;/h4&gt;

このプラグインが提供するのは、一つのコンテンツタグです。

&lt;dl&gt;
&lt;dt&gt;&amp;lt;MTVoid&amp;gt;&lt;/dt&gt;
&lt;dd&gt;非出力タグ。&lt;br /&gt;内容（コンテンツ）を評価しますが、その結果を（と言いますか何も）出力しません。&lt;/dd&gt;
&lt;/dl&gt;

&lt;h4&gt;使用例&lt;/h4&gt;

（前述の「簡単な使用例」を参照してください。）

&lt;h4&gt;MTIgnore との違い&lt;/h4&gt;

括った範囲を出力しないタグとしては、MT標準（MT3.3x以降）で &amp;lt;MTIgnore&amp;gt; というタグが存在します。
これは、その中身（コンテンツ）をまったく評価しません。文字通り『無視』するタグです。
例えば、

&lt;blockquote class="code"&gt;&lt;pre&gt;&amp;lt;MTIgnore&amp;gt;&lt;br /&gt;&amp;lt;$MTSetVar name=&amp;quot;hoge&amp;quot; value=&amp;quot;tara&amp;quot;$&amp;gt;&lt;br /&gt;&amp;lt;$MTGetVar name=&amp;quot;hoge&amp;quot;$&amp;gt;&lt;br /&gt;&amp;lt;/MTIgnore&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;

とすると、何も出力されない代わりに、MTSetVarが評価されないので、変数「hoge」には何も代入されません。つまり、他の場所で &amp;lt;$MTGetVar name=&amp;quot;hoge&amp;quot;$&amp;gt; を記述しても「tara」とは出力されません（エラーになる可能性もあります）。

これを

&lt;blockquote class="code"&gt;&lt;pre&gt;&amp;lt;MTVoid&amp;gt;&lt;br /&gt;&amp;lt;$MTSetVar name=&amp;quot;hoge&amp;quot; value=&amp;quot;tara&amp;quot;$&amp;gt;&lt;br /&gt;&amp;lt;$MTGetVar name=&amp;quot;hoge&amp;quot;$&amp;gt;&lt;br /&gt;&amp;lt;/MTVoid&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;

と置き換えると、やはり何も出力されませんが、内容は評価されているので、他の場所で &amp;lt;$MTGetVar name=&amp;quot;hoge&amp;quot;$&amp;gt; と記述するときちんと「tara」と出力されます。

&lt;h4&gt;MTSetVarBlock との違い&lt;/h4&gt;

内容を評価だけして出力しない方法としては、標準タグを使用する方法としては MTSetVarBlock を利用するものがあります。
先ほどの例の場合、

&lt;blockquote class="code"&gt;&lt;pre&gt;&amp;lt;MTSetVarBlock name=&amp;quot;dummy&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;$MTSetVar name=&amp;quot;hoge&amp;quot; value=&amp;quot;tara&amp;quot;$&amp;gt;&lt;br /&gt;&amp;lt;$MTGetVar name=&amp;quot;hoge&amp;quot;$&amp;gt;&lt;br /&gt;&amp;lt;/MTSetVarBlock&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;

このようにしても、内容を評価だけしてその結果を出力しない、という目的は達成できます。
ただしこの方法には、以下の問題点が存在します：

&lt;ul&gt;
&lt;li&gt;MTSetVarBlockに使用する変数名（この例の場合 dummy）は他で使われていないものにする必要がある&lt;/li&gt;
&lt;li&gt;出力されないだけでその変数（で参照されるサーバのメモリ領域）にデータが残るので、微々たる物ではあれどサーバのメモリを一時的に圧迫する&lt;/li&gt;
&lt;/ul&gt;

MTVoid は、評価した内容は出力されないだけでなく、メモリ上にも残りません。また、変数名を心配する必要もまったくないので、よりスマートな解決策となります。

&lt;h4&gt;免責事項&lt;/h4&gt;

Movable Type のユーザーは目的を問わず、このプラグインを無償で自由に利用することができます。著作権は Antimon2 が保持します。
このプラグインは無保証です。このプラグインの利用によるいかなる損害にも作者は一切の責任を負いません。

&lt;div class="ask-donation" id="ask-donation"&gt;&lt;p&gt;
継続的な開発をご支援くださる方は、よろしければ&lt;a href="http://www.antimon2.atnifty.com/donation.html"&gt;ドネーション&lt;/a&gt;をお願いいたします。&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.antimon2.atnifty.com/donation.html#paypal"&gt;PayPal によるドネーション&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;

&lt;h4&gt;おまけ&lt;/h4&gt;

姉妹プラグインの &lt;a href="http://www.antimon2.atnifty.com/2006/06/mtspan.html"&gt;MTSpan&lt;/a&gt;（評価した内容をそのまま出力するプラグイン）もヨロシク。
    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=-ewUnqAbBII:2Mw01n_BRdc:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?i=-ewUnqAbBII:2Mw01n_BRdc:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=-ewUnqAbBII:2Mw01n_BRdc:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>

<entry>
    <title>ダイナミック・パブリッシング対応プラグインの MT4 における仕様変更について</title>
    <link rel="alternate" type="text/html" href="http://www.antimon2.atnifty.com/2007/06/plugins-for-dynamic-publishing-on-mt4.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.antimon2.atnifty.com/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=79" title="ダイナミック・パブリッシング対応プラグインの MT4 における仕様変更について" />
    <id>tag:www.antimon2.atnifty.com,2007://1.79</id>
    
    <published>2007-06-19T10:41:47Z</published>
    <updated>2007-06-20T14:30:29Z</updated>
    
    <summary>MT3まで普通に使用できた、ダイナミック・パブリッシング対応のPHP版プラグイン。MT4では（一部環境を除いて）動作しません。</summary>
    <author>
        <name>Antimon2</name>
        <uri>http://www.antimon2.atnifty.com/</uri>
    </author>
    
        <category term="MTtech" />
    
    <content type="html" xml:lang="ja-sl" xml:base="http://www.antimon2.atnifty.com/">
        MT4ベータが発表・公開されて、拙作のプラグインの動作確認をしていたのですが、一つ大きな問題を発見してしまいました。
ダイナミック・パブリッシング対応のPHP版プラグインにおいて、以下のような問題が発生したのです。

&lt;strong&gt;ウチでは問題なく動くのに、ほかの環境ではまったく動作しない！&lt;/strong&gt;

この現象について、原因と対処法が判明しましたので報告します。

一言で言えば、『テンプレート・タグが大文字小文字を区別しなくなったことによる弊害』。
        &lt;h4&gt;MT4におけるテンプレートタグの仕様変更&lt;/h4&gt;

MT4では、テンプレートタグの記述に、大きくて小さな(?)仕様変更があります。
それは、大まかに言うと以下の2点。

&lt;ul&gt;&lt;li&gt;大文字・小文字を区別しなくなった&lt;/li&gt;&lt;li&gt;&amp;lt;mt:hogehoge&amp;gt; のようなxmlのネームスペースに倣った記述方法がサポートされた&lt;/li&gt;&lt;/ul&gt;

前者は、たとえば &amp;lt;$MTEntryID$&amp;gt; を &amp;lt;$MTEntryId$&amp;gt; 等、今まで大文字小文字を間違えて記述した場合に、エラーもしくは何も表示されない等正常な動作をしなかったものが、これからは問題がなくなる、ということです。
&amp;lt;MTENTRYID&amp;gt; とか &amp;lt;mteNTRYiD&amp;gt; のように大文字小文字をむちゃくちゃにしても、綴りさえあっていれば問題なく動作します。
後者は、これに加えて &amp;lt;mt:entryid&amp;gt; のような記述方法も許される、ということです。ただしこれは、 &amp;lt;mtentryid&amp;gt; と &amp;quot;:&amp;quot; を記述しない場合とまったく同じ意味になります。また &amp;quot;:&amp;quot; は &amp;quot;mt&amp;quot; の後のみ許されます。

&lt;h4&gt;テンプレート・タグを提供するプラグインの記述方法&lt;/h4&gt;

では、プラグインの記述方法に変更が加わるのか、というと。
スタティック環境に関する限り、変更は不要です。
MT4のFAQにも、「ユーザ・インタフェースを表示変更するようないくつかのプラグインを除けば、ほとんどのプラグインは後方互換性がある」とあります。（参照：&lt;a href="http://www.movabletype.com/mt4/mt4_answers.html#backwards-compat" title="Movable Type Blogging Platform Beta Release Questions &amp;amp; Answers: Will MT4 be backwards compatible with my MT3 blog?"&gt;http://www.movabletype.com/mt4/mt4_answers.html#backwards-compat&lt;/a&gt;）
さらに、今までのプラグインとは別の「機能追加」の方法(snipetts)もあるようです。けれどもそれはまた別の話、いつかまた別のときに。
とにかく実際、「ユーザ・インタフェースの変更を伴わない（＝BigPAPIやTransformer機能を利用していない）プラグイン」は、基本的には一切記述を修正することなく今までどおり動作するようになっている模様です。

ですが。
これはあくまでスタティックの話。
ダイナミック・パブリッシングにおいては、プラグインの記述に若干の手直しが必要になります。
具体的には、以下のような手直しが必要です：

&lt;ul&gt;&lt;li&gt;ファイル名をすべて小文字にする&lt;small&gt;(*1)&lt;/small&gt;&lt;/li&gt;&lt;li&gt;オリジナル・タグの機能を記述した関数名もすべて小文字にする&lt;/li&gt;&lt;li&gt;その他、プリセット、オリジナル問わずテンプレート・タグ名を記述している箇所があればすべて小文字にする&lt;/li&gt;&lt;/ul&gt;

&lt;small&gt;(*1)オリジナル・タグを提供するファイル（block.mtxxxx.php もしくは function.mtxxxx.php）のみ対象。&lt;/small&gt;

これは、MT4でタグ名の大文字・小文字を区別しなくなった代わりに、ダイナミック・パブリッシング環境では内部的にはテンプレートタグをすべて&lt;strong&gt;小文字&lt;/strong&gt;で管理しているためです。
従来は、たとえば &amp;lt;$MTIncrementVar$&amp;gt; というタグを定義するために、 function.MTIncrementVar.php ファイルに function smarty_function_MTIncrementVar($args, &amp;amp;$ctx) という関数を定義する、みたいに大文字小文字の区別に合わせてそのとおりに記述する必要がありました。それを今度は、すべて小文字にしなければならない（function.mtincrementvar.php ファイルに function smarty_function_mtincrementvar($args, &amp;amp;$ctx) ）、というわけです。
プラグイン作成側としては、ちょっとだけ面倒です。

&lt;h4&gt;それでも一部の環境で問題なく動いてしまう理由&lt;/h4&gt;

しかしながら、冒頭に述べたように、私のテスト環境では、上記の修正を施すことなくPHP版のプラグインも正常に動作していました。
これは、以下の2つの要因が重なって引き起こされていました。

&lt;ul&gt;&lt;li&gt;サーバのファイルシステムが大文字・小文字を区別しないものであった&lt;/li&gt;&lt;li&gt;PHPの関数名はそもそも大文字・小文字が区別されない&lt;small&gt;(*2)&lt;/small&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;small&gt;(*2)少なくとも私のテストした環境のPHP(ver 4.4.1, 5.0.5)においては。&lt;/small&gt;

前者の「ファイルシステムが大文字・小文字を区別しない」というのは、簡単に言えば
「ABC.txt というファイルが存在するときに、&amp;quot;abc.txt&amp;quot; というファイルを開こうとすると、そのファイルが存在しなくてもエラーにならず、ABC.txt が開けてしまう」
という現象が起きる、ということ。
Windowsで使用されている FAT32 や NTFS&lt;small&gt;(*3)&lt;/small&gt;、Mac OS の標準ファイルシステムである HFS や HFS+ がこれにあたります。Mac OS X でも UFS というファイルシステムを採用したり、また Linux でよく使用される ext3 や、その他のUnix系OSで使用される各種ファイルシステムでは、大文字と小文字は厳密に区別されます。

私のテスト環境は Mac OS X で、ファイルシステムが HFS+ だったので、この「ファイルシステムが大文字・小文字を区別しない」に該当したのです。

&lt;small&gt;(*3)NTFS自体は大文字・小文字を区別するが、同じディレクトリ（フォルダ）にファイル名の大文字・小文字が違うだけのファイルを作成できない。また上に述べた「&amp;quot;abc.txt&amp;quot;というファイルを開こうとすると ABC.txt が開かれる」という現象は発生する。&lt;/small&gt;

またPHPは、関数名およびクラス名において、大文字・小文字は区別されないようです。
ドキュメントには「識別子は大文字・小文字が区別される」とありますが、それが適用されるのは変数名や定数名だけのようです（定数名はオプションで大文字・小文字を区別しないようにもできるそうです）。
よって、関数名に大文字が混じっていても、すべて小文字の関数名で呼び出せばきちんと呼び出せてしまう、というわけです。

これらの原因により、正常に読み込まれるはずのないプラグイン記述ファイルがきちんと読み込まれ、テンプレートタグがきちんと登録されて、結果としてきちんと動作してしまった、というわけです。

&lt;h4&gt;仕様変更だからです。←結論&lt;/h4&gt;

（↑タイトルに深い意味はありません(汗)）
PHP版プラグインを作成する際は、MT3以前用の「ファイル名・関数名の（タグ名にあたる部分を）大文字・小文字をそろえたファイル」と、MT4以降用の「ファイル名・関数名をすべて小文字にしたファイル」の2種類を用意しなければダメなようです。
二度手間です。くぅ。
今までどおりが良いのです。←ワガママ？
    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=Vv4HVATUI2U:B3xp-tjC_OA:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?i=Vv4HVATUI2U:B3xp-tjC_OA:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=Vv4HVATUI2U:B3xp-tjC_OA:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>

<entry>
    <title>拙作プラグインの MovableType4β 対応状況</title>
    <link rel="alternate" type="text/html" href="http://www.antimon2.atnifty.com/2007/06/my-plugins-on-movabletype4b.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.antimon2.atnifty.com/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=78" title="拙作プラグインの MovableType4β 対応状況" />
    <id>tag:www.antimon2.atnifty.com,2007://1.78</id>
    
    <published>2007-06-10T00:15:41Z</published>
    <updated>2007-08-18T15:46:48Z</updated>
    
    <summary>拙作MTプラグインのMT4β動作検証報告。</summary>
    <author>
        <name>Antimon2</name>
        <uri>http://www.antimon2.atnifty.com/</uri>
    </author>
    
        <category term="MTplugin" />
    
    <content type="html" xml:lang="ja-sl" xml:base="http://www.antimon2.atnifty.com/">
        出遅れましたけれど。改めて。
MovableType 4β が公開されました。

気になる新機能やトピックスは、既に色々な方が記事にされているので、そちらにお譲りするとして。
拙作のMTプラグインを、MT4βで動作するか検証してみました。
その結果を報告します。

【&lt;span style="color:red"&gt;※&lt;/span&gt;2007/08/18 記事一部変更】
        &lt;h4 id="DateSlashedFilter"&gt;&lt;a href="http://www.antimon2.atnifty.com/2006/06/dateslashedfilter.html" title="あんちもん2.Lab: 日本語の日付表記をスラッシュ区切りに - DateSlashedFilter"&gt;DateSlashedFilter&lt;/a&gt;&lt;/h4&gt;

問題なく動作します。

このプラグインは、日本語で表記された日付形式「○○○○年○○月○○日」をスラッシュ区切りの「○○○○/○○/○○」に変換するグローバルフィルターを提供するモノです。
グローバルフィルター（グローバル・タグ・アトリビュート）に関してはMT4で仕様の変更はないようなので、グローバルフィルターを提供する他のプラグインも同様に、MT3用のものが問題なくそのまま使用できると思われます。

ちなみに。
このプラグインは、個人的な需要とプラグイン作成の練習のために制作したモノです。
「日付の表記を'/'区切りにする」という目的のためには、拙作の「&lt;a href="#DateLangX"&gt;DateLangX&lt;/a&gt;」プラグインを使用することをオススメします。

&lt;h4 id="MTSpan"&gt;&lt;a href="http://www.antimon2.atnifty.com/2006/06/mtspan.html" title="あんちもん2.Lab: 汎用コンテンツタグ - Span"&gt;MTSpan&lt;/a&gt;&lt;/h4&gt;

問題なく動作します。

こういった、MTの内部に踏み込まない単純なプラグインは、MT4でも問題なく使用できる模様です。

&lt;h4 id="AutoIncrementalVar"&gt;&lt;a href="http://www.antimon2.atnifty.com/2006/08/autoincrementalvar.html" title="あんちもん2.Lab: 数え上げや連番生成ができる！ - AutoIncrementalVar"&gt;AutoIncrementalVar&lt;/a&gt;&lt;/h4&gt;

&lt;ins&gt;スタティック環境においては&lt;/ins&gt;問題なく動作することを確認しました。

このプラグインは、&amp;lt;$MTSetVar$&amp;gt;/&amp;lt;$MTGetVar$&amp;gt;と互換性を持たせて設計していますが、MT4でも大きな仕様変更はない模様で、連携も今まで通り問題ない模様です。
&lt;del&gt;またこのプラグインは、ダイナミックパブリッシング対応のPHP版を同梱していますが、MT4のダイナミックパブリッシングもMT3と大きな仕様変更はない模様で、コチラも問題ない模様です。&lt;/del&gt;
&lt;ins&gt;ダイナミック・パブリッシングにおいては、一部の環境を除き正常に動作しません。
これは、MT4のダイナミック・パブリッシングにおいてプラグインの記述方法に若干の仕様変更がなされたためです。
当方のテスト環境ではその影響を受けなかったので問題なく動作してしまったため、初め『問題ない』と報告してしまいました。申し訳ありません。
詳細は、改めて別のエントリーで解説したいと思います。&lt;/ins&gt;

&lt;h4 id="CatSort"&gt;&lt;a href="http://www.antimon2.atnifty.com/2006/11/catsort.html" title="あんちもん2.Lab: 意外と知られていない機能を引き出す！ カテゴリーソートプラグイン"&gt;CatSort&lt;/a&gt;&lt;/h4&gt;

問題なく動作することを確認しました。

MT3.3以降のみに対応しているソートメソッドも、問題なく動作します。
またプラグイン一覧表示画面の日本語ローカライズも問題ありません。

&lt;h4 id="DateLangX"&gt;&lt;a href="http://www.antimon2.atnifty.com/2007/01/datelangx.html" title="あんちもん2.Lab: 『日付表示用の言語』の設定を拡張！ - DateLangX プラグイン"&gt;DateLangX&lt;/a&gt;&lt;/h4&gt;

一部機能が正常に動作しません。

メインの機能である、「ブログの基本設定の『日付表示用の言語』に『日付 '/' 区切り』の項目を追加」は、現在のところ動作しません。
これは、2つの原因があります。

&lt;ul&gt;&lt;li&gt;管理画面を編集するプラグイン(Transformerプラグイン)の書き方が仕様変更された。&lt;/li&gt;&lt;li&gt;管理画面そのものも大幅に変更された。&lt;/li&gt;&lt;/ul&gt;

これらに対応するようプラグインを修正すれば、メイン機能が正常に動作することを確認済みです。
（近日中にMT4対応評価版を公開する予定です。）

またドキュメント化されていない機能ですが、日付を表示する各種テンプレートタグの属性として、language=&amp;quot;ja_sl&amp;quot; もしくは language=&amp;quot;en_sl&amp;quot; と指定すれば、日付がスラッシュ区切りで表示されます。これは、MT3.x、MT4ともに動作します。

例：

&lt;blockquote class="code"&gt;&lt;pre&gt;&amp;lt;$MTDate&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;$MTDate language=&amp;quot;ja_sl&amp;quot;&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;

↓

&lt;blockquote&gt;&lt;p&gt;2007&amp;#24180;06&amp;#26376;10&amp;#26085; 09:20&lt;br /&gt;2007/06/10 09:20&lt;/p&gt;&lt;/blockquote&gt;

&lt;h4 id="SbCode"&gt;&lt;a href="http://www.antimon2.atnifty.com/2007/02/sbcode.html" title="あんちもん2.Lab: シンプル コメントスパム フィルター - SbCode プラグイン"&gt;SbCode&lt;/a&gt;&lt;/h4&gt;

概ね問題なく動作する模様です。

MT4からは、コメントの認証方法に仕様変更が見られます。
具体的には、今までは認証サービスとして Typekey 認証のみが使用できましたが、MT4では以下のようにバリエーションが増えています。

&lt;ul&gt;
&lt;li&gt;Anonymous Comments（従来の非認証者のコメント）&lt;/li&gt;
&lt;li&gt;Movable Type Native（MTに登録（作成）したユーザ）&lt;/li&gt;
&lt;li&gt;OpenID&lt;/li&gt;
&lt;li&gt;LiveJournal&lt;/li&gt;
&lt;li&gt;Vox&lt;/li&gt;
&lt;li&gt;TypeKey（従来の TypeKey 認証）&lt;/li&gt;
&lt;/ul&gt;

SbCode プラグインでは、TypeKey 認証者コメントの場合はハッシュを評価せずにコメントを許可するように設計していましたが、そのままのロジックで他の認証方法で認証されたコメントユーザもハッシュを評価せずにコメントが許可される模様です。
ただし、検証したのは &amp;quot;Movable Type Native&amp;quot; のみです（2007/06/10 現在）。他の認証サービスは未検証です（サービスそのものが未経験）。
引き続き調査いたします。

なお、MT4の標準テンプレートは、かなり細かくモジュール分割がされています。
そのおかげで、MT4の標準テンプレートに &amp;lt;$SbCode$&amp;gt; タグを埋め込む場合、編集するテンプレートは1つだけ（コメントフォームモジュール）で済みます。

各ブログの管理画面から、
Design → Templates → Modules → Comment Form
と進んでください。
表示されたテンプレートソース中に、今までと同様に「&lt;code&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;entry_id&amp;quot; value=&amp;quot;&amp;lt;$MTEntryID$&amp;gt;&amp;quot; /&amp;gt;&lt;/code&gt;」という記述がありますので、その直後に記述すればOKです。

例：

&lt;blockquote class="code"&gt;&lt;pre&gt; :&lt;br /&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;static&amp;quot; value=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;entry_id&amp;quot; value=&amp;quot;&amp;lt;$MTEntryID$&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;$MTSbCode$&amp;gt;&lt;br /&gt; :&lt;/pre&gt;&lt;/blockquote&gt;

&lt;h4 id="PHPize"&gt;&lt;a href="http://www.antimon2.atnifty.com/mt/mt-search.cgi?tag=PHPize&amp;blog_id=1" title="ブログ: あんちもん2.Lab でタグ: PHPize が指定されているエントリー"&gt;PHPize プロジェクトによる各種PHP版プラグイン&lt;/a&gt;&lt;/h4&gt;

&lt;del&gt;概ね問題なく動作する模様です。&lt;/del&gt;

&lt;del&gt;これまでPHP化したプラグインはあまりMTの内部に踏み込んだモノではなく、またダイナミックパブリッシングそのものも大幅な仕様変更はない模様なので、各プラグインも問題なく動作する模様です。
より詳細が確認できましたら追って報告します。&lt;/del&gt;

&lt;ins&gt;一部の環境を除き正常に動作しません。&lt;/ins&gt;

&lt;ins&gt;これは、MT4のダイナミック・パブリッシングにおいてプラグインの記述方法に若干の仕様変更がなされたためです。
当方のテスト環境ではその影響を受けなかったので問題なく動作してしまったため、初め『問題ない』と報告してしまいました。申し訳ありません。
詳細は、改めて別のエントリーで解説したいと思います。&lt;/ins&gt;

&lt;h4&gt;免責事項&lt;/h4&gt;

&lt;del&gt;この調査は、&lt;del&gt;2007/06/05 に一般公開された Mt4β1&lt;/del&gt;&lt;ins&gt;2007/06/12 に公開された Mt4β2&lt;/ins&gt; を元に実施しております。
今後発表されるかもしれない&lt;del&gt;β2&lt;/del&gt;&lt;ins&gt;β3&lt;/ins&gt;以降や、正式版では、仕様が変更される可能性もあり、プラグインの動作状況も変動する可能性があります。
その都度、できる限り検証し報告する予定です。&lt;/del&gt;

【2007/08/18】MT4.0 正式版が公開されたので、このエントリーでの報告は終了します。
以降は、&lt;a href="http://www.antimon2.atnifty.com/2007/08/my_plugins_on_movabletype4.html" title="あんちもん2.Lab: 拙作プラグイン MovableType4 （随時）正式対応（中）"&gt;拙作プラグイン MovableType4 （随時）正式対応（中）&lt;/a&gt;にて、対応状況および正式対応版の公開を報告していきます。

（このエントリーへのコメントおよびトラックバックの受付は終了しました。）
    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=GkhKP2CPIfM:ugPcfQnsPXI:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?i=GkhKP2CPIfM:ugPcfQnsPXI:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=GkhKP2CPIfM:ugPcfQnsPXI:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>

<entry>
    <title>Ajaxライブラリ MooTools の紹介</title>
    <link rel="alternate" type="text/html" href="http://www.antimon2.atnifty.com/2007/06/mootools.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.antimon2.atnifty.com/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=77" title="Ajaxライブラリ MooTools の紹介" />
    <id>tag:www.antimon2.atnifty.com,2007://1.77</id>
    
    <published>2007-06-05T14:54:56Z</published>
    <updated>2007-06-05T15:25:12Z</updated>
    
    <summary>軽量・高速Ajaxライブラリ、MooToolsの簡単な紹介。</summary>
    <author>
        <name>Antimon2</name>
        <uri>http://www.antimon2.atnifty.com/</uri>
    </author>
    
        <category term="Ajax/JavaScript" />
    
    <content type="html" xml:lang="ja-sl" xml:base="http://www.antimon2.atnifty.com/">
        今、仕事の合間に色々なAjax/JavaScriptライブラリを触っています。
そんな中で、個人的に注目したのが、『&lt;a href="http://mootools.net/" title="mootools - home" target="MooTools"&gt;MooTools&lt;/a&gt;』。
エフェクト系のライブラリに分類されがちですが、DOM操作やリモート操作（XMLHttpRequestを使用したサーバとのやりとり）、Safariを初めとするメジャーなモダンブラウザへの対応（クロスブラウザ対応）など、コアな部分もしっかりしており、Prototype.js(+Script.aculo.us)の代替としても充分かそれ以上のモノを備えています。

主な特徴を挙げるとすれば、以下の通り：

&lt;ul&gt;
&lt;li&gt;軽量・高速&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.apple.com/jp/macosx/features/safari/" target="APPLE" title="アップル - Mac OS X - Safari RSS"&gt;Safari&lt;/a&gt;を筆頭に、IE6,7、&lt;a href="http://www.mozilla-japan.org/" target="MOZILLA" title="Mozilla Japan - 次世代ブラウザ Firefox とメールクライアント Thunderbird の公式サイト"&gt;Firefox&lt;/a&gt;、&lt;a href="http://jp.opera.com/" title="Opera ブラウザ - すべてのデバイスに最良のブラウザを" target="OPERA"&gt;Opera&lt;/a&gt;等でテスト済み&lt;/li&gt;
&lt;li&gt;$()関数、$$()関数等、&lt;a href="http://www.prototypejs.org/" target="PROTOTYPE" title="Prototype JavaScript framework: Easy Ajax and DOM manipulation for dynamic web applications"&gt;prototype.js&lt;/a&gt;との互換性があり、移行が容易&lt;/li&gt;
&lt;li&gt;オブジェクト指向で、記述が直感的&lt;/li&gt;
&lt;li&gt;&lt;a href="http://demos.mootools.net/" title="mootools demos" target="MooTools"&gt;デモ&lt;/a&gt;が豊富、&lt;a href="http://docs.mootools.net/" title="mootools docs" target="MooTools"&gt;ドキュメント&lt;/a&gt;も充実、できること・やりたいことがすぐ分かる！&lt;/li&gt;
&lt;/ul&gt;

以下に、一番人気と歌われるAjax基本ライブラリ Prototype.js との比較をしてみます。
        &lt;h4&gt;Prototype.js との共通点 ～基本的な記述方式～&lt;/h4&gt;

MooToolsは、元々 moo.fx というエフェクトライブラリから先に誕生したモノ。
このmoo.fxは、Prototype.js と組み合わせて使用できるようになっているそうです。
その後、Ajax関連のコアな部分や、その他の基本ライブラリも含めて、ライブラリ全体としてMooToolsという名称で現在に至っている模様です。
おそらくそう言う経緯があってか、MooToolsのコアな部分は、PrototType.jsのそれに非常によく似ています。
例えば、DOM要素を抜き出す $() 関数や $$() 関数、配列を生成する $A() 関数や配列の拡張である .each(function(item,idx){～}) メソッド等は、Prototype.js 用に書いたコードがそのままMooToolsでも使用できます。
一部、Prototype.js にはあって(ver.アップで追加されて)MooToolsにはないメソッドもあります。でも、Prototype.js が肥大化しAPIが煩雑になる傾向にあるのに対して、MooToolsは必要十分なメソッドに抑えて、しかもそのメソッドに使いやすい拡張や洗練された実装が見られるのです。
（詳細は余裕があればまた改めてまとめてみようと思います。）

&lt;h4&gt;Prototype.js の拡張 ～$$()関数の戻り値～&lt;/h4&gt;

Prototype.jsでは、$$()関数の戻り値は Element オブジェクトの配列です。
よってその各要素に対して何か処理をする場合、例えば以下のように書く必要があります：

&lt;blockquote class="code"&gt;&lt;pre&gt;
var elements = $$('myselector');
elements.each(function(el){
&amp;nbsp;&amp;nbsp;el.setStyle('color', 'red');
});
&lt;/pre&gt;&lt;/blockquote&gt;

このコードはMooToolsでもそのまま動作しますが、MooToolsではもっと簡潔に、以下のように書くこともできます：

&lt;blockquote class="code"&gt;&lt;pre&gt;
var elements = $$('myselector');
elements.setStyle('color', 'red');
&lt;/pre&gt;&lt;/blockquote&gt;

これは、$$()関数の戻り値がElementオブジェクトの配列ではなく、Elementsオブジェクトになっているからです。
Elementsオブジェクトは、内部にElementオブジェクトの配列を保持しています。またElementオブジェクトのメソッドを全て継承しており、それを内部の全てのElementオブジェクトに対して作用させるようになっています。
このように、それが単一のElementか、複数のElementsかを意識する必要なく、同じ記述ができるようになっている、というわけです。

&lt;h4&gt;オブジェクト指向の作法に則ったAjax呼び出し&lt;/h4&gt;

Ajaxの要、XMLHttpRequest（もしくはその代替）を利用したサーバとのやりとりの記述には、Prototype.js と MooTools とでは多少の違いが見られます。
Prototype.js では、Ajaxオブジェクトは他の実働クラスの親クラスおよび名前空間としての役割となっています。「実働クラス」というのは、例えばAjaxの一般的なやりとりをカプセル化する Ajax.Request オブジェクトなど、実際に処理をするオブジェクト（を定義するモノ）のことです。
例えばこの Ajax.Request オブジェクトを使用した典型的な書式は、以下のようになります：

&lt;blockquote class="code"&gt;&lt;pre&gt;
var myAjax = new Ajax.Request(
&amp;nbsp;&amp;nbsp;url,
&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;method: 'get',
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parameters: pars,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;onComplete: showResponse
&amp;nbsp;&amp;nbsp;}
);
&lt;/pre&gt;&lt;/blockquote&gt;

実はこの書き方、私は違和感があったんですね。
Java等のオブジェクト指向言語を勉強したり業務で使用したことのある人は、「コンストラクタで全ての処理を行っちゃダメ」と教わったり言われたことがあると思います。
&amp;quot;new&amp;quot;という命令（演算子）は、『あたらいいオブジェクトを生成する』という意味。でも中では、実際のリクエスト発行までもやっているわけです。
つまり。こう考えてください。
この部分を日本語に直すとこうなります。

「新しい Ajax.Request オブジェクトを生成（リクエスト先は url、メソッドは GET、パラメータは pars、完了したら showResponse 関数を実行する）して、その内容を myAjax変数に格納する。」

ね。どこにも「実際にリクエストを発行する」なんて書いてないでしょ？
こういうのは、仕事でプログラムを書く人には「あまり良くない作法」として教えられるのです。

それが、MooTools ではお行儀よく矯正されています。
同じことを MooTools の書き方で書くと、以下のようになります。

&lt;blockquote class="code"&gt;&lt;pre&gt;
var myAjax = new Ajax(
&amp;nbsp;&amp;nbsp;url,
&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;method: 'get',
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data: pars
&amp;nbsp;&amp;nbsp;}
);
myAjax.request().chain(function(){showResponse(this)});
&lt;/pre&gt;&lt;/blockquote&gt;

これを日本語的に読むと、こうなります。

「新しい Ajax オブジェクトを生成（リクエスト先は url、メソッドは GET、パラメータは pars）して、その内容を myAjax変数に格納する。リクエストを発行して、完了したら続いて（chainして）showResponse 関数を実行する。」

直感的でしょ？それに読んでみても過不足なく必要十分。
ちなみにMooToolsでは、Ajaxオブジェクトそのものが、Ajax関連の操作をカプセル化する唯一のクラスになっています。そのプロパティやメソッドで、リクエストを発行したり、その結果を直接HTML上の要素に反映させたりします。

このあたりは、Prototype.js から移行する際にはちょっと注意する必要があります。
また、コールバック関数指定と chain() メソッドによる連続実行指定という差異、そこに渡される引数の違い等も注意が必要です。

逆に Prototype.js を知らずに MooTools から始める場合には、あまり違和感なく入れると思います。
（ただ、そもそも each() メソッド同様、引数に無名関数を渡すという手法の時点で JavaScript 特有の書式になるので、JavaScript になれていない人には最初は違和感があるかもですけれど。）

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=b-fWg8VoCQU:WvlO9CpUkoc:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?i=b-fWg8VoCQU:WvlO9CpUkoc:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=b-fWg8VoCQU:WvlO9CpUkoc:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>

<entry>
    <title>PHPizeプロジェクトについて</title>
    <link rel="alternate" type="text/html" href="http://www.antimon2.atnifty.com/2007/05/about-phpize.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.antimon2.atnifty.com/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=76" title="PHPizeプロジェクトについて" />
    <id>tag:www.antimon2.atnifty.com,2007://1.76</id>
    
    <published>2007-05-10T14:56:39Z</published>
    <updated>2007-05-10T15:52:26Z</updated>
    
    <summary>個人プロジェクトとして展開している「PHPize プロジェクト」について。</summary>
    <author>
        <name>Antimon2</name>
        <uri>http://www.antimon2.atnifty.com/</uri>
    </author>
    
        <category term="information" />
    
    <content type="html" xml:lang="ja-sl" xml:base="http://www.antimon2.atnifty.com/">
        本日(2007/05/10)付の小粋空間さんの記事（
&lt;a href="http://www.koikikukan.com/archives/2007/05/10-015037.php" title="小粋空間: ダイナミック・パブリッシングで perl のプラグインを利用する"&gt;ダイナミック・パブリッシングで perl のプラグインを利用する&lt;/a&gt;）で、当サイトの「MTプラグイン PHPizeプロジェクト」がご紹介を受けました。
（にわかにアクセスが増えてちょっとびっくりしました(笑)）

ということで、その「MTプラグイン PHPizeプロジェクト」について、改めて説明いたします。

極々簡単に言うとこれは、「既存のプラグインを&lt;strong&gt;勝手に&lt;/strong&gt;PHP化（ダイナミック・パブリッシング対応に）する」というモノです。
        &lt;h4&gt;PHPizeプロジェクトとは&lt;/h4&gt;

Movable Type (以下、MT)には、ダイナミック・パブリッシングという機能があるのは、このサイトを見に来てくださっている方なら大体ご存知かと思います。
また、MTはプラグインにより機能を拡張することができる、というのも周知のことと思われます。またそのプラグインは、少なからず、テンプレートを記述するのに便利なオリジナルのMTタグ（テンプレートタグ）を提供しています。

ところが、この2つの事実はあまり密接にリンクしていません。
プラグインで提供されるオリジナル・テンプレートタグの多くは、ダイナミック・パブリッシング対応にはなっていません。
これは、プラグインそのもの（本体）はPerlで記述され、スタティック版のオリジナル・テンプレートタグもPerlで記述されるのに対し、ダイナミック・パブリッシング対応のテンプレートタグはPHPと、記述言語が異なることがその根底にあると思われます。
だから、Perlでプラグインを記述するけれど、提供するテンプレートタグはスタティック専用、ダイナミック・パブリッシングでは使えません、となってしまう。
でも、同じ機能を持つPHP版のテンプレートタグを用意さえすれば、同じテンプレートをスタティックからダイナミックに簡単に切り替えることもできるのです。

『じゃ、ないものは自分で作っちゃえ。』

そんな単純な発想から生まれた個人プロジェクト、それが、「MTプラグイン PHPizeプロジェクト」なのです。

&lt;h4&gt;今までの成果&lt;/h4&gt;

これは論より証拠、ということで。
PHPizeしたプラグインは、このブログでタグに「&lt;a href="http://www.antimon2.atnifty.com/mt/mt-search.cgi?tag=PHPize&amp;blog_id=1"&gt;PHPize&lt;/a&gt;」をつけた記事で公開しています。
このタグでブログを検索すれば、これまでに作成（勝手にPHP化）したプラグインの一覧が出てきます。

&lt;h4&gt;今後の予定&lt;/h4&gt;

現在業務多忙につき、PHPizeプロジェクトは小康状態（そもそもこのブログが非活性状態）ですが、今後も続けていく予定ではいます。
今考えているPHPize対象プラグインは、以下の通りです（随時更新）：

&lt;dl&gt;
&lt;dt&gt;&lt;a href="http://www.nonplus.net/software/mt/MTCollate.htm" title="MT Extensions: MTCollate 1.1"&gt;MTCollate&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;関連記事……&lt;a href="http://www.antimon2.atnifty.com/2006/08/mtcollate.html" title="あんちもん2.Lab: MTCollateのススメ"&gt;MTCollateのススメ&lt;/a&gt;&lt;/dd&gt;
&lt;dd&gt;対応時期……未定&lt;/dd&gt;
&lt;/dl&gt;

&lt;h4&gt;要望の受付&lt;/h4&gt;

もし「このプラグイン（テンプレートタグ）をPHP化してほしい」という要望がありましたら、このエントリーへのコメントか、もしくは&lt;a href="http://www.antimon2.atnifty.com/mailform.html" title="あんちもん2.Lab: メール投稿フォーム"&gt;メールフォーム&lt;/a&gt;よりメールにてお寄せください。

ただし。
完全に一個人がやっているプロジェクトなので、ご期待に添えない場合もあるかも知れません。
その時はご容赦ください。

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=IqcAJGYwR_s:i9SJKSgXNHk:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?i=IqcAJGYwR_s:i9SJKSgXNHk:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=IqcAJGYwR_s:i9SJKSgXNHk:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>

<entry>
    <title>onkeypressをお行儀良くする追加スクリプト</title>
    <link rel="alternate" type="text/html" href="http://www.antimon2.atnifty.com/2007/05/fn-correct-onkeypress.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.antimon2.atnifty.com/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=75" title="onkeypressをお行儀良くする追加スクリプト" />
    <id>tag:www.antimon2.atnifty.com,2007://1.75</id>
    
    <published>2007-05-01T13:41:41Z</published>
    <updated>2007-05-01T15:02:29Z</updated>
    
    <summary>onclick と onkeypress のお行儀の良い併用の仕方を支援するスクリプトを提供します！</summary>
    <author>
        <name>Antimon2</name>
        <uri>http://www.antimon2.atnifty.com/</uri>
    </author>
    
        <category term="column" />
    
    <content type="html" xml:lang="ja-sl" xml:base="http://www.antimon2.atnifty.com/">
        前エントリー（&lt;a href="http://www.antimon2.atnifty.com/2007/04/correct_onkeypress.html" title="あんちもん2.Lab: 【提案】onkeypressの正しい併用の仕方！"&gt;【提案】onkeypressの正しい併用の仕方！&lt;/a&gt;）からの続きです。
ご用とお急ぎでない方は、前エントリーからお読みいただくと、今回このスクリプトを提供する経緯がお分かりになると思います。

onclickとonkeypressの両イベント属性を併用している場合に、onkeypressの挙動をお行儀よく修正する追加スクリプトを提供します。
このスクリプトは、前エントリーで分類した、以下のパターンに対して有効に作用するモノです：

&lt;ol&gt;&lt;li value="2"&gt;onclick と onkeypress が同時に指定され、その内容が同じの場合&lt;/li&gt;&lt;/ol&gt;

またその時に、そのような箇所を以下のように修正します：

&lt;ol type="A"&gt;&lt;li value="2"&gt;onkeypressイベントハンドラにフィルターをかける&lt;/li&gt;&lt;/ol&gt;

        &lt;h4&gt;概要&lt;/h4&gt;

念のため、もう一度おさらいします。
『onclick 属性を設定した場合は onkeypress 属性を同時に設定することがアクセシビリティ上好ましいとされています』
という情報が出回っていますが、これを文字通りに受け取って、例えば↓

&lt;blockquote class="code"&gt;&lt;pre&gt;&amp;lt;a href=&amp;quot;javascript:void(0);&amp;quot; onclick=&amp;quot;clickAction();&amp;quot; onkeypress=&amp;quot;clickAction();&amp;quot;&amp;gt;Click Here!&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;

のように、onclickとonkeypressに全く同じモノを指定してしまうと、却ってキーボードユーザビリティが損なわれてしまうことがあります。
（詳細は、前エントリー（&lt;a href="http://www.antimon2.atnifty.com/2007/04/correct_onkeypress.html" title="あんちもん2.Lab: 【提案】onkeypressの正しい併用の仕方！"&gt;【提案】onkeypressの正しい併用の仕方！&lt;/a&gt;）を参照してください。）

今回提供するスクリプトは、このような状態に対して、上記のような記述はそのままで、onkeypressの挙動を上書きすることによりキーボードユーザビリティの回復を図る、というモノです。

つまり！
フリーのスクリプトで、上記のようにonclickとonkeypressが同時指定されてしまっているときに、その部分を触らずに、面倒なソースの修正など一切せずに、当サイトの提案する「正しい併用の仕方」が実現できる、というワケです！

&lt;h4&gt;スクリプト本体&lt;/h4&gt;

以下からダウンロードしてください。

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.antimon2.atnifty.com/works/archives/correctOnKeyPress.js"&gt;correctOnKeyPress.js&lt;/a&gt;[1,492 Bytes]&lt;/li&gt;
&lt;/ul&gt;

（リンクを右クリックし「名前を付けて保存」等で保存してください。）

&lt;h4&gt;スクリプトの使い方&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;ダウンロードしたスクリプトをお使いのWebサーバの適当な場所にコピー（アップロード）してください。&lt;/li&gt;
&lt;li&gt;HTMLの最後の方、&amp;lt;/body&amp;gt;の直前あたりに、以下のように記述してください：
&lt;blockquote class="code"&gt;&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/js/correctOnKeyPress.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;
（ドキュメントルートの js フォルダにスクリプトをコピーした場合）&lt;/li&gt;
&lt;/ol&gt;

以上。これだけです。

お使いの「onclickとonkeypressに同じモノを指定している」スクリプトで、キーボード操作が期待通りに動作する（[Enter]キー以外で変な動作にならない）ことをご確認ください。

&lt;h4&gt;技術情報&lt;/h4&gt;

このスクリプトは、概ね以下のような処理をしています。

&lt;ol&gt;
&lt;li&gt;全てのHTML要素のうち、onkeypressとonclickが同時に指定されているモノを探す。&lt;/li&gt;
&lt;li&gt;onclickとonkeypressに全く同じ指定がされているモノのみ抜き出す。&lt;/li&gt;
&lt;li&gt;onkeypressイベントハンドラを上書きする：
&lt;ol type="a"&gt;
&lt;li&gt;キーコードが10,13([Enter]キー)および32(スペースキー)以外の場合は、元々指定されていたイベントハンドラを実行しない&lt;/li&gt;
&lt;li&gt;キーコードが32(スペースキー)で、かつ対象となる要素がボタン要素(&amp;lt;input&amp;gt;, &amp;lt;button&amp;gt;)以外の場合は、元々指定されていたイベントハンドラを実行しない&lt;/li&gt;
&lt;li&gt;上記に引っかからなかった場合に、元のイベントハンドラを実行する&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;

こうすることにより、ボタンなら[Enter]キーかスペースキー、それ以外なら[Enter]キーが押されたときにのみ、イベントが処理されるようになります。

&lt;h4&gt;お約束&lt;/h4&gt;

多くの環境で充分な検証はしておりますが、もし不具合等ありましたらぜひともご報告をお願いします。

    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=WbH1AzC_dgI:ER_rfXXsU6Q:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?i=WbH1AzC_dgI:ER_rfXXsU6Q:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=WbH1AzC_dgI:ER_rfXXsU6Q:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>

<entry>
    <title>【提案】onkeypressの正しい併用の仕方！</title>
    <link rel="alternate" type="text/html" href="http://www.antimon2.atnifty.com/2007/04/correct-onkeypress.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.antimon2.atnifty.com/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=74" title="【提案】onkeypressの正しい併用の仕方！" />
    <id>tag:www.antimon2.atnifty.com,2007://1.74</id>
    
    <published>2007-04-30T01:43:29Z</published>
    <updated>2007-05-02T00:11:33Z</updated>
    
    <summary>onclick と onkeypress の正しい併用の仕方を提案します。</summary>
    <author>
        <name>Antimon2</name>
        <uri>http://www.antimon2.atnifty.com/</uri>
    </author>
    
        <category term="column" />
    
    <content type="html" xml:lang="ja-sl" xml:base="http://www.antimon2.atnifty.com/">
        前エントリー（&lt;a href="http://www.antimon2.atnifty.com/2007/04/no-abuse_of_onkeypress.html" title="あんちもん2.Lab: onkeypress、乱用禁止！"&gt;onkeypress、乱用禁止！&lt;/a&gt;）からの続きです。
お暇なら、前エントリーからお読みください。

onkeypress イベント属性の正しい指定の仕方を提案します。
主に『onclickと同時にonkeypressイベント属性を指定する場合の正しい指定の仕方』という視点での提案です。
ざっくりとまとめると、対処法としては以下の3パターンがあります。

&lt;ol type="A"&gt;
&lt;li&gt;onkeypressは使わない！（onkeypressの指定を削除する）&lt;/li&gt;
&lt;li&gt;onkeypressイベントハンドラにフィルターをかける&lt;/li&gt;
&lt;li&gt;その他（個別の対応が必要）&lt;/li&gt;
&lt;/ol&gt;

【2007/05/02】追記。
        &lt;h4&gt;まずは分類&lt;/h4&gt;

現状はびこっている onkeypress の指定の仕方を分類してみました。
それぞれにたいして、対処法が上述のA～Cのいずれに当てはまるかを後述します。

&lt;ol&gt;
&lt;li&gt;&lt;a href="#cokp-pattern1"&gt;初めから onkeypress が単独で使用されている場合&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#cokp-pattern2"&gt;onclick と onkeypress が同時に指定され、その内容が同じの場合&lt;/a&gt;
&lt;ol type="a"&gt;&lt;li&gt;&lt;a href="#cokp-pattern2-a"&gt;ボタン要素(&amp;lt;input type=&amp;quot;button&amp;quot;～&amp;gt;、&amp;lt;button ～&amp;gt;)、およびアンカー要素(&amp;lt;a href=&amp;quot;～&amp;quot;～&amp;gt;)の場合&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#cokp-pattern2-b"&gt;それ以外の要素(&amp;lt;span&amp;gt;、&amp;lt;div&amp;gt;等)の場合&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#cokp-pattern3"&gt;onclick と onkeypress が同時に指定され、その内容が異なる場合&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id="cokp-pattern1"&gt;初めから onkeypress が単独で使用されている場合&lt;/h4&gt;

対処法: C. その他（個別の対応が必要）

元々『onclick 属性を設定した場合は onkeypress 属性を同時に設定することがアクセシビリティ上好ましいとされています』という不確かな情報を元に両方設定している場合に対する対処法の提案なので、この場合は本来対象外です。
ただ必要に応じて、onkeypress で指定しているスクリプトの内容について精査して、前回のエントリーで言及したような
『元々のキーに与えられている機能が抑えられてしまったり、別の機能が与えられてしまったりして、結果的にユーザビリティが低下してしまう』
といったことが起こっていないか検証する必要はあります。

&lt;h4 id="cokp-pattern2"&gt;onclick と onkeypress が同時に指定され、その内容が同じの場合&lt;/h4&gt;

&lt;h5 id="cokp-pattern2-a"&gt;ボタン要素(&amp;lt;input type=&amp;quot;button&amp;quot;～&amp;gt;、&amp;lt;button ～&amp;gt;)、およびアンカー要素(&amp;lt;a href=&amp;quot;～&amp;quot;～&amp;gt;)の場合&lt;/h5&gt;

対処法1: A. onkeypressは使わない！（onkeypressの指定を削除する）

一般的なビジュアルブラウザ（ボタンをきちんとボタンの形で表示するブラウザ、要するにほとんどの方が日常使用しているWebブラウザ）では、ボタンの上にフォーカスがあるときに、[Enter]キー・[Return]キー・スペースキーのいずれかが押されると、そのボタンがクリックされたときと同じ動作をするようになっています。
またアンカー（リンク）も、その上にフォーカスがあるときに[Enter]や[Return]を押すと、多くブラウザでやはりクリック時と同じ動作をします。
つまり、これらの要素には&lt;strong&gt;ブラウザ本来の機能としてキーボードユーザビリティが提供されているのです。&lt;/strong&gt;だから、&lt;strong&gt;onkeypress属性をわざわざ指定する必要はありません。&lt;/strong&gt;

対処法2: B. onkeypressイベントハンドラにフィルターをかける

「対処法1」では「不要」と書きましたが、ひょっとしたら、JavaScriptには対応しているけれど基本的なキーボードユーザビリティを提供していない（ボタン上で[Enter]キーを押しても何も動作しない）ブラウザがあるかも知れません。
また、[Enter]キー押下などのキーボード操作では onclick イベントを拾ってくれないブラウザ、というのも存在するかも知れません。
そういったものまで想定するのなら、onkeypress イベント属性の設定は必要です。
ただし、そのまま onclick と同じモノを指定してはもちろんダメ。先述の『元々のキーに与えられている機能が抑えられてしまったり、別の機能が与えられてしまったりして、結果的にユーザビリティが低下してしまう』という現象が起きてしまいますので。
具体的な対処法は、以下の&lt;a href="#cokp-pattern2-b"&gt;それ以外の要素(&amp;lt;span&amp;gt;、&amp;lt;div&amp;gt;等)の場合&lt;/a&gt;の対処法を参照してください。

&lt;h5 id="cokp-pattern2-b"&gt;それ以外の要素(&amp;lt;span&amp;gt;、&amp;lt;div&amp;gt;等)の場合&lt;/h5&gt;

対処法: B. onkeypressイベントハンドラにフィルターをかける

これらの要素では、[Enter]や[Return]キーが押されても同じ動作になるというキーボードユーザビリティが初めから提供されているとは限りません。
というより、ブラウザの実装に依りますが、まずそのような機能は提供されていないと考えた方が良いと思います。
&lt;small&gt;(Operaではそのような機能が実装されちゃってますが。)&lt;/small&gt;
そこでこれらの要素には、抜本的な対策が必要となります。

例えば、以下のようなソースを想定します：

&lt;blockquote class="code"&gt;&lt;pre&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;function clickAction() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert('DUMMY!');&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;a href=&amp;quot;javascript:void(0);&amp;quot; onclick=&amp;quot;clickAction();&amp;quot;&amp;gt;Click Here!&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;

（説明のしやすさを考えてアンカー要素(&amp;lt;a&amp;gt;)にonclickを指定しました。）
これは実際に表示すると↓こうなります。

&lt;blockquote&gt;
&lt;script type="text/javascript"&gt;
function clickAction0() {
	alert('DUMMY!');
}
&lt;/script&gt;
&lt;a href="javascript:void(0);" onclick="clickAction0();"&gt;Click Here!&lt;/a&gt;
&lt;/blockquote&gt;

「Click Here!」と書かれているリンクをクリックすると、ダイアログで「DUMMY!」と表示されます。
&amp;lt;a&amp;gt;のリンクになっているので、このままでも多くのブラウザでは、リンク上にフォーカスを持っていって[Enter]キーを押せば同じようにダイアログで「DUMMY!」と表示されるはずです。

続いて、onkeypress で全く同じモノを指定してみましょう。

&lt;blockquote class="code"&gt;&lt;pre&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;function clickAction() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert('DUMMY!');&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;a href=&amp;quot;javascript:void(0);&amp;quot; onclick=&amp;quot;clickAction();&amp;quot; onkeypress=&amp;quot;clickAction();&amp;quot;&amp;gt;Click Here!&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;

表示は↓、見た目は同じです。

&lt;blockquote&gt;
&lt;script type="text/javascript"&gt;
function clickAction1() {
	alert('DUMMY!');
}
&lt;/script&gt;
&lt;a href="javascript:void(0);" onclick="clickAction1();" onkeypress="clickAction1();"&gt;Click Here!&lt;/a&gt;
&lt;/blockquote&gt;

クリックしたときの動作も同じです。
でも、キーを押したとき、特に[Enter]キー以外を押したときの動作に注意。
例えば、[Tab]キーか、スペースキーを押してみましょう。
少なくともいずれかの場合に、やはり「DUMMY!」というダイアログが表示されてしまったのではないでしょうか？
これが、『元々のキーに別の機能が与えられてしまってユーザビリティが低下している状態』です。
（[Tab]キーは「次のリンクに移る」、スペースキーは「画面下へスクロール」という機能が期待されるキーです。）

ここからが本題。このonkeypressイベントに、フィルターをかけます。
ここでいうフィルターとは、「どのキーが押されたかによって処理を分けること」という意味です。
具体的には↓こうします。

&lt;blockquote class="code"&gt;&lt;pre&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;function keyPressFilter(evt) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var keyCode;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (evt) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;keyCode = evt.keyCode;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;keyCode = event.keyCode;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// ↓[Enter]キーが押されたかどうかの判定&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (keyCode != 10 &amp;&amp; keyCode != 13) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clickAction();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;function clickAction() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert('DUMMY!');&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;a href=&amp;quot;javascript:void(0);&amp;quot; onclick=&amp;quot;clickAction();&amp;quot; onkeypress=&amp;quot;return keyPressFilter(event);&amp;quot;&amp;gt;Click Here!&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;

少々長くなってしまいました。
でも見た目は↓やはり何ら変わりはありません。

&lt;blockquote&gt;
&lt;script type="text/javascript"&gt;
function keyPressFilter(evt) {
	var keyCode;
	if (evt) {
		keyCode = evt.keyCode;
	} else {
		keyCode = event.keyCode;
	}
	if (keyCode != 10 &amp;&amp; keyCode != 13) {
		return true;
	} else {
		clickAction();
		return false;
	}
}
function clickAction() {
	alert('DUMMY!');
}
&lt;/script&gt;
&lt;a href="javascript:void(0);" onclick="clickAction();" onkeypress="return keyPressFilter(event);"&gt;Click Here!&lt;/a&gt;
&lt;/blockquote&gt;

クリックしたときの動作も同じです。
そして、キーを押したときの動作はというと。
リンク上にフォーカスがある状態で[Enter]以外のキーが押されても、ダイアログは出現せず、そのキー本来の機能が有効になっているのが確認できると思います。

ポイントは、ソース中に「// ↓[Enter]キーが押されたかどうかの判定」と書かれている箇所。
ここで、押されたキーがキーコードの10番もしくは13番（＝いずれかが[Enter]キー。通常13番）に該当するかどうかを判定しています。
該当しなければ、イベント処理をスルー（return true;）し、該当すれば onclick のときと同じイベントハンドラを呼び出しています。
これによって、[Enter]キーが押されたときだけ目的の処理が行われるようになりました。

一応、念のため。
なぜ[Enter]キーのときだけ、としたかというと。
『リンクをクリックする』という操作に対応するキーボード操作として一番妥当なのが『[Enter]キーを押下する』だと思われるからです。
これがボタンなら、つまり『ボタンをクリックする』なら、他に『スペースキーを押下する』も選択肢にくわえなければならないでしょう。
スペースキーのキーコードは通常32番なので、先ほどの条件分岐を以下のようにする必要があります。

&lt;blockquote class="code"&gt;&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// ↓[Enter]キーもしくはスペースキーが押されたかどうかの判定&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (keyCode != 10 &amp;&amp; keyCode != 13 &amp;&amp; keyCode != 32) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;h4 id="cokp-pattern3"&gt;onclick と onkeypress が同時に指定され、その内容が異なる場合&lt;/h4&gt;

対処法: C. その他（個別の対応が必要）

この場合は、「onkeypress の場合は onclick とは別の動作をする」という指定か、初めから「特定のキーが押されたときにだけ onclick と同じ動作をする」という指定がされているものとおもわれます。
そうならば、おそらく何の対処も要らないと思われます。
一応、onkeypress で指定されているイベントハンドラの内部を検証する必要はあると思います。

&lt;h4&gt;まとめ&lt;/h4&gt;

基本的には、「onclick 属性のしてある要素に onkeypress も指定する」という思想は、現状では妄信に近いものです。
めんどくさければ「onclick を指定してあれば onkeypress は指定しない」のが一番です。onclick が指定されていれば、世の中のWebサイト閲覧者の9割は（例えキーボード操作を強いられようとも）そんなに困らないような作りになっていますから。つまりその方がよっぽど『高ユーザビリティを保てるようになっている』のですから。

それでも、より高い操作性を求めたり、将来的なモノを見越したりして、「キーボード操作でもマウス操作と同じユーザビリティを提供しているんだということを、ソースに明確に記述することで示したい」という方は、ぜひこの記事を参考にしてください。

また「現状、何も知らずに言われるがママに『onclickとonkeypressを併用』しちゃってるけれど、どうしたらよいでしょう？」という方には、現状を多少なりとも改善する方法、ただし今回のエントリーのようなめんどくさい記述ができる限り不要な解決方法を&lt;del&gt;改めてご紹介（ご提供）する予定です&lt;/del&gt;&lt;ins&gt;次のエントリーでご紹介（ご提供）します&lt;/ins&gt;。
&lt;del&gt;（少々お待ちを。。。）&lt;/del&gt;

→&lt;a href="http://www.antimon2.atnifty.com/2007/05/fn_correct_onkeypress.html" title="あんちもん2.Lab: onkeypressをお行儀良くする追加スクリプト"&gt;onkeypressをお行儀良くする追加スクリプト&lt;/a&gt;
    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=Imd1jkS3zpk:JIHGC_-gMv0:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?i=Imd1jkS3zpk:JIHGC_-gMv0:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=Imd1jkS3zpk:JIHGC_-gMv0:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>

<entry>
    <title>onkeypress、乱用禁止！</title>
    <link rel="alternate" type="text/html" href="http://www.antimon2.atnifty.com/2007/04/no-abuse-of-onkeypress.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.antimon2.atnifty.com/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=73" title="onkeypress、乱用禁止！" />
    <id>tag:www.antimon2.atnifty.com,2007://1.73</id>
    
    <published>2007-04-29T07:43:18Z</published>
    <updated>2007-04-30T03:51:58Z</updated>
    
    <summary>イベント属性の onkeypres。何も知らずに使っていませんか？あなたのWebサイトのユーザビリティ低下を招いているかも知れません。ご注意！</summary>
    <author>
        <name>Antimon2</name>
        <uri>http://www.antimon2.atnifty.com/</uri>
    </author>
    
        <category term="column" />
    
    <content type="html" xml:lang="ja-sl" xml:base="http://www.antimon2.atnifty.com/">
        Webサイト構築やブログのカスタマイズをするにあたり、参考になるサイトを見ていると、よくこんな記述を見かけます。

&lt;blockquote&gt;&lt;p&gt;onclick 属性を設定した場合は onkeypress 属性を同時に設定することがアクセシビリティ上好ましいとされています。&lt;/p&gt;&lt;/blockquote&gt;

それがなぜそうであるのか、分かってやっていれば良いのですが、「～とされています」とだけ紹介してきちんと検証していない人、けっこういます。
そもそもこの設定は、アクセシビリティよりもユーザビリティに関する提案です。
しかも。「へーそうなのかー」と何も考えずにそれに倣って設定すると、却ってユーザビリティを悪くします！

        &lt;h4&gt;論より証拠&lt;/h4&gt;

まずは、こちらのサイトをご覧ください。

→&lt;a href="http://east.portland.ne.jp/~sigekazu/css/ascii.htm" target="MOJI" title="使えない文字"&gt;使えない文字&lt;/a&gt;

HTMLで「そのままでは表示できない文字」の紹介と、それを表示する方法（＝文字参照）について解説しているサイトです。
このサイト自体はとても有用なサイトで、初掲載からかなりの年月が経っている（ターゲットブラウザはIE6およびNN6、またホームページ自体は閉鎖されている模様）にもかかわらず現在でも十分通用する内容になっています。
その内容に関しては今回の本題から外れるので、またの機会に。

上記サイトの、後半過ぎあたりの「HTML 4 文字参照」という箇所をご覧ください。
入力した文字が、数値文字参照もしくは文字実体参照に変換したり、逆に数値文字参照や文字実体参照を実際の文字に変換したりできるようになっています。
（HTMLの文字参照以外に、CSS・JavaScriptの文字参照にも対応しています。）
この、「HTML 4 文字参照」の入力テキストフィールドに適当な文字を入力して、[Tab]キーを数回押してください。
一般的なブラウザなら、3～4回押すと「HTML 4 変換！」ボタンの上にフォーカスが移動します。
&lt;small&gt;（ここでボタンにフォーカスが移動しないブラウザは、この現象の対象外ですので、続きは読み飛ばしていただいても構いません。ただ、大事な話になるので、IE、Firefox、Opera 等の対象ブラウザでもう一度確認することをオススメします。）&lt;/small&gt;

さて、この「HTML 4 変換！」ボタンの上にフォーカスがある状態で、もう一回、[Tab]キーを押してみてください。
テキストフィールド内の文字が、勝手に変換されませんでしたか？

ここで「えー、変換されないよ？」という方は、きっとWinIEをお使いですね。
Firefox や Opera といった『標準準拠ブラウザ』でもう一度見直してください。
↑これらのブラウザでは、フォーカスが隣の「リセット」ボタンに移動するとともに、ボタンを押してもいないのにボタンを押したときの動作が引き起こされてしまっているのです。
ちなみにその「リセット」ボタンにフォーカスがある状態でさらに[Tab]キーを押すと、入力文字がクリアされてしまいます。
せっかく入力し、変換してくれた文字が、消えてしまうのです(泣)

これが、「onkeypressを乱用」したことによる功罪の典型的な例です。
つまり、この「HTML 4 変換！」ボタンや「リセット」ボタンに、onclickとともにonkeypressイベントが設定されているのです。
その結果、標準的なブラウザでは、そのボタンにフォーカスがあるときに何かキーが押されたら、そのボタンをクリックしたときと同じ動作をしてしまうのです。

ここで注意すべきは、「どんなキーが押されたにもかかわらず」、ということ。

[Tab]キーは、Webブラウザでは、リンクをたどったり、フォームの各要素（テキストフィールド、チェックボックス、ボタン等）を移動したりするのに利用することのできるキーです。
これは標準的なユーザビリティです。一時的にマウスが使えない場合など、キーボードで全て操作したい場合などにとても有効です。
逆に言えば、その機能が敢えて抑えられてしまったり、別の機能が与えられてしまうと、とても不便になります。ユーザに混乱を与える、つまり、ユーザビリティが低下してしまいます。

スペースキーもそうですね。
スペースキーは、フォーカスがボタンやラジオボタン、チェックボックス等の、文字入力以外のフォーム要素の上にあるときには、クリックと同じ動作になります。文字入力要素（テキストフィールド、パスワードフィールド、テキストエリア等）の中なら文字通りスペース文字の入力。それ以外の場所の場合は、一般的なブラウザではウィンドウの一画面分下スクロール（[PageDown]キーと同様の動作）に割り当てられています。
（ちなみに[Shift]+スペースキーで一画面分上スクロール（＝[PageUp]）。また一部ブラウザでは日本語入力をOFFにしていないと有効になりません。）
ところが。
先ほどのサイトをOperaで見てみてください。
先ほどと同じ「HTML 4 変換！」で、スペースキーを押してみてください。
文字が変換されるとともに、画面が下にスクロールしてしまいます。
しかも。ボタンが何度も押されたかのように、変換結果がおかしくなっています。
これも、「onkeypress」の功罪です。

ちなみに Opera には、標準機能としてのキーボード・ユーザビリティに独自の工夫が為されています。
[Shift]キーを押しながらカーソルキー（矢印キー）を押すと、その矢印の方向にある次に近いリンク（ボタンもしくはテキストフィールド）にフォーカスが移動するようになっています。
また各アルファベットキーにも色々な機能が割り当てられています（zで前のページ、xで次のページ、aでリンクをたどる、sで&amp;lt;hn&amp;gt;要素をたどる、等）。
onkeypressはそれらのキー押下を拾ってしまうので、「aキーで次のリンクに飛びたいけれど、サイドメニューが展開/折りたたみして先に進めないー」なんてことも起こります。

困ったモノです。
どうしたらよいかというと、長くなってしまったので次のエントリーに続きます。
→&lt;a href="http://www.antimon2.atnifty.com/2007/04/correct_onkeypress.html" title="あんちもん2.Lab: 【提案】onkeypressの正しい併用の仕方！"&gt;【提案】onkeypressの正しい併用の仕方！&lt;/a&gt;
    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=I8PxsQffT9c:_vdPkleIKps:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?i=I8PxsQffT9c:_vdPkleIKps:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/a2lab?a=I8PxsQffT9c:_vdPkleIKps:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/a2lab?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
</entry>

</feed>
