Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2017-05-24 12:02:34

nshown
メンバー
登録日: 2008-01-05
投稿: 98

個別アイテムスキンでもNP_ShowBlogsを使う方法

NP_TagEXを連動させることで、個別アイテムスキンでもNP_ShowBlogsを使用することができるそうなのですが、次のアドレスと同様のエラーが出て表示することができずにいました。
http://japan.nucleuscms.org/forum/viewt … 383#p21383

今回、これをなんとか表示できるようした方法をまとめてみました。

1) NP_ShowBlogs Ver.2.71を入手します。
なお、以下はNP_ShowBlogsは下記のアドレスで入手できるものをベースにしています。
https://github.com/NucleusCMS/NP_ShowBlogs

2) NP_ShowBlogsの950行目を次の通り書き換えます。
現状

$where .= ' and i.inumber IN ('. @join(',', $inumsres) . ')';

書換後

$where .= ' and i.inumber IN ('. rtrim(@join(',', $inumsres), ",") . ')';

現状では、IN句のカッコ内の末尾にカンマが残るとsyntaxエラーとなるもののようです。

これにより、サイドバー等に関連情報のタイトルをNP_ShowBlogsで表示させるといったことが、「メインの目次ページ」と「個別アイテム」のスキンで共通化できます。

オフライン

#2 2017-05-24 12:52:25

yama
Administrator
登録日: 2005-07-07
投稿: 1,243
ウェブサイト

Re: 個別アイテムスキンでもNP_ShowBlogsを使う方法

$inumsresをjoinでつなげて右端が「 , 」になってしまうということは、そもそも$inumsresが想定外な構成になっている気がします。たとえば末尾のデータが空文字になっていたりとか。処理の流れを見たところ、そんなことは起きないように思えますが。
print_r($inumsres);exit;
みたいな簡易のデバッグコードを直前に差し込んでみると、どんな値が表示されます?

オフライン

#3 2017-05-24 19:35:39

nshown
メンバー
登録日: 2008-01-05
投稿: 98

Re: 個別アイテムスキンでもNP_ShowBlogsを使う方法

どのような条件下でSyntaxエラーが吐き出されるかをもう少し検証してみました。

●前提条件
NP_TagEXを用いてタグ付けされている記事がブログ内に「7個」ある状態。
NP_ShowBlogsで下記のように個別アイテムスキンへ記述して表示をさせようとしています。

<%ShowBlogs(temp/related,7,3,0,ASC)%>

●試行結果
上記の条件で表示を試みると、当該行で吐き出されるエラーメッセージ中に以下のような文字列があります。

and i.inumber IN (6,8,7,9,10,12,11,)

このカッコ内の末尾にカンマがあるためエラーとなっています。


●検証内容
ここからNP_ShowBlogsで表示させたいアイテム数を加減しながら試行してみました。
すると、タグ付けされているアイテム数より少ない要求件数ではエラーが出ませんでした。
例えば以下のようなスキンへの記述では大丈夫でした。

<%ShowBlogs(temp/related,6,3,0,ASC)%>

逆にタグ付けされているアイテム数以上の要求件数を記述した時、エラーが出ました。

編集者 nshown (2017-05-25 10:54:58)

オフライン

#4 2017-05-24 22:34:26

ピヨピヨbird
メンバー
登録日: 2015-04-05
投稿: 78

Re: 個別アイテムスキンでもNP_ShowBlogsを使う方法

どちらのプラグインも使っていないので
よく知りませんが
スキンに入れてみましたが、表示することすらできません

脳内シミュレートですが
数行前の 946行目
for ($i=0; $i <= $p_amount; $i++)
おそらくこの行が 配列の範囲外のループをしているため、 , が挿入されていると思います。
ループの最大値を正しく設定してあげれば直ると思います。
min(count($relatedInums)-1, $p_amount)
$relatedInumsも配列として初期化せずに使っているので初期化したほうがいいですね。

ついでに:
_getTagsInum関数の$inumsand  初期化されていない
PageSwitch関数の$pagelimit   初期化されていない
と警告が出ています。

がんばってください

編集者 ピヨピヨbird (2017-05-25 08:18:19)

オフライン

#5 2017-05-25 10:49:05

nshown
メンバー
登録日: 2008-01-05
投稿: 98

Re: 個別アイテムスキンでもNP_ShowBlogsを使う方法

仰る通り、当該のfor文が原因と思います。

ピヨピヨbird さんの発言:

脳内シミュレートですが
数行前の 946行目
for ($i=0; $i <= $p_amount; $i++)
おそらくこの行が 配列の範囲外のループをしているため、 , が挿入されていると思います。
ループの最大値を正しく設定してあげれば直ると思います。

ページに表示させたい件数が収められているとみられる「$p_amount」が、登録されているアイテム数より多い場合、
IN句のカッコ内の文字列末尾にカンマが1個から複数個並ぶことになりますね。

小技というか、小手先というか、対症療法というかはそれぞれにお任せして、
ソースの解析に深入りしたくないなぁとか、急ぎ望む結果にしたいとかいう向きには、
rtrim関数を使ってカンマ除去だけ行ってみてはいかがでしょうかという次第です。

編集者 nshown (2017-05-25 10:57:12)

オフライン

#6 2017-05-26 09:55:09

yama
Administrator
登録日: 2005-07-07
投稿: 1,243
ウェブサイト

Re: 個別アイテムスキンでもNP_ShowBlogsを使う方法

当トピックの内容を参考に、GitHub上の最新コードを元に整理してみました。動作するかどうか見ていただいてよいですか?

オフライン

#7 2017-05-26 12:51:19

yama
Administrator
登録日: 2005-07-07
投稿: 1,243
ウェブサイト

Re: 個別アイテムスキンでもNP_ShowBlogsを使う方法

すいません、ファイルが添付できてませんでした


Attachments:
zip NP_ShowBlogs.zip, Size: 8.91 KiB, Downloads: 38

オフライン

#8 2017-05-26 13:00:40

nshown
メンバー
登録日: 2008-01-05
投稿: 98

Re: 個別アイテムスキンでもNP_ShowBlogsを使う方法

yama 様、ありがとうございます。
先程、添付ファイルをインストールして、稼働を確認しました。
意図通りの結果が得られております。

オフライン

#9 2017-05-26 21:36:59

yama
Administrator
登録日: 2005-07-07
投稿: 1,243
ウェブサイト

Re: 個別アイテムスキンでもNP_ShowBlogsを使う方法

確認ありがとうございます、また何か気付いたことがあればよろしくお願いします

オフライン

Board footer