<?xml version="1.0" encoding="EUC-JP"?>
<rss version="2.0">
<!-- TEST -->
<channel>
<title>肉少なめ</title>
<link>http://niku.suku.name/</link>
<description></description>
<language>ja</language>
<generator>Nucleus CMS v3.31SP1</generator>
<category>Weblog</category>
<docs>http://backend.userland.com/rss</docs>
<item>
<title>プラグインのインストールをキャンセルしたい</title>
<link>http://niku.suku.name/item/615</link>
<description><![CDATA[<p>Nucleusのプラグインをインストールを途中でキャンセルとかしたい。コアの機能では要求するNucleusのバージョンは設定できるけど、<abbr title="Pre-Hypertext Processing">PHP</abbr>のバージョンは設定できないし。</p><h3>管理画面からインストールされる場合</h3>
<p>管理画面からインストールされる場合の処理を見ると、プラグインのインストール手順は以下のような感じ。</p>
<ol>
<li>プラグイン名のチェック(正しいファイル名かどうか・同名のプラグインがすでにインストールされているかどうか)</li>
<li>新しいプラグインの順序(porder)の決定</li>
<li>PreAddPluginイベント</li>
<li>pluginテーブルに書き込み、プラグイン<abbr title="Identification">ID</abbr>をゲット</li>
<li>managerが持つインストール済みプラグインのキャッシュを削除</li>
<li>プラグインのインスタンスをmanagerから取得してみる(ファイルを読むのはここ・新しいプラグインのinit()が呼ばれている)</li>
<li>要求されるNucleusのバージョンやパッチ・レベルの確認</li>
<li>依存しているプラグインの確認</li>
<li>プラグインのinstall()メソッドを呼ぶ</li>
<li>PostAddPluginイベント</li>
<li>イベントデータの更新 (その後、一覧画面にリダイレクト)</li>
</ol>
<p>Nucleusのバージョン確認や依存するプラグインの確認でインストール不可と判断された場合(ファイルの読み込みには成功している場合)、ADMINクラスのインスタンスのdeleteOnePlugin()が呼ばれ、その後同じくADMINクラスのインスタンスのerror()でエラー・メッセージを表示している。</p>
<p>プラグインから自身のインストールをキャンセルするには、install()メソッド中でそれを真似すればよさそう。ADMINクラスのインスタンスはグローバル変数の$adminなので、単純に</p>
<pre><code class="php">  <span class="kw2">function</span> install<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <a href="http://www.php.net/global"><span class="kw3">global</span></a> <span class="re0">$admin</span>;
    <span class="re0">$admin</span>-&gt;<span class="me1">deleteOnePlugin</span><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">getID</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
    <span class="re0">$admin</span>-&gt;<span class="me1">error</span><span class="br0">&#40;</span><span class="st0">'You is a big fool man.'</span><span class="br0">&#41;</span>; <span class="co1">// エラーメッセージ</span>
  <span class="br0">&#125;</span></code></pre>
<p>で多分大丈夫。</p>
<h3>インストールスクリプトからインストールされる場合</h3>
<p>ADMINクラスのインスタンスが使われないため、別の実装が必要。……というか、きちんと対応するのは無理くさい。pluginテーブルから情報を消すので精一杯。</p>]]></description>
<category>Nucleusメモ</category>
<comments>http://niku.suku.name/item/615</comments>
<pubDate>Sun, 3 May 2009 11:28:17 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/615</guid>
</item><item>
<title>COMMENT::getComment()の返り値</title>
<link>http://niku.suku.name/item/614</link>
<description><![CDATA[<p>この間<abbr title="Uniform Resource Locator">URL</abbr>とメールアドレスが分離された経緯からか、凄い気持ち悪いことになってる気がする。</p><p><code class="php">COMMENT::<span class="me2">getComment</span><span class="br0">&#40;</span><span class="re0">$commentId</span><span class="br0">&#41;</span></code>を実行したときの返り値は、コメントが存在しない場合は<code class="php"><span class="kw2">false</span></code>、存在する場合は連想配列になる。</p>
<table>
<caption>連想配列の情報</caption>
<thead><tr><th rowspan="2">キー</th><th colspan="2">値</th></tr>
<tr><th>ログインユーザー</th><th>一般ビジター</th></tr></thead>
<tbody>
<tr><td>commentid</td><td colspan="2">コメント<abbr title="Identification">ID</abbr></td></tr>
<tr><td>user</td><td>(空文字列)</td><td>投稿者名</td></tr>
<tr><td>userid</td><td>(空文字列)</td><td><strong><abbr title="Uniform Resource Locator">URL</abbr></strong></td></tr>
<tr><td>email</td><td>(空文字列)</td><td>Eメールアドレス</td></tr>
<tr><td>memberid</td><td>メンバー<abbr title="Identification">ID</abbr></td><td>0</td></tr>
<tr><td>member</td><td>メンバー名</td><td>null</td></tr>
<tr><td>ctime</td><td colspan="2">投稿時刻 (MySQLのDATETIME型)</td></tr>
<tr><td>timestamp</td><td colspan="2">タイムスタンプ</td></tr>
<tr><td>host</td><td colspan="2">インターネットホスト名</td></tr>
<tr><td>ip</td><td colspan="2"><abbr title="Internet Protocol">IP</abbr></td></tr>
<tr><td>blogid</td><td colspan="2">ブログ<abbr title="Identification">ID</abbr></td></tr>
</tbody></table>]]></description>
<category>Nucleusメモ</category>
<comments>http://niku.suku.name/item/614</comments>
<pubDate>Fri, 5 Dec 2008 17:07:46 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/614</guid>
</item><item>
<title>NucleusのイベントPrePluginOptionsEditについて</title>
<link>http://niku.suku.name/item/612</link>
<description><![CDATA[<p>備忘メモ。絶対また引っかかる。</p>
<p>イベントPrePluginOptionsEditについて、それが起こされる状況によって$dataの内容が違う。</p><p>イベントPrePluginOptionsEditがNucleusコアで起こるのは以下の2つの場合。</p>
<ul>
<li>プラグイン管理画面から遷移するプラグインオプションの編集画面を表示するとき(プラグインオプションのコンテキストはglobal)</li>
<li>ブログやメンバー、アイテム等の管理・編集画面でプラグインオプションの編集フォームを表示する直前(コンテキストはglobal以外)</li>
</ul>
<p>以下に違いのまとめ。</p>
<table>
<caption>$dataの内容</caption>
<thead>
<tr><th rowspan="2">キー</th><th colspan="2">内容</th></tr>
<tr><th>global</th><th>非global</th></tr>
</thead>
<tbody>
<tr><td>context</td><td>コンテキスト</td><td>コンテキスト</td></tr>
<tr><td>contextid</td><td>(存在せず)</td><td>コンテキスト<abbr title="Identification">ID</abbr></td></tr>
<tr><td>plugid</td><td>対象となるプラグインの<abbr title="Identification">ID</abbr></td><td>(存在せず)</td></tr>
<tr><td>options</td><td>対象となるプラグインのglobalなプラグインオプションの情報。<strong>オプション<abbr title="Identification">ID</abbr>をキーにもつ連想配列。</strong></td><td>対象となるコンテキストのプラグインオプションの情報。<strong>連想配列ではない。</strong></td></tr>
</tbody>
</table>
<table>
<caption>$data[&quot;options&quot;]の内容</caption>
<thead>
<tr><th rowspan="2">キー</th><th colspan="2">内容</th></tr>
<tr><th>global</th><th>非global</th></tr>
</thead>
<tbody>
<tr><td>pid</td><td>(存在せず)</td><td>オプションを持つプラグインの<abbr title="Identification">ID</abbr></td></tr>
<tr><td>pfile</td><td>(存在せず)</td><td>オプションを持つプラグインの名前(&quot;NP_&quot;つき)</td></tr>
<tr><td>oid</td><td>オプション<abbr title="Identification">ID</abbr></td><td>オプション<abbr title="Identification">ID</abbr></td></tr>
<tr><td>value</td><td>値</td><td>値</td></tr>
<tr><td>name</td><td>名前</td><td>名前</td></tr>
<tr><td>description</td><td>説明</td><td>説明</td></tr>
<tr><td>type</td><td>タイプ</td><td>タイプ</td></tr>
<tr><td>typeinfo</td><td>タイプの補足</td><td>タイプの補足</td></tr>
<tr><td>contextid</td><td>コンテキスト<abbr title="Identification">ID</abbr>(0が代わりに使用される)</td><td>コンテキスト<abbr title="Identification">ID</abbr></td></tr>
<tr><td>extra</td><td>(存在せず : ただし追加すれば非globalの場合と同様に動作する)</td><td>追加で表示される<abbr title="HyperText Markup Language">HTML</abbr>文字列</td></tr>
</tbody>
</table>]]></description>
<category>Nucleusメモ</category>
<comments>http://niku.suku.name/item/612</comments>
<pubDate>Fri, 21 Nov 2008 17:23:54 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/612</guid>
</item><item>
<title>Firebugのコンソールでjavascript 1.8を使う</title>
<link>http://niku.suku.name/item/611</link>
<description><![CDATA[<p>メモ。nヶ月ぶりの記事だけど。</p>
<p>せっかくFx3からjavascript1.8が使えるようになったのに、Firebug(このメモを書いている現在、最新版は1.2.1)のコンソールでは有効でないので、使えるようにする。</p>
<p>&quot;(プロファイルのディレクトリ)\extensions\firebug@software.joehewitt.com\content\firebug\libs.js&quot;の260行目付近、addScriptという名前のメソッド内以下のコードを置き換える。</p>
<pre><code class="javascript">element.<span class="me1">setAttribute</span><span class="br0">&#40;</span><span class="st0">&quot;type&quot;</span>, <span class="st0">&quot;text/javascript&quot;</span><span class="br0">&#41;</span>;</code></pre>
<p>これを</p>
<pre><code class="javascript">element.<span class="me1">setAttribute</span><span class="br0">&#40;</span><span class="st0">&quot;type&quot;</span>, <span class="st0">&quot;application/javascript;version=1.8&quot;</span><span class="br0">&#41;</span>;</code></pre>
<p>何か危険かも。</p>]]></description>
<category>Webメモ</category>
<comments>http://niku.suku.name/item/611</comments>
<pubDate>Mon, 15 Sep 2008 16:26:43 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/611</guid>
</item><item>
<title>久々にプラグイン作って遊んだ ( NP_SQLItem )</title>
<link>http://niku.suku.name/item/610</link>
<description><![CDATA[<p>うろうろしてたらMovable Typeの<abbr title="Structured Query Language">SQL</abbr>プラグイン(<a href="http://www.sixapart.jp/movabletype/plugins/sql.html" title="Six Apart - Movable Type プラグインディレクトリ: SQL">Six Apart - Movable Type プラグインディレクトリ: <abbr title="Structured Query Language">SQL</abbr></a>)にたどり着いてちょっと感動したので。&rarr; <a class="plug_nkautolinkbyitemtitle" title="Read item : NP_SQLItem" href="http://niku.suku.name/item/609">NP_SQLItem</a>。未テスト。</p>
<p>JSDeferredについては、なんか上手いまとめ方が思いつかない。</p>]]></description>
<category>Nucleusメモ</category>
<comments>http://niku.suku.name/item/610</comments>
<pubDate>Thu, 5 Jun 2008 03:06:31 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/610</guid>
</item><item>
<title>JSDeferredを読もうとして</title>
<link>http://niku.suku.name/item/608</link>
<description><![CDATA[<p>JSDeferred ( <a href="http://coderepos.org/share/wiki/JSDeferred" title="JSDeferred - CodeRepos::Share - Trac">JSDeferred - CodeRepos::Share - Trac</a> ) をちょっと前から触ったり眺めたりしてますが、やっぱりちゃんと読んでみようという話。これも三日坊主になりそう。コメントありの<abbr title="Version">ver.</abbr>2.1を使用。全部メモ。</p><h3>83行目</h3>
<p>ここまで全部コメント。</p>
<pre><code class="javascript"><span class="kw2">function</span> Deferred <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span> <span class="br0">&#40;</span><span class="kw1">this</span> <span class="kw1">instanceof</span> Deferred<span class="br0">&#41;</span> ? <span class="kw1">this</span>.<span class="me1">init</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span> : <span class="kw2">new</span> Deferred<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#125;</span></code></pre>
<p>関数Deferredの定義。クラスDeferredのコンストラクタ。初期化処理は<code class="javascript">Deferred.<span class="me1">prototype</span>.<span class="me1">init</span></code>にある。</p>
<p>コメントには<code class="javascript">Deferred<span class="br0">&#40;</span><span class="br0">&#41;</span>;</code>は<code class="javascript"><span class="kw2">new</span> Deferred<span class="br0">&#40;</span><span class="br0">&#41;</span>;</code>のショートハンドである、的なことが書いてある。<code class="javascript">Deferred<span class="br0">&#40;</span><span class="br0">&#41;</span>;</code>を実行すると、<code class="javascript"><span class="br0">&#40;</span><span class="kw1">this</span> <span class="kw1">instanceof</span> Deferred<span class="br0">&#41;</span></code>の値はfalseになり、三項演算子の後のほうが実行され、結果的に<code class="javascript"><span class="kw2">new</span> Deferred<span class="br0">&#40;</span><span class="br0">&#41;</span>;</code>の結果が返ってくる。</p>
<p><a href="http://nanto.asablo.jp/blog/2005/10/24/118564" title="JavaScript の new 演算子の意味: Days on the Moon">JavaScript の new 演算子の意味: Days on the Moon</a>を参考にして、無名関数・引数ありの場合で書き直すとこんな感じ?</p>
<pre><code class="javascript"><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span> <span class="kw1">instanceof</span> arguments.<span class="me1">callee</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="kw1">return</span> <span class="kw1">this</span>.<span class="me1">init</span>.<span class="me1">apply</span><span class="br0">&#40;</span><span class="kw1">this</span>, arguments<span class="br0">&#41;</span>;
  <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
    <span class="kw2">var</span> Constructor = <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span>;
    Constructor.<span class="me1">prototype</span> = arguments.<span class="me1">callee</span>.<span class="me1">prototype</span>;
    <span class="kw2">var</span> instance = <span class="kw2">new</span> Constructor<span class="br0">&#40;</span><span class="br0">&#41;</span>;
    <span class="kw2">var</span> result = arguments.<span class="me1">callee</span>.<span class="me1">apply</span><span class="br0">&#40;</span>instance, arguments<span class="br0">&#41;</span>;
    <span class="kw1">return</span> <span class="br0">&#40;</span>result <span class="kw1">instanceof</span> Object<span class="br0">&#41;</span> ? result : instance;
  <span class="br0">&#125;</span>
<span class="br0">&#125;</span></code></pre>
<p>なんかすっごい長くなった。</p>
<h3>84行目〜125行目</h3>
<p><code class="javascript">Deferred.<span class="me1">prototype</span></code>の定義。</p>
<h4>85行目〜92行目</h4>
<p>初期化処理を行う<code class="javascript">Deferred.<span class="me1">prototype</span>.<span class="me1">init</span></code>の定義。</p>
<pre><code class="javascript">	init : <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="kw1">this</span>._next    = <span class="kw2">null</span>;
		<span class="kw1">this</span>.<span class="me1">callback</span> = <span class="br0">&#123;</span>
			ok: <span class="kw2">function</span> <span class="br0">&#40;</span>x<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span> x <span class="br0">&#125;</span>,
			ng: <span class="kw2">function</span> <span class="br0">&#40;</span>x<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">throw</span>  x <span class="br0">&#125;</span>
		<span class="br0">&#125;</span>;
		<span class="kw1">return</span> <span class="kw1">this</span>;
	<span class="br0">&#125;</span>,</code></pre>
<h4>94, 95行目, 104行目〜108行目</h4>
<pre><code class="javascript">	next  : <span class="kw2">function</span> <span class="br0">&#40;</span>fun<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span> <span class="kw1">this</span>._post<span class="br0">&#40;</span><span class="st0">&quot;ok&quot;</span>, fun<span class="br0">&#41;</span> <span class="br0">&#125;</span>,
	error : <span class="kw2">function</span> <span class="br0">&#40;</span>fun<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span> <span class="kw1">this</span>._post<span class="br0">&#40;</span><span class="st0">&quot;ng&quot;</span>, fun<span class="br0">&#41;</span> <span class="br0">&#125;</span>,</code></pre>
<p><code class="javascript">next</code>メソッドと<code class="javascript">error</code>メソッドの定義。細かいことは<code class="javascript">_post</code>メソッドにある。</p>
<p>ちょっと飛ばして、その<code class="javascript">_post</code>メソッドについて。</p>
<pre><code class="javascript">	_post : <span class="kw2">function</span> <span class="br0">&#40;</span>okng, fun<span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="kw1">this</span>._next =  <span class="kw2">new</span> Deferred<span class="br0">&#40;</span><span class="br0">&#41;</span>;
		<span class="kw1">this</span>._next.<span class="me1">callback</span><span class="br0">&#91;</span>okng<span class="br0">&#93;</span> = fun;
		<span class="kw1">return</span> <span class="kw1">this</span>._next;
	<span class="br0">&#125;</span>,</code></pre>
<p>これは見たまま。<code class="javascript"><span class="kw1">this</span>._next</code>の値は<code class="javascript">Deferred</code>クラスの新しいインスタンス、で、それが返ってくる。</p>
<p>新しいインスタンスが返ってくるので、以下のようにつなげられる。</p>
<pre><code class="javascript"><span class="kw2">var</span> testDeferred = <span class="kw2">new</span> Deferred<span class="br0">&#40;</span><span class="br0">&#41;</span>;
testDeferred.
<span class="me1">next</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="coMULTI">/* ... */</span> <span class="br0">&#125;</span><span class="br0">&#41;</span>.
<span class="me1">next</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="coMULTI">/* ... */</span> <span class="br0">&#125;</span><span class="br0">&#41;</span>;</code></pre>
<h4>95, 96行目, 110行目〜124行目</h4>
<pre><code class="javascript">	call  : <span class="kw2">function</span> <span class="br0">&#40;</span>val<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span> <span class="kw1">this</span>._fire<span class="br0">&#40;</span><span class="st0">&quot;ok&quot;</span>, val<span class="br0">&#41;</span> <span class="br0">&#125;</span>,
	fail  : <span class="kw2">function</span> <span class="br0">&#40;</span>err<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span> <span class="kw1">this</span>._fire<span class="br0">&#40;</span><span class="st0">&quot;ng&quot;</span>, err<span class="br0">&#41;</span> <span class="br0">&#125;</span>,</code></pre>
<pre><code class="javascript">	_fire : <span class="kw2">function</span> <span class="br0">&#40;</span>okng, value<span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="kw2">var</span> self = <span class="kw1">this</span>, next = <span class="st0">&quot;ok&quot;</span>;
		<span class="kw1">try</span> <span class="br0">&#123;</span>
			value = self.<span class="me1">callback</span><span class="br0">&#91;</span>okng<span class="br0">&#93;</span>.<span class="me1">call</span><span class="br0">&#40;</span>self, value<span class="br0">&#41;</span>;
		<span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span>
			next  = <span class="st0">&quot;ng&quot;</span>;
			value = e;
		<span class="br0">&#125;</span>
		<span class="kw1">if</span> <span class="br0">&#40;</span>value <span class="kw1">instanceof</span> Deferred<span class="br0">&#41;</span> <span class="br0">&#123;</span>
			value._next = self._next;
		<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
			<span class="kw1">if</span> <span class="br0">&#40;</span>self._next<span class="br0">&#41;</span> self._next._fire<span class="br0">&#40;</span>next, value<span class="br0">&#41;</span>;
		<span class="br0">&#125;</span>
		<span class="kw1">return</span> <span class="kw1">this</span>;
	<span class="br0">&#125;</span></code></pre>
<p>作ったチェーンを開始するメソッド<code class="javascript">call</code>、あるいはエラーを処理するメソッド<code class="javascript">fail</code>、そしてその中身。普通に使う分にはあまり意識しなくていいっぽい。</p>
<p><code class="javascript">_fire</code>メソッドは内側で<code class="javascript">self.<span class="me1">callback</span><span class="br0">&#91;</span>okng<span class="br0">&#93;</span></code>を実行している。<code class="javascript">okng</code>は文字列<code class="javascript"><span class="st0">'ok'</span></code>または<code class="javascript"><span class="st0">'ng'</span></code>。実行したとき何か<code class="javascript"><span class="kw1">throw</span></code>されていると<code class="javascript">self._next.<span class="me1">callback</span>.<span class="me1">ng</span></code>が、そうでないなら<code class="javascript">self._next.<span class="me1">callback</span>.<span class="me1">ok</span></code>が<code class="javascript">self._next._fire</code>経由で実行される。</p>
<p>初期化直後だと<code class="javascript">self.<span class="me1">callback</span><span class="br0">&#91;</span><span class="st0">'ok'</span><span class="br0">&#93;</span></code>は第1引数をそのまま返す関数で、<code class="javascript">self.<span class="me1">callback</span><span class="br0">&#91;</span><span class="st0">'ng'</span><span class="br0">&#93;</span></code>は第1引数をそのまま<code class="javascript"><span class="kw1">throw</span></code>する関数になっている。なので、以下の2つは結果的に同じ動きになりそう。</p>
<pre><code class="javascript"><span class="kw2">var</span> testDeferred = <span class="kw2">new</span> Deferred<span class="br0">&#40;</span><span class="br0">&#41;</span>;
testDeferred.<span class="me1">next</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">'asdf'</span><span class="br0">&#41;</span>; <span class="br0">&#125;</span><span class="br0">&#41;</span>;
testDeferred.<span class="me1">call</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</code></pre>
<pre><code class="javascript"><span class="kw2">var</span> testDeferred = <span class="kw2">new</span> Deferred<span class="br0">&#40;</span><span class="br0">&#41;</span>;
testDeferred._next = <span class="kw2">new</span> Deferred<span class="br0">&#40;</span><span class="br0">&#41;</span>;
testDeferred._next.<span class="me1">next</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">'asdf'</span><span class="br0">&#41;</span>; <span class="br0">&#125;</span><span class="br0">&#41;</span>;
testDeferred.<span class="me1">call</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</code></pre>
<p><code class="javascript">self.<span class="me1">callback</span><span class="br0">&#91;</span>okng<span class="br0">&#93;</span></code>の実行で<code class="javascript">Deferred</code>クラスのインスタンスが返されたり<code class="javascript"><span class="kw1">throw</span></code>されたりすると、<code class="javascript">self._next._fire</code>は実行されず、そのインスタンスが返される。ただし、そのインスタンスは<code class="javascript">_next</code>として<code class="javascript">self._next</code>の値を持つ。<code class="javascript">_fire</code>メソッドは、この返されたインスタンスの<code class="javascript">_fire</code>メソッドを実行する機能を持たない。</p>
<pre><code class="javascript"><span class="kw2">var</span> testDeferred = <span class="kw2">new</span> Deferred<span class="br0">&#40;</span><span class="br0">&#41;</span>;
testDeferred.<span class="me1">next</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">'asdf'</span><span class="br0">&#41;</span>;
  <span class="kw2">var</span> subDeferred = <span class="kw2">new</span> Deferred<span class="br0">&#40;</span><span class="br0">&#41;</span>;
  <span class="kw1">return</span> subDeferred.<span class="me1">next</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">'fdsa'</span><span class="br0">&#41;</span>; <span class="br0">&#125;</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">next</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">'asdffdsa'</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span><span class="br0">&#41;</span>;
testDeferred.<span class="me1">call</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</code></pre>
<p>上のようにすると<code class="javascript"><span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">'asdf'</span><span class="br0">&#41;</span>;</code>は実行されるが<code class="javascript"><span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">'fdsa'</span><span class="br0">&#41;</span>;</code>と<code class="javascript"><span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">'asdffdsa'</span><span class="br0">&#41;</span>;</code>は実行されない。</p>]]></description>
<category>Webメモ</category>
<comments>http://niku.suku.name/item/608</comments>
<pubDate>Tue, 22 Apr 2008 17:45:20 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/608</guid>
</item><item>
<title>o2onをGreasemonkeyから操作とか</title>
<link>http://niku.suku.name/item/606</link>
<description><![CDATA[<p>GreasemonkeyのGM_xmlhttpRequestなら<a href="http://o2on.sourceforge.jp/" title="o2on">o2on</a>にアクセスできる! と思ったですが、どうにも有効な利用法が思いつかず。</p>
<p>なんというか、bbs2chreaderのスキンをうだうだしたほうが、結果的に便利なものができるかもしれない。</p>
<p>とりあえず試してみたことをメモ。</p><h3><abbr title="Structured Query Language">SQL</abbr>を実行する/実行結果を取得する</h3>
<p>&quot;(o2on管理画面の<abbr title="Uniform Resource Locator">URL</abbr>)xml/sql&quot;に対してPOSTメソッドで<abbr title="Structured Query Language">SQL</abbr>を渡してやれば(変数名は&quot;sql&quot;)、その<abbr title="Structured Query Language">SQL</abbr>を実行できる。その後&quot;(o2on管理画面の<abbr title="Uniform Resource Locator">URL</abbr>)xml/sql&quot;をGETすれば、その<abbr title="Structured Query Language">SQL</abbr>の実行結果が得られる。POSTに対するレスポンスが帰ってきてからでないと結果は期待できない。</p>
<h4>例</h4>
<p>ママチャリスレの情報を取得</p>
<pre><code class="javascript"><span class="kw2">var</span> o2onAdminUrl = <span class="st0">'http://127.0.0.1:9999/'</span>;
<span class="kw2">var</span> oThreadInfo = <span class="br0">&#123;</span>
  domain: <span class="st0">'2ch.net'</span>,
  bbsname: <span class="st0">'news4vip'</span>,
  datname: <span class="st0">'1164641644.dat'</span>
<span class="br0">&#125;</span>;
&nbsp;
<span class="kw2">var</span> sql = <span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>oWhere<span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span class="kw2">var</span> result = <span class="st0">'SELECT * FROM dat'</span>, aWhere = <span class="br0">&#91;</span><span class="br0">&#93;</span>;
  <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> column <span class="kw1">in</span> oWhere<span class="br0">&#41;</span> <span class="br0">&#123;</span>
    aWhere.<span class="me1">push</span><span class="br0">&#40;</span>column + <span class="st0">' = &quot;'</span> + oWhere<span class="br0">&#91;</span>column<span class="br0">&#93;</span> + <span class="st0">'&quot;'</span><span class="br0">&#41;</span>;
  <span class="br0">&#125;</span>
  result += <span class="st0">' WHERE '</span> + aWhere.<span class="me1">join</span><span class="br0">&#40;</span><span class="st0">' AND '</span><span class="br0">&#41;</span>;
  <span class="kw1">return</span> result;
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#40;</span>oThreadInfo<span class="br0">&#41;</span>;
&nbsp;
GM_xmlhttpRequest<span class="br0">&#40;</span><span class="br0">&#123;</span>
  method: <span class="st0">'POST'</span>,
  url: o2onAdminUrl + <span class="st0">'xml/sql'</span>,
  headers: <span class="br0">&#123;</span>
    <span class="st0">'Content-Type'</span>: <span class="st0">'application/x-www-form-urlencoded'</span>
  <span class="br0">&#125;</span>,
  data: <span class="st0">'sql='</span> + encodeURIComponent<span class="br0">&#40;</span>sql<span class="br0">&#41;</span>,
  <span class="kw3">onload</span>: <span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    GM_xmlhttpRequest<span class="br0">&#40;</span><span class="br0">&#123;</span>
      method: <span class="st0">'GET'</span>,
      url: o2onAdminUrl + <span class="st0">'xml/sql'</span>,
      <span class="kw3">onload</span>: <span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>res<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        GM_log<span class="br0">&#40;</span>res.<span class="me1">responseText</span><span class="br0">&#41;</span>;
      <span class="br0">&#125;</span><span class="br0">&#41;</span>
    <span class="br0">&#125;</span><span class="br0">&#41;</span>;
  <span class="br0">&#125;</span><span class="br0">&#41;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</code></pre>
<h3>検索にスレッドを登録/登録解除/有効化/無効化</h3>
<p>&quot;(o2on管理画面の<abbr title="Uniform Resource Locator">URL</abbr>)xml/query&quot;にPOST。使用する変数は以下のとおり。</p>
<table><caption>検索クエリの操作に使用する変数</caption>
<thead><tr><th>名前</th><th>説明</th></tr></thead>
<tbody>
<tr><td>act</td><td>操作の種類。add(登録) / delete(削除) / activate(有効化) / deactivate (無効化) のいずれか</td></tr>
<tr><td>url</td><td>スレッドの<abbr title="Uniform Resource Locator">URL</abbr> (登録時のみ必要)</td></tr>
<tr><td>note</td><td>メモ (登録時のみ有効)</td></tr>
<tr><td>hash</td><td>スレッドのハッシュ (登録時には不要)</td></tr>
</tbody></table>
<h3>その他</h3>
<p>他にも多数の情報を&quot;(o2on管理画面の<abbr title="Uniform Resource Locator">URL</abbr>)xml/(なんとかかんとか)&quot;で取得できる。</p>]]></description>
<category>Webメモ</category>
<comments>http://niku.suku.name/item/606</comments>
<pubDate>Sat, 29 Mar 2008 22:53:22 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/606</guid>
</item><item>
<title>BE@2ch掲示板のBe番号から識別番号を算出する</title>
<link>http://niku.suku.name/item/605</link>
<description><![CDATA[<p>メモ。そもそもモノが実験段階にあるネタなので、あまり参考にはならなげ。あと&quot;ソースは2ちゃんねる&quot;。ところでアレはBe番号と呼ぶべきなのかBeIDと呼ぶべきなのか。</p><p><a href="http://qb5.2ch.net/test/read.cgi/operate/1149236696/936n" title="Be-2ちゃんねる　人柱募集中。。。Part5の936">Be-2ちゃんねる　人柱募集中。。。Part5の924</a> (現在はdat落ち) にあった、1つのBe番号から識別番号を算出し、さらに識別番号から存在しうるBe番号を列挙するperlのスクリプトは以下。perlはわからないけど、インデントはしてみた。</p>
<pre><code class="perl"><span class="co1">#! /usr/bin/perl</span>
&nbsp;
<span class="kw1">my</span> <span class="re0">$be</span> = <a href="http://perldoc.perl.org/functions/shift.html"><span class="kw3">shift</span></a>
  <span class="kw1">or</span> <a href="http://perldoc.perl.org/functions/die.html"><span class="kw3">die</span></a> <span class="st0">&quot;usage: $0 BE_NUMBER<span class="es0">\n</span>&quot;</span>;
<span class="kw1">my</span> <span class="re0">$x</span> = <a href="http://perldoc.perl.org/functions/int.html"><span class="kw3">int</span></a><span class="br0">&#40;</span><span class="re0">$be</span>/<span class="nu0">10</span><span class="br0">&#41;</span> % <span class="nu0">10</span>;
<span class="kw1">my</span> <span class="re0">$y</span> = <span class="re0">$be</span> % <span class="nu0">10</span>;
<a href="http://perldoc.perl.org/functions/die.html"><span class="kw3">die</span></a> <span class="st0">&quot;$0: illegal be-number: $be<span class="es0">\n</span>&quot;</span> <span class="kw1">if</span> <span class="re0">$x</span> &lt; <span class="nu0">2</span> || <span class="re0">$x</span> &gt; <span class="nu0">9</span> || <span class="re0">$y</span> &lt; <span class="nu0">2</span> || <span class="re0">$y</span> &gt; <span class="nu0">9</span>;
<span class="kw1">my</span> <span class="re0">$k</span> = <span class="re0">$x</span> * <span class="re0">$y</span> * <span class="nu0">3</span>;
<span class="kw1">my</span> <span class="re0">$n</span> = <a href="http://perldoc.perl.org/functions/int.html"><span class="kw3">int</span></a><span class="br0">&#40;</span><span class="re0">$be</span>/<span class="nu0">100</span><span class="br0">&#41;</span> + <span class="re0">$x</span> - <span class="re0">$y</span> - <span class="nu0">5</span>;
<a href="http://perldoc.perl.org/functions/die.html"><span class="kw3">die</span></a> <span class="st0">&quot;$0: illegal be-number: $be<span class="es0">\n</span>&quot;</span> <span class="kw1">if</span> <span class="re0">$n</span> % <span class="re0">$k</span> != <span class="nu0">0</span>;
<span class="kw1">my</span> <span class="re0">$id</span> = <span class="re0">$n</span> / <span class="re0">$k</span>;
<span class="kw1">my</span> <span class="re0">@list</span> = <span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="kw1">for</span> <span class="kw1">my</span> <span class="re0">$y</span> <span class="br0">&#40;</span><span class="nu0">2</span>..<span class="nu0">9</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span class="kw1">for</span> <span class="kw1">my</span> <span class="re0">$x</span> <span class="br0">&#40;</span><span class="nu0">2</span>..<span class="nu0">9</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="kw1">my</span> <span class="re0">$be</span> = <span class="br0">&#40;</span><span class="re0">$id</span> * <span class="nu0">3</span> * <span class="re0">$x</span> * <span class="re0">$y</span> - <span class="re0">$x</span> + <span class="re0">$y</span> + <span class="nu0">5</span><span class="br0">&#41;</span> * <span class="nu0">100</span> + <span class="re0">$x</span>*<span class="nu0">10</span> + <span class="re0">$y</span>;
    <a href="http://perldoc.perl.org/functions/push.html"><span class="kw3">push</span></a><span class="br0">&#40;</span><span class="re0">@list</span>, <span class="re0">$be</span><span class="br0">&#41;</span>;
  <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
<span class="kw1">for</span> <span class="kw1">my</span> <span class="re0">$be</span> <span class="br0">&#40;</span><a href="http://perldoc.perl.org/functions/sort.html"><span class="kw3">sort</span></a> <span class="br0">&#123;</span><span class="re0">$a</span>&lt;=&gt;<span class="re0">$b</span><span class="br0">&#125;</span> <span class="re0">@list</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <a href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="st0">&quot;http://be.2ch.net/test/p.php?i=$be<span class="es0">\n</span>&quot;</span>;
<span class="br0">&#125;</span></code></pre>
<p>bbs2chreaderで使いたいので、javascriptで識別番号を算出するところを書き出してみた。</p>
<pre><code class="javascript"><span class="kw2">function</span><span class="br0">&#40;</span>origBe<span class="br0">&#41;</span> <span class="br0">&#123;</span>
  <span class="kw2">var</span> be, x, y, k, n;
  <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">typeof</span> origBe == <span class="st0">'undefined'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="kw1">throw</span> <span class="kw2">new</span> Error<span class="br0">&#40;</span><span class="st0">'missing be-number'</span><span class="br0">&#41;</span>;
  <span class="br0">&#125;</span>
  be = parseInt<span class="br0">&#40;</span>origBe, <span class="nu0">10</span><span class="br0">&#41;</span>;
  <span class="kw1">if</span> <span class="br0">&#40;</span>!be<span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="kw1">throw</span> <span class="kw2">new</span> Error<span class="br0">&#40;</span><span class="st0">'illegal be-number: '</span> + origBe.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
  <span class="br0">&#125;</span>
  x = Math.<span class="me1">floor</span><span class="br0">&#40;</span>be / <span class="nu0">10</span><span class="br0">&#41;</span> % <span class="nu0">10</span>;
  y = be % <span class="nu0">10</span>;
  <span class="kw1">if</span> <span class="br0">&#40;</span>x &lt; <span class="nu0">2</span> || x &gt; <span class="nu0">9</span> || y &lt; <span class="nu0">2</span> || y &gt; <span class="nu0">9</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="kw1">throw</span> <span class="kw2">new</span> Error<span class="br0">&#40;</span><span class="st0">'illegal be-number: '</span> + origBe.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
  <span class="br0">&#125;</span>
  k = x * y * <span class="nu0">3</span>;
  n = Math.<span class="me1">floor</span><span class="br0">&#40;</span>be / <span class="nu0">100</span><span class="br0">&#41;</span> + x - y - <span class="nu0">5</span>;
  <span class="kw1">if</span> <span class="br0">&#40;</span>n % k<span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="kw1">throw</span> <span class="kw2">new</span> Error<span class="br0">&#40;</span><span class="st0">'illegal be-number: '</span> + origBe.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
  <span class="br0">&#125;</span>
  <span class="kw1">return</span> n / k;
<span class="br0">&#125;</span></code></pre>]]></description>
<category>Webメモ</category>
<comments>http://niku.suku.name/item/605</comments>
<pubDate>Wed, 12 Mar 2008 08:03:00 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/605</guid>
</item><item>
<title>NP_YUIImporter v0.1.0、他</title>
<link>http://niku.suku.name/item/604</link>
<description><![CDATA[<p><a class="plug_nkautolinkbyitemtitle" title="Read item : NP_YUIImporter" href="http://niku.suku.name/item/602">NP_YUIImporter</a>の問題をとりあえず解決してみた、つもりです。v0.1.0。 &rarr; <a class="plug_nkautolinkbyitemtitle" title="Read item : NP_YUIImporter" href="http://niku.suku.name/item/602">NP_YUIImporter</a>。</p>
<p>で、手始めにクイック・メニューをMenuBarにしてみました。 &rarr; <a class="plug_nkautolinkbyitemtitle" title="Read item : NP_YUIQuickMenuMenuBar" href="http://niku.suku.name/item/603">NP_YUIQuickMenuMenuBar</a>。</p>
<p>あと<a class="plug_nkautolinkbyitemtitle" title="Read item : NP_ResetAdminCSS" href="http://niku.suku.name/item/309">NP_ResetAdminCSS</a>を更新。書き直しただけで特に差異なし。同梱の<abbr title="Cascading Style Sheets">CSS</abbr>は新しくしましたが、Fx 2.0とIE7でしかチェックしてないです。<abbr title="Internet Explorer 6">IE6</abbr>だとデザインが崩れるだろうという確信があります。</p>
<p>Yahoo! UI、面白いです。スキンでまで使う気にはまだなりませんが、管理画面ではいい感じ。</p>]]></description>
<category>Nucleusメモ</category>
<comments>http://niku.suku.name/item/604</comments>
<pubDate>Tue, 11 Mar 2008 01:41:13 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/604</guid>
</item><item>
<title>YUIコンポーネントの読み込み順とか</title>
<link>http://niku.suku.name/item/601</link>
<description><![CDATA[<p>メモ。</p>
<p>&quot;<a class="plug_nkautolinkbyitemtitle" title="Read item : Yahoo! UIを管理画面で使うとか" href="http://niku.suku.name/item/600">Yahoo! UIを管理画面で使うとか</a>&quot;で書いた<a class="plug_nkautolinkbyitemtitle" title="Read item : NP_YUIImporter" href="http://niku.suku.name/item/602">NP_YUIImporter</a>には問題があって上手く動かないことが発覚。</p>
<h3>例えば</h3>
<p>containerコンポーネントでパネルを作るとき、ドラッグ・ドロップで移動できるようにする機能を持たせたい場合、containerコンポーネント<strong>より前に</strong>dragdropコンポーネントを読み込ませる必要があります。もちろん、移動が不要な場合はdragdropコンポーネントも不要です。</p>
<p>現バージョンの<a class="plug_nkautolinkbyitemtitle" title="Read item : NP_YUIImporter" href="http://niku.suku.name/item/602">NP_YUIImporter</a>を使って、</p>
<ol>
<li>dragdropなしで、containerを使うプラグイン</li>
<li>dragdropも、containerも使うプラグイン</li>
</ol>
<p>の順で<a class="plug_nkautolinkbyitemtitle" title="Read item : NP_YUIImporter" href="http://niku.suku.name/item/602">NP_YUIImporter</a>のimportメソッドが呼ばれると、dragdropコンポーネントの読み込みはcontainerコンポーネントの読み込み<strong>より後に</strong>なってしまうので、パネルの移動は不可能になってしまいます。</p><h3>結局</h3>
<p>で、これを解消するためには、すぐにscriptタグを出力せず、どのYUIコンポーネントを読み込むかがすべて出揃ってから、何らかの形で整えられた順序でscriptタグを出力するようにしないといけないわけで、どう考えても<a class="plug_nkautolinkbyitemtitle" title="Read item : NP_YUIImporter" href="http://niku.suku.name/item/602">NP_YUIImporter</a>の仕様変更は必須。めんどくさいなあ。</p>
<h4>読み込み順の制御方法・案</h4>
<h5>YUI Loader Utilityを使う</h5>
<p>YUI側で用意されているYUI Loader Utility ( <a href="http://developer.yahoo.com/yui/yuiloader/" title="Yahoo! UI Library: YUI Loader Utility">Yahoo! UI Library: YUI Loader Utility</a> ) を使う。処理を丸投げできるので<a class="plug_nkautolinkbyitemtitle" title="Read item : NP_YUIImporter" href="http://niku.suku.name/item/602">NP_YUIImporter</a>側では簡単、に見えてonSuccessイベントの処理とか面倒。</p>
<h5>固定する</h5>
<p>あらかじめ、なるべくトラブルがおきない読み込み順を調べて、ハードコーディングしてしまう。後はそれにそって各コンポーネントを読み込む。Loader程じゃないけどちょっと気持ち悪いかも。</p>
<h5>配列で受け取ってソートする</h5>
<p>各プラグインごとに、求められる読み込み順を配列として受け取って、なるべく矛盾しないように並べ替える。上手く行くかわからない。</p>]]></description>
<category>Nucleusメモ</category>
<comments>http://niku.suku.name/item/601</comments>
<pubDate>Tue, 4 Mar 2008 03:59:00 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/601</guid>
</item><item>
<title>Yahoo! UIを管理画面で使うとか</title>
<link>http://niku.suku.name/item/600</link>
<description><![CDATA[<h3>前置</h3>
<p>Yahoo! UI ( <a href="http://developer.yahoo.com/yui/" title="The Yahoo! User Interface Library (YUI)">The Yahoo! User Interface Library (YUI)</a> ) の2.5.0が出てたので格闘中。手も足も出ません。</p>
<h3>副産物</h3>
<p>で、とりあえずYUIのライブラリを重複しないように読み込むためのプラグイン、<a class="plug_nkautolinkbyitemtitle" title="Read item : NP_YUIImporter" href="http://niku.suku.name/item/602">NP_YUIImporter</a>。</p>
<p><del><a href="http://niku.suku.name/media/plugins/NP_YUIImporter0.0.0.zip">NP_YUIImporter v0.0.0</a></del>このバージョンは最新のものではありません。 &quot;<a class="plug_nkautolinkbyitemtitle" title="Read item : NP_YUIImporter" href="http://niku.suku.name/item/602">NP_YUIImporter</a>&quot;を参照してください。</p><p>使い方はこんな感じ。</p>
<pre><code class="php">  <span class="kw2">function</span> getPluginDep<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="kw1">return</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">'&lt;a class=&quot;plug_nkautolinkbyitemtitle&quot; title=&quot;Read item : NP_YUIImporter&quot; href=&quot;http://niku.suku.name/item/602&quot;&gt;NP_YUIImporter&lt;/a&gt;'</span><span class="br0">&#41;</span>;
  <span class="br0">&#125;</span>
&nbsp;
  <span class="kw2">function</span> event_AdminPrePageHead<span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="re0">$manager</span> =&amp; MANAGER::<span class="me2">instance</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
    <span class="re0">$objYUIImporter</span> =&amp; <span class="re0">$manager</span>-&gt;<span class="me1">getPlugin</span><span class="br0">&#40;</span><span class="st0">'&lt;a class=&quot;plug_nkautolinkbyitemtitle&quot; title=&quot;Read item : NP_YUIImporter&quot; href=&quot;http://niku.suku.name/item/602&quot;&gt;NP_YUIImporter&lt;/a&gt;'</span><span class="br0">&#41;</span>;
    <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">'extrahead'</span><span class="br0">&#93;</span> .= <span class="re0">$objYUIImporter</span>-&gt;<span class="me1">import</span><span class="br0">&#40;</span><span class="st0">'assets/skins/sam/skin.css'</span><span class="br0">&#41;</span>;
&nbsp;
    <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">'extrahead'</span><span class="br0">&#93;</span> .= <span class="re0">$objYUIImporter</span>-&gt;<span class="me1">import</span><span class="br0">&#40;</span><span class="st0">'yahoo/yahoo-min.js'</span><span class="br0">&#41;</span>;
    <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">'extrahead'</span><span class="br0">&#93;</span> .= <span class="re0">$objYUIImporter</span>-&gt;<span class="me1">import</span><span class="br0">&#40;</span><span class="st0">'dom/dom-min.js'</span><span class="br0">&#41;</span>;
  <span class="br0">&#125;</span></code></pre>
<p>importメソッドはライブラリを読み込むための<abbr title="eXtensible HyperText Markup Language">XHTML</abbr>タグを返します。拡張子が.cssならlink要素、そうでないならscript要素。ただしタグが返るのはライブラリごとに最初の1回のみで、2回目以降は空文字列が返されるという、至極単純な仕組みです。</p>
<p>YUIはYahoo!でホスティングもされてるので、このプラグインを通すことで同じサーバのライブラリを使うか、ホスティングされているものを使うか切り替えることができます。</p>
<h3>オチ</h3>
<p>Rich Text Editorでアイテムを編集するプラグインに取り掛かってみましたが、&lt;%image%&gt;などの処理でいい方法が浮かばず断念。あとRich Text Editorの<abbr title="Cascading Style Sheets">CSS</abbr>とNucleus管理画面の<abbr title="Cascading Style Sheets">CSS</abbr>が衝突してデザインが狂うのはどうにも。既存のモノに付け足して使うようなライブラリではない、ということなんでしょうかね。それとも何か上手い方法があるんでしょうか。</p>]]></description>
<category>Nucleusメモ</category>
<comments>http://niku.suku.name/item/600</comments>
<pubDate>Tue, 26 Feb 2008 17:28:47 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/600</guid>
</item><item>
<title>NP_Compressor から NP_PHPSpeedy に</title>
<link>http://niku.suku.name/item/599</link>
<description><![CDATA[<p>&quot;<a class="plug_nkautolinkbyitemtitle" title="Read item : サイトのロードが5倍速くなると噂の" href="http://niku.suku.name/item/597">サイトのロードが5倍速くなると噂の</a>&quot;で作ったNP_Compressorを管理画面にも使用できるようにして公開しようかと思ったら、名前が変わって ( <a href="http://aciddrop.com/php-speedy/" title="PHP Speedy | Aciddrop.com"><abbr title="Pre-Hypertext Processing">PHP</abbr> Speedy | Aciddrop.com</a> ) バージョンアップしてたので改めて対応。</p>
<p>オプションの設定が気持ち悪くなってたので変な方法を使って修正してます。将来的な仕様変更には耐えられそうにないです。相性問題はそのまま。</p>
<p>&raquo; <a class="plug_nkautolinkbyitemtitle" title="Read item : NP_PHPSpeedy" href="http://niku.suku.name/item/598">NP_PHPSpeedy</a>。</p>]]></description>
<category>Nucleusメモ</category>
<comments>http://niku.suku.name/item/599</comments>
<pubDate>Mon, 4 Feb 2008 03:34:42 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/599</guid>
</item><item>
<title>サイトのロードが5倍速くなると噂の</title>
<link>http://niku.suku.name/item/597</link>
<description><![CDATA[<dl><dt>参照</dt><dd><a href="http://aciddrop.com/2008/01/21/boost-your-website-load-time-with-3-lines-of-code/" title="Improve website load time by 500% with 3 lines of code | Aciddrop.com">Improve website load time by 500% with 3 lines of code | Aciddrop.com</a></dd></dl>
<p>というかこうなりました&rarr; <a href="http://niku.suku.name/media/plugins/NP_Compressor0.0.0.zip">NP_Compressor v0.0.0</a> (0.3.1対応版) 。<del>まだ叩き台なので専用ページは作りません。</del><ins>名前を変えて専用ページを作りました。→ <a class="plug_nkautolinkbyitemtitle" title="Read item : NP_PHPSpeedy" href="http://niku.suku.name/item/598">NP_PHPSpeedy</a></ins></p>
<p>compressorディレクトリ内に上のリンクから落としてきたclass.compressor.phpとlibsディレクトリを突っ込むことで動くのではないかと。compressorライブラリの仕様で、少なくともPHP4.3以上でないと動かないはず(もっと厳しい条件があるかも)。あと&quot;<a class="plug_nkautolinkbyitemtitle" title="Read item : もう一度メモ 出力バッファリングプラグインをどうするか" href="http://niku.suku.name/item/376">もう一度メモ 出力バッファリングプラグインをどうするか</a>&quot;で書いたような出力バッファリングに関するプラグイン同士の相性問題があります。</p>
<p>オプションが複雑ですが、そこはカンでなんとか。</p><h3>内部的な問題</h3>
<p>v0.3では一箇所引っかかったところがあって、<abbr title="HyperText Markup Language">HTML</abbr>をgzip圧縮する場合、コンストラクタでオプションを設定する部分、pageに関する設定を最後にしないとcssとjavascriptの処理が行われません。</p>
<pre><code class="php"><span class="coMULTI">/**
 * これならうまくいく
 */</span>
<span class="re0">$compressor_a</span> = <span class="kw2">new</span> compressor<span class="br0">&#40;</span><span class="st0">'css,javascript,page'</span><span class="br0">&#41;</span>;
&nbsp;
<span class="coMULTI">/**
 * これはだめ
 */</span>
<span class="re0">$compressor_b</span> = <span class="kw2">new</span> compressor<span class="br0">&#40;</span><span class="st0">'page,css,javascript'</span><span class="br0">&#41;</span>;</code></pre>]]></description>
<category>Nucleusメモ</category>
<comments>http://niku.suku.name/item/597</comments>
<pubDate>Fri, 25 Jan 2008 22:43:00 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/597</guid>
</item><item>
<title>EUC用の言語ファイル作るのめんどくさい</title>
<link>http://niku.suku.name/item/596</link>
<description><![CDATA[<p><abbr title="UCS Transformation Format">UTF</abbr>の作ってから変換すりゃいいだけの話なんですが。</p>
<p>言語ファイルから読み込まれるのを<abbr title="UCS Transformation Format">UTF</abbr>だと限定して、そこからプラグイン内で変換するとか。具体的に書くと、プラグイン用の言語ファイル(japanese-euc.php)に</p>
<pre><code class="php"><span class="kw2">&lt;?php</span> <span class="kw1">include_once</span><span class="br0">&#40;</span><span class="st0">'japanese-utf8.php'</span><span class="br0">&#41;</span>; <span class="kw2">?&gt;</span></code></pre>
<p>とだけ書いておいて、そのあとmb_convert_encodingする。</p>
<p>素直に<abbr title="UCS Transformation Format">UTF</abbr>から変換して作ることにします。</p>]]></description>
<category>Nucleusメモ</category>
<comments>http://niku.suku.name/item/596</comments>
<pubDate>Fri, 18 Jan 2008 23:31:44 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/596</guid>
</item><item>
<title>いくつかメモ (2008/01/05)</title>
<link>http://niku.suku.name/item/595</link>
<description><![CDATA[<h3>Nucleus変数のパースについて</h3>
<h4>変数名、大文字小文字の区別</h4>
<p>通常のNucleus変数については大文字小文字を区別しない(&quot;<code class="nucleus">&lt;%<abbr title="Weblog">Blog</abbr>(...)%&gt;</code>&quot;と&quot;<code class="nucleus">&lt;%blog(...)%&gt;</code>&quot;はまったく同じ動作)。プラグインによるNucleus変数には区別がある(NP_Exampleというプラグインのスキン変数は&quot;<code class="nucleus">&lt;%Example%&gt;</code>&quot;であって&quot;<code class="nucleus">&lt;%example%&gt;</code>&quot;だと失敗する)。</p>
<h4>パラメータ前後の空白</h4>
<p>各パラメータは<code class="php"><a href="http://www.php.net/trim"><span class="kw3">trim</span></a></code>された後にプラグインに渡される。なので、&quot;<code class="nucleus">&lt;%Example(test)%&gt;</code>&quot;と&quot;<code class="nucleus">&lt;%Example( test )%&gt;</code>&quot;は同じ動作。</p><h3>PHP4のサポートが終わった</h3>
<p><abbr title="Pre-Hypertext Processing">PHP</abbr> 4.4.8が出てPHP4は終了?</p>
<p>Nucleus側でいつまでPHP4の対応をするのかは気になりますが、マニュアルにPHP4.0.6以降が必要って書いてあるんだから、それより前のバージョンに対応するためのコードはないほうがすっきりするんじゃないかと思います。<code class="php">parse_text</code>の<code class="php"><a href="http://www.php.net/eval"><span class="kw3">eval</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span></code>とか。</p>]]></description>
<category>Nucleusメモ</category>
<comments>http://niku.suku.name/item/595</comments>
<pubDate>Sat, 5 Jan 2008 17:55:04 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/595</guid>
</item><item>
<title>NP_Container v0.4が出てた</title>
<link>http://niku.suku.name/item/594</link>
<description><![CDATA[<p>元日から粘着してみます。</p>
<dl>
<dt>ネタ元</dt>
<dd><a href="http://nucleus.datoka.jp/?itemid=981" title="NP_Container v0.4 - Nucleusだとか">NP_Container v0.4 - Nucleusだとか</a></dd>
<dd><a href="http://japan.nucleuscms.org/bb/viewtopic.php?p=21355" title="Nucleus(JP)フォーラム :: トピックを表示 - NP_Container">Nucleus(JP)フォーラム :: トピックを表示 - NP_Container</a></dd>
</dl>
<p>この記事内での用語については&quot;<a class="plug_nkautolinkbyitemtitle" title="Read item : NP_Containerについて私的メモ" href="http://niku.suku.name/item/543">NP_Containerについて私的メモ</a>&quot;を参照。</p>
<h3>v0.3からの変更点</h3>
<ul>
<li>定義に使う記法が緩くなった<ul>
<li>パーツ定義時にコメントが書けるようになった</li>
</ul></li>
<li><code class="nucleus">&lt;%parsedinclude()%&gt;</code>、NP_IncludeSpecialに対応<ul>
<li><a class="plug_nkautolinkbyitemtitle" title="Read item : PreSkinParse" href="http://niku.suku.name/item/50">PreSkinParse</a>イベントでコンテナ定義を行う前に、これらの変数による読み込みを先に実行してしまう(読み込み対象の内容を当該部分に展開する)ことで実現している様子。</li>
</ul></li>
<li>NP_ContainerToTemplateのマージ</li>
<li>複数箇所で同一コンテナを定義した場合の不具合解消</li>
</ul>
<p>こんなカンジでしょうか</p><h3>オマケ</h3>
<p>ちょっと前に作ったプラグイン、NP_ContainerToForm。</p>
<p>&rarr; <a href="http://niku.suku.name/media/plugins/NP_ContainerToForm0.0.0.zip">NP_ContainerToForm v0.0.0</a>。</p>
<p>formsディレクトリにある.templateファイルの代わりにコンテナを使用してフォーム類を表示するプラグイン。いろいろ未テスト。</p>
<p>使用例はこんな。</p>
<pre><code class="nucleus">&lt;%Container(begin,ContainerToForm)%&gt;
&lt;!--PART name="nucleusbutton" Nucleusボタン --&gt;
&lt;img id="nucleusbutton" src="&lt;%formdata(imgurl)"  width="&lt;%formdata(imgwidth)%&gt;" height="&lt;%formdata(imgheight)%&gt;" /&gt;
&lt;!--/PART (nucleusbutton)--&gt;
&lt;%Container(end)%&gt;
&lt;%ContainerToForm(nucleusbutton)%&gt;</code></pre>
<h4>変数の引数</h4>
<p>最初の引数は表示するフォーム類のタイプ。以下のいずれか。末尾の&quot;form&quot;は省略可能。</p>
<ul>
<li>additemform</li>
<li>commentform</li>
<li>loginform</li>
<li>membermailform</li>
<li>nucleusbutton</li>
<li>searchform</li>
</ul>
<p>二番目の引数は使用するコンテナ。使用されるパーツ名はformsディレクトリ内の対応する.templateファイルの名前と同一(例 : &quot;commentform-loggedin&quot;)。省略時は&quot;ContainerToForm&quot;と名づけられたコンテナを探す。</p>
<p>三番目以降の引数はもともとの変数で使用される引数と同様。最初の引数に&quot;nucleusbutton&quot;を指定した場合、画像<abbr title="Uniform Resource Locator">URL</abbr>や縦横のサイズを指定できる。</p>]]></description>
<category>Nucleusメモ</category>
<comments>http://niku.suku.name/item/594</comments>
<pubDate>Tue, 1 Jan 2008 13:14:22 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/594</guid>
</item><item>
<title>コアで文字セットの情報をどうにかして欲しかったり</title>
<link>http://niku.suku.name/item/593</link>
<description><![CDATA[<p>同じ日本語なのに<code class="php">getLanguageName<span class="br0">&#40;</span><span class="br0">&#41;</span></code> (<code class="php"><span class="re0">$CONF</span><span class="br0">&#91;</span><span class="st0">'Language'</span><span class="br0">&#93;</span></code>) の値がjapanese-eucとjapanese-utfに分かれてるのは気持ち悪いなあ……。本家のほうで対応してくれないものかな。</p>
<p>_CHARSETを定義しているのが言語ファイル内で、その言語ファイルのファイル名に文字セット情報が含まれているという不思議。<code class="php"><span class="re0">$CONF</span><span class="br0">&#91;</span><span class="st0">'Charset'</span><span class="br0">&#93;</span></code>を作ってしまうのが一番いいと思うけど、英語力がなくて説明できず。</p>]]></description>
<category>Nucleusメモ</category>
<comments>http://niku.suku.name/item/593</comments>
<pubDate>Fri, 28 Dec 2007 04:04:40 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/593</guid>
</item><item>
<title>rel-TagとNucleusについて</title>
<link>http://niku.suku.name/item/592</link>
<description><![CDATA[<p>Nucleusとmicroformatsのrel-Tag、およびそれを使用するhAtomとか何とか。このサイトの設定は今のところ間違えてます。</p>
<p>Nucleus標準そのままでは、hAtomを使ってカテゴリーを表現することができません。</p>
<dl><dt>ネタ元</dt><dd><a href="http://www.add-info.com/mt/archives/001293.php" title="Stolen Moments: rel-tag を利用する場合のリンク先について">Stolen Moments: rel-tag を利用する場合のリンク先について</a></dd></dl><p>rel-Tagを使う場合、リンクの<abbr title="Uniform Resource Locator">URL</abbr>で何のタグかを示します。仕様書では以下のように決まってます。</p>
<blockquote cite="http://microformats.org/wiki/rel-tag-ja" title="rel-tag-ja - Microformats"><p>タグは<abbr title="Uniform Resource Identifier">URI</abbr>の中に分かりやすい形で埋め込まれています、そのため<abbr title="Uniform Resource Identifier">URI</abbr>からタグを機械的に抽出することが比較的容易です。具体的に説明すると、タグは<abbr title="Uniform Resource Identifier">URI</abbr>パスの最後にある単語（一番後ろの&quot;/&quot;より後の文字列）となります。</p>
</blockquote>
<p>なので、例えば&quot;Nucleus&quot;というタグを使いたい場合、リンクの<abbr title="Uniform Resource Locator">URL</abbr>は&quot;http://example.com/tags/Nucleus&quot;とか、&quot;http://example.com/category/Nucleus&quot;とかにする必要が。</p>
<p>Nucleus標準ではFancyURLにした場合でも<abbr title="Uniform Resource Locator">URL</abbr>に登場するのは数字(カテゴリー<abbr title="Identification">ID</abbr>)なのでこのような指定はできません。FancyURLにしなかった場合、カテゴリーに関する情報はクエリ部分に収められることになるので、この場合も無理。</p>
<p>FancyURLの場合はGenerateURLイベントが使えるのでまだ希望はありますが、そうでない場合は正直絶望的かも(カテゴリーの代わりにブログを使うとかならまだしも)。</p>]]></description>
<category>Nucleusメモ</category>
<comments>http://niku.suku.name/item/592</comments>
<pubDate>Fri, 28 Dec 2007 01:15:53 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/592</guid>
</item><item>
<title>Greasemonkeyでブログを更新</title>
<link>http://niku.suku.name/item/591</link>
<description><![CDATA[<p>ブログを更新するスクリプトというか。選択範囲を取得して<abbr title="eXtensible Markup Language">XML</abbr>-<abbr title="Remote Procedure Call">RPC</abbr>経由でブログにエントリーを追加するだけのスクリプト。</p>
<p><a href="http://niku.suku.name/media/greasemonkey/easyScrapper.user.js">easyScrapper.user.js</a>。</p>
<p>unsafeWindow使ったりとか、下手すればプレーンテキストでパスワードを保存したりするので、たたき台以外の用途にはオススメできません。あとE4X使ってるのでFirefoxでしか動かない。</p>
<p>使い方は適当にインストール後、Greasemonkeyのメニューから&quot;easyScrapper - Setting&quot;を選択。<abbr title="Application Programming Interface">API</abbr>の<abbr title="Uniform Resource Locator">URL</abbr>、ブログの<abbr title="Identification">ID</abbr>、ユーザー名を入力。他に任意設定の項目で認証に使うパスワード、ショートカットキー、アクセスキーの設定ができる。パスワードを入力しなかった場合投稿時点で毎回入力が必要。一度設定を行っている場合、その設定への変更を反映させるにはリロードが必要。</p>
<p>設定が行われれば&quot;easyScrapper - Post&quot;のメニューができるので、ページの好きな範囲を選択してそのコマンドを使えばブログに情報が送信される。</p>
<p>metaWeblog.newPostを使用。拡張はmt_allow_comments(1固定)のみ。publish設定は公開固定。カテゴリーの選択もできない。</p><p>以下メモ。</p>
<p>エラーのときは<code class="javascript"><span class="kw3">alert</span><span class="br0">&#40;</span><span class="br0">&#41;</span></code>を使って警告画面を出してます。で、成功したときにも&quot;成功した！&quot;って反応を返すべきなのですが、その方法がいまいち思いつきません。何のエラーも起きてないのに<code class="javascript"><span class="kw3">alert</span><span class="br0">&#40;</span><span class="br0">&#41;</span></code>ってのも変。Firefoxはステータスバーの変更がデフォルトで不許可になってたりするし。ただそれだけのために<abbr title="Dynamic HyperText Markup Language">DHTML</abbr>をいじるのも面倒……。</p>]]></description>
<category>Webメモ</category>
<comments>http://niku.suku.name/item/591</comments>
<pubDate>Wed, 26 Dec 2007 02:28:02 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/591</guid>
</item><item>
<title>XML-RPC周りが気持ち悪いというか</title>
<link>http://niku.suku.name/item/582</link>
<description><![CDATA[<h3>おおよそ</h3>
<p>Nucleusは標準で4種類の<abbr title="eXtensible Markup Language">XML</abbr>-<abbr title="Remote Procedure Call">RPC</abbr>インターフェイスをサポートしていて、それらは以下のとおり。</p>
<ul>
<li>&quot;blogger.&quot;で始まるBlogger <abbr title="Application Programming Interface">API</abbr></li>
<li>&quot;metaWeblog.&quot;で始まるmetaWeblog <abbr title="Application Programming Interface">API</abbr></li>
<li>&quot;mt.&quot;で始まるMovable Type <abbr title="Application Programming Interface">API</abbr></li>
<li>&quot;nucleus.&quot;で始まるNucleus <abbr title="Application Programming Interface">API</abbr> (deprecatedでマニュアルにも書いてない)</li>
</ul><p>で、(すでに非推奨であるNucleus <abbr title="Application Programming Interface">API</abbr>は放っておくとして)アイテム追加機能を提供するBlogger <abbr title="Application Programming Interface">API</abbr>とmetaWeblog <abbr title="Application Programming Interface">API</abbr>について、アイテムのコメントを許可するか否か(closedでないのか、あるいはclosedなのか)決定する条件が微妙に食い違ってる気が。</p>
<p>Blogger <abbr title="Application Programming Interface">API</abbr>はコメントを許可する/許可しないという設定項目を持たない。Nucleusではこれを使ってアイテムを投稿した場合にはコメントは許可されることになる(実際にはブログの設定に依存)。</p>
<p>metaWeblog <abbr title="Application Programming Interface">API</abbr>ではMovable Typeで実装された拡張&quot;mt_allow_comments&quot;を使ってこの設定ができる。Nucleusではこの値を省略したとき(というか拡張を使用しなかったとき)にアイテムがclosedになってしまう。</p>
<p><abbr title="Application Programming Interface">API</abbr>の仕様的に間違ってるわけではなさそう(未確認)だし、バグというわけでもないんですが、要望の形でFlySprayにでも投げておこうかと思う次第。</p>
<h3>変更案</h3>
<p>手元の3.3 日本語<abbr title="Extended UNIX Code">EUC</abbr>版のパッチ(未検証)。&quot;mt_allow_comments&quot;が未指定の場合に、closedが指定されなかったとしてアイテムを作成するようにしたつもりのもの。</p>
<pre><code class="patch">56c56,61
&lt; 		$comments = (int) _getStructVal($struct, 'mt_allow_comments') ? 0 : 1;
---
&gt; 		$comments = $struct-&gt;structmem('mt_allow_comments');
&gt; 		if ($comments) {
&gt; 			$closed = (int) _getStructVal($struct, 'mt_allow_comments') ? 0 : 1;
&gt; 		} else {
&gt; 			$closed = 0;
&gt; 		}
61c66
&lt; 		$res = _addItem($blogid, $username, $password, $title, $content, $more, $publish, $comments, $category);
---
&gt; 		$res = _addItem($blogid, $username, $password, $title, $content, $more, $publish, $closed, $category);</code></pre>
<h3>追記</h3>
<h4>mt_allow_comments = 2 ?</h4>
<p><a href="http://trac.wordpress.org/ticket/5366" title="#5366 (XMLRPC interface misinterprets mt_allow_comments value) - WordPress Trac - Trac">#5366 (XMLRPC interface misinterprets mt_allow_comments value) - WordPress Trac - Trac</a>。</p>
<p>Boolean型じゃなかったのか。</p>
<h5>この場合の変更案</h5>
<p>上記の参照先に依れば、mt_allow_commentsの値とコメントの表示・投稿の可否についてはこんな感じらしい(?)。</p>
<table>
<caption>metaWeblog.newPostにおけるmt_allow_commentsの値とコメントの表示・投稿の可否の対応</caption>
<thead><tr><th>mt_allow_commentsの値</th><th>過去のコメントの閲覧</th><th>新規コメントの追加</th></tr></thead>
<tbody>
<tr><th>0</th><td>不可</td><td>不可</td></tr>
<tr><th>1</th><td>可</td><td>可</td></tr>
<tr><th>2</th><td>可</td><td>不可</td></tr>
</tbody>
</table>
<p>Nucleusでは0と2の状態の差がアイテムに設定できないので、0と2を同様にclosed設定を行う指定だと解釈すべきだと思う。</p>
<p>以下のやつは&quot;mt_allow_commentsが指定されていて、なおかつその値が1以外ならclosed&quot;なパターン、のつもり。上の例に加えてeditPostの変更を加えている。</p>
<pre><code class="patch">56c56,61
&lt; 		$comments = (int) _getStructVal($struct, 'mt_allow_comments') ? 0 : 1;
---
&gt; 		$comments = $struct-&gt;structmem('mt_allow_comments');
&gt; 		if ($comments) {
&gt; 			$closed = (intval(_getStructVal($struct, 'mt_allow_comments')) == 1) ? 0 : 1;
&gt; 		} else {
&gt; 			$closed = 0;
&gt; 		}
61c66
&lt; 		$res = _addItem($blogid, $username, $password, $title, $content, $more, $publish, $comments, $category);
---
&gt; 		$res = _addItem($blogid, $username, $password, $title, $content, $more, $publish, $closed, $category);
190c195
&lt; 			$comments = (int) _getStructVal($struct, 'mt_allow_comments') ? 0 : 1;
---
&gt; 			$closed = (intval(_getStructVal($struct, 'mt_allow_comments')) == 1) ? 0 : 1;
192c197
&lt; 			$comments = $old['closed'];
---
&gt; 			$closed = $old['closed'];
195c200
&lt; 		$res = _edititem($itemid, $username, $password, $catid, $title, $content, $more, $wasdraft, $publish, $comments);
---
&gt; 		$res = _edititem($itemid, $username, $password, $catid, $title, $content, $more, $wasdraft, $publish, $closed);</code></pre>
<h4>海外フォーラム参照</h4>
<p><a href="http://forum.nucleuscms.org/viewtopic.php?t=10146" title="Nucleus Support :: View topic - Posting via XML-RPC disables comments">Nucleus Support :: View topic - Posting via <abbr title="eXtensible Markup Language">XML</abbr>-<abbr title="Remote Procedure Call">RPC</abbr> disables comments</a>。</p>
<p>簡単な直し方。closedにしない人に。</p>]]></description>
<category>Nucleusメモ</category>
<comments>http://niku.suku.name/item/582</comments>
<pubDate>Tue, 18 Dec 2007 17:03:45 +0900</pubDate>
<guid isPermaLink="true">http://niku.suku.name/item/582</guid>
</item>
</channel>
</rss>