Nucleus アーカイブをリスト表示 + NP_ListArticlesByNameプリフィックス対応


Nucleusでもアーカイブのリスト表示

wordPressでできたんだから、Nucleusでもアーカイブをリストで表示したい。

プラグインを探しにいこう。
プラグイン一覧(機能カテゴリー別)iには無いらしい。本家にいってみる。
「プラグイン・カテゴリ別」の中にanandさんが作った
NP_ListArticlesByName.php
   A plugin which will allow you to list recent articles by name.
があった。
フォーラムに置いてあると書いてある。
フォーラムにはphpのコードと説明が載っている。「(コード)をコピーして、『NP_ListArticlesByName.php』という名前でセーブしろ」と書いてあった。
早速その通りにしてファイル「NP_ListArticlesByName.php」を作る。

ftpで nucleus/plaginにNP_ListArticlesByName.phpアップロードして、[サイト管理]>[プラグイン管理]で「プラグインのインストール」をすると、エラーがでた。
Parse error: syntax error, unexpected '"', expecting ',' or ';' in /home/nucleususer/www/nucleus/plugins/NP_ListArticlesByName.php on line 40

40: echo "<a href=¥"".$itemlink."¥">".$row['title']."</a>";
UTFで保存したので、¥がだめそう。
40: echo '<a href="'.$itemlink.'">'.$row['title'].'</a>';
に変更し、他の場所も同じように直す。
「プラグインの管理」ページを再読み込みすると、「List articles by name」のプラグインが増えた。
ふえた

スキンの書き換え

サイドバーにArchiveのタイトルを表示したい。
「NP_ListArticlesByName」はスキン変数だから、スキンにいれるんだろう。
[プラグイン]の[スキンファイル]で、今使っているスキン grey_gradient の sidebar.incにコードを挿入してみる。

作者のanandは挿入するコードを、
  <%plugin(ListArticlesByName(50))%>...(50アイテム表示なら)
と書いていたが、あとで Trentが
  <%ListArticlesByName(50)%>
がいいと書いていた。Trentのコードを使うことにする。

「ファイルの編集 sidebar.inc」でコードを見るけど、Navigationという場所が沢山あってどこにいれたらいいか迷ってしまう。
<!-- search: navigation -->
<%if(skintype,search)%>
<dd><a href="<%todaylink%>" title="Today's entry">Today</a></dd>
<dd><a href="<%archivelink%>" title="Archives">Archives</a></dd>
<%endif%>

<dd><%ListArticlesByName(50)%></dd>//ここに入れてみる。

<!-- admin link, only visible if logged in -->
<%if(loggedin)%>
<dd><a href="<%adminurl%>" title="Admin Area">Admin</a></dd>
<%endif%>
</dl>
</div>

「保存」を押す。
....「メッセージ: ファイル sidebar.inc を保存しました。」と表示された。

最初はこんな。
最初
さて、ページを再読み込みすると、
おーっ! リストだぁ。やったね。
できた
まだローカルのテストマシンで動かしているので、実際に見てもらえなくてごめんなさい。

「NP_ListArticlesByName」は55行のプラグインなのでコードが一目瞭然だから、Nucleusの動きが少しわかったような...。
「プラグインのインストール」を押すと、プラグインを追加するプログラムがコードを確かめて、NP_を外した「ListArticlesByName」をどっかの定義場所に追加しているみたいだ。プラグインは、MySqlのnucleusのデータベースのテーブルnucleus_pluginに登録されてるらしい。Nucleusのタグを解釈しながらページを組み立ててるんだ。きっと。
ページを表示するとき、<%ListArticlesByName(50)%> があったら、NP_ListArticlesByName.phpをIncludeするとかそういうことかな。
登録してあるNP_ListArticlesByName.phpを無理矢理削除すると、アーカイブリストが表示されなくなるから、nucleus/plagin/NP_ListArticlesByName.phpを、表示のたびに読んでいるらしい。

今後の課題:
wordPressでやったように、NP_ListArticlesByName.phpに <select>要素を書けば、ドロップダウンで表示できるかも。

不具合発見:
「grey_gradient」の「Navigation」の「Previous Item」と「Next Item」は表示が逆みたいだ。
「Previous Item」をクリックすると、次のアイテムが表示されちゃう。
後で直さなきゃ。

あれ?:
www2.blogger.comは昨日の11:40ごろ(日本時間2008.02.28 11:40)サーバーが反応なかったけど何かあったのかな。気のせいかその後動きが少し悪いような気がして。


追加:プリフィックスをつけたテーブルがあると不具合
別のマシンでNP_ListArticlesByName.phpをテストをしたら、
Error!

プラグインが読み込めませんでした。もくは、使用中の Nucleus 上で動作させるために必要な機能が、プラグインでサポートされていません。(管理操作履歴に詳細があります。)
というエラーが出てプラグインとして組込めない。

管理操作履歴には
2008-03-01 20:14:43 [sample1] Plugin NP_ListArticlesByName
was not loaded (does not support SqlTablePrefix)
と書かれていた。
NP_ListArticlesByName.phpは プリフィックスに対応していないらしく、プリフィックスチェックが行われていないようだ。

NP_ListArticlesByName.phpに
function supportsFeature($feature) {
switch($feature) {
case 'SqlTablePrefix':
return 1;
default:
return 0;
}
}
を挿入する。
これでエラーが消え、NP_ListArticlesByName.phpがインストールされた。

実行時(表示時かな)すると、プリフィックスをつけたテーブルにより不具合がでる。
mySQL error with query SELECT i.inumber as itemid, i.ititle as
title FROM nucleus_item as i WHERE i.iblog=1 and i.idraft=0 and i.itime
<="2008-03-01 21:31:07" ORDER by itime DESC LIMIT 0,50: Table 'nucleus
.nucleus_item' doesn't exist <- ホントは'nucleus.nc1_nucleus_item'

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL
result resource in /home/sample1/web/nucleus/nucleus/plugins/
NP_ListArticlesByName.php on line 45
 
35: . ' FROM nucleus_item as i'

 35: . ' FROM '.$MYSQL_PREFIX . 'nucleus_item as i'
に変更し、

 global $MYSQL_PREFIX;

を追加してupload。「登録リストのアップデート」をクリックして、登録し直す。



追加:プリフィックスをつけたテーブルがあると不具合を増やしたので、
以前このページに置いていた調べたついでは、いずれ別ページに掲載の予定。

01 Mar, 2008 | mokimoc
« Prev item - Next Item »
---------------------------------------------

Comments



Leave comments

このアイテムは閲覧専用です。コメントの投稿、投票はできません。