NP_znMCListのHTML出力を自由にしたい
「1ブログに複数、例えばカテゴリがABCの3種あったとして、Bのカテゴリに属するサブカテゴリのみをリスト表示したい」というのが、今回の私の希望です。
そして、サブカテゴリをリスト表示する3大プラグインは次のみっつで良かったと思います。
- NP_ContentsList
- NP_BlogMenu
- NP_znMCList
けれど、このいずれも私の希望をかなえる機能は持ち合わせていません。全てのカテゴリを展開してしまいます。
となると、後は自分でどげんかせんといかん訳です。どぎゃんかせにゃならんのは判っとうばってん、わたしがそぎゃん能力ば持っとう訳、無かじゃなかねっ。
あ~う~。
上段2つは、リスト表示する際のHTMLを自身でカスタマイズできる処が魅力です。けれど、ソースを眺めている内に私のキャパシティを軽くオーバーしてしまいました。Functionが複数phpファイルにまたがってるぅ(>_<);;
ま、機能が多いのだから、ソースが多くなるのも当然ですね。
そこで、比較的コード量の少なめな「NP_znMCList」を利用させて戴く事にしたのでした。
またPHPとNucleusのお勉強タイムです。
NP_MultipleCategories(スキン変数使用時)のソート
スキン変数<%MultipleCategories(テンプレート)%>という使い方で用いる際、昇順で並べる必要性が生じました。
ところが、NP_MultipleCategoriesの解説には昇冪(しょうべき)順・降冪(こうべき)順の並び替えに関する記述がありません。
適当にパラメータを増やして、<%MultipleCategories(テンプレート,10,ASC)%>等と記述してみましたが、うまく動く訳も無く・・。
仕方がないので、一か八か、ソースを覗いて手を加える事にしました。「"DESC"とか記述があれば、そこを変えればいいだろ~」なんてお気楽な考えです。
──で、発見。修正したら出来ちゃいました(笑)。
次にその修正内容を、冗長性を持たせた修正も加えて記載します。
プラグインの作り方を調べる-001
「実践マスターPHP+MySQL - PHP4/PHP5対応」という本を読んで少しPHPを勉強した上で、Nucleusプラグインを書いてみます。
プラグインは、PHPで言うところの Class を用いて機能を提供するみたいです。
--------------------
引用元 : プラグイン API 「はじめてプラグインを書いてみる」
解読の為の参照 : Nucleusプラグインメソッド リファレンス
--------------------
<?php
// プラグイン変数として使われる名前は、
// class の後に続く NP_HelloWorld から NP_ を除いた文字。
// この例では HellowWorld が <%HellowWorld%> として使われる。
class NP_HelloWorld extends NucleusPlugin
{
// 以下、管理画面「プラグインの管理」で表記される内容
// プラグインの名前
function getName()
{
return 'Hello World';
}
// プラグインの作者
function getAuthor()
{
return 'Wouter Demuynck';
}
// プラグインのサイトURL
// mailto:foo@bar.com の形式も可
function getURL()
{
return 'http://nucleuscms.org/';
}
// プラグインのバージョン
function getVersion()
{
return '1.0';
}
// 説明文
function getDescription()
{
return 'Just a sample plugin.';
}
// 以下、おまじない。
function supportsFeature ($what)
{
switch ($what)
{
case 'SqlTablePrefix':
return 1;
default:
return 0;
}
}
// 以下、スキン上に書いた変数から呼び出される処理
function doSkinVar($skinType)
{
// 「Hellow World!」と出力
echo 'Hello World!';
}
}
?>
このプラグインは、スキンに<%HelloWorld%>と入力した場所に「Hello World!」という文字を表示します。
echo 'Hello World!';
を
echo 'Nucleusのプラグインを書いてみる';
と変えると、スキンに<%HelloWorld%>と入力した場所に「Nucleusのプラグインを書いてみる」という文字を表示します。
以上から判ったのは、「 function doSkinVar () に書いたコードが、プラグインとしての機能を提供する」事でした。
--------------------
ちなみに、
function doSkinVar($skinType , $param1)
とパラメータ「$param1」をひとつ増やして、
echo "Nucleusの$param1プラグインを書いてみる";
と、ダブルクォーテーションに包んだ文の中に「$param1」を加えます。
すると、スキン上で<%HelloWorld(おもしろい)%>と入力する事で、「Nucleusのおもしろいプラグインを書いてみる」という文字を表示できます。
2008年09月25日:J_プラグインの作り方::ephemera
アイテムを期限付きで表示したい
アイテムを期限付きで表示したいと考えています。
アイテムの日付と今の日付を比較して、
と、こんな感じのプラグインが作れればいいのだけど。
「スキンかテンプレートか?」となると、この変数はスキンで使う事になりそうです。けれど、スキン変数の作り方がまだ良く判ってません。テンプレート変数の作り方は先日まとめたNP_BlogInfoでなんとなく判ってきたけど。
アイテムから日付を読み出して、これを現在の日付"DATE()"と比較したいのだけど、どうやってアイテムの日時を読み出せばよいのやら。
記事の投稿日に関わるプラグインには「NP_NewItem」「NP_New」「NP_Countdown」あたりが関係ありそうかなと思って、これらのソースが流用できないか、あるいはコードを組み立てるヒントにならないか眺めてみました。が、Nucleus独自のClassや「=&」の意味が判らず、SQL文に恐れをなして先に進まず、玉砕しました・・。
NP_BlogInfo - <%blogsetting%>をテンプレートでも使う
このサイトは、複数blogでひとつのサイトを構成しています。その為随所に、これに対応する為の手直しをしています。RSSもそのひとつ。「えふぇめらクロニクル」トップページRSSは、Nucleusのスキン内でNP_ShowBlogsを使って呼び出すblogを選択し表示しています。
但し、このままではタイトルが並ぶのみで日記なのかゲームレポートなのかの判別がつかないので、blog情報をタイトルに添付しようと考えました。スキン内ならば、この機能を提供する便利な変数<%blogsetting%>が存在します。けれどもテンプレートでは使えないので別途プラグインを利用する事にします。
使えそうなのは、NP_BlogInfoとNP_BlogSetting。
残念な事にBlogInfoは、blogid=1のブログの中にblogid=2や3のitemを表示していた場合、テンプレート内で<%BlogInfo()%>と記述すると、2や3ではなく全て1として扱われました。コード内で「global $blogid」によるblog指定をしている為、常に親blogのidである1が代入されている模様。NP_BlogSettingの様に、アイテムから毎回blogidを探す「getBlogIDFromItemID($item->itemid)」を使わなければならないみたい。
最近PHPの解説本を買って勉強したから、ソースコードの造りが何となく判ってきました。勉強がてら、NP_BlogInfoとNP_BlogSettingを改良してみる事にしました。その上でRSSのテンプレート内でこれを使用します。
