NP_MutipleCategoriesの不具合?
このサイトではないけど、別件でNucleusを使ってて、いろいろと不具合っぽいものを発見した。バグか?とも思ったが、意外と簡単に直せそうだったので、対処方法をメモ書きしておこうと思う。検証環境はNucleusCMS Ver3.41NP_MうlちpぇCategories v0.5J。
問題となっている現象から説明しよう。
まずMultiple Categoriesは、Nucleusがデフォルトでは1記事に対し1カテゴリへの登録ができないため、これを複数のカテゴリに登録させようというプラグイン。ブログの性質にもよるところだが、これは非常に便利な機能である。あれば便利だが、今のところこのブログに入れる気はありません。
で起こっている現象はカテゴリ一覧の表示である。
記事本体やサイドバーに表示するカテゴリ一覧には、Nucleusのデフォルトのスキン変数、テンプレート変数から、Multiple Categoriesの指定する変数に置き換えてやる必要がある。まぁ、マニュアル通りにカスタマイズしていって「やった!できた!」ってなりますわな。
これがワナなんです。
実は記事を未来日付で公開で保存したり、ドラフト保存したりすると、記事の本体はどこからも表示されないが、カテゴリは見えてしまう。特にカテゴリごとの投稿数を表示してたりすると露骨にわかってしまう。ここまで説明が長かったですが、これが不具合(バグ)と思しき現象です。
画像がなくて残念ですが、、、
で、これの解決方法ですが、実はプラグインのPHPファイルの1行だけを書き換えるだけで、治ったりするんです。内容的には適切だと思いますし、ひとまず症状はでなくなったので、これで問題ないと思います。
Multiple CategoriesはshowCategoryList()という関数(NP_MultipleCategories.php 950行目)でカテゴリ一覧を作っています。この関数内の1010行目にSQLのWHERE句でDBのテーブルから取得する条件を指定しています。そこを以下のように変更。
(変更前)' WHERE iblog='.(int)$blogid;
(変更後)' WHERE iblog='.(int)$blogid.' AND idraft=0 AND itime <='.mysqldate($b->getCorrectTime());
何をしているのかというと、アイテムがドラフトでないものと投稿時間がそのときより前のものを取得するという条件を追加しています。ところがこれ、1131行目に定義されていshowArchiveList()関数内ではちゃんとしてくれているんです。実際この修正コードもこの関数を参考にしました。
なぜカテゴリ一覧だけ対応されていないのか不明ですが、ひとまずこれで、治るはずです。