Nucleus(JP)フォーラム

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

ログインしていません。

#1 2006-06-30 22:03:22

200bpm
メンバー
登録日: 2006-06-20
投稿: 50

Re: NP_Topblogsにページスイッチを付けたい

こんばんは。

今現在、NP_Topblogsを使用して、100個弱のブログ(スキン000)より最新の記事を
表示(スキン001)しています。表示はうまくできているのですが、100個も呼ぶと負荷が高いせいか
ものすごい時間が掛かる上に、縦にものすごく長いページになってしまいました。

本文はNP_ShortenItemを使用して省略することにより、多少は短くなりましたが
大きな効果は望めませんでした。

そこで、なんとか、ページ番号を付けて1ページ10件表示にしたいのですが、
どうあがいてもできません。 :cry:

NP_showblogsにページスイッチをつけるオプションがあったので
NP_Topblogsと組み合わせてうまくやってみましたが無理でした・・・。

他にも、NP_Multiblogsを組み合わそうとしましたが結果無理でした。


アイテムを10件表示したら次のページになるようなページスイッチのみの機能を持つプラグインは
ありませんでしょうか・・。(または変数などを使ってできないでしょうか?)

どなたか、ご教授お願いします。 :cry:  :cry:
アドバイスだけでも良いのでいただけると嬉しいです。

オフライン

#2 2006-06-30 22:39:10

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_Topblogsにページスイッチを付けたい

本当にヒントだけで申し訳ないですが,NP_PagerのshowUsingQuery対応改造版をインストールし,
NP_TopBlogsをそれを使うように書き換えれば,できると思います。
NP_Bookで同じようなことをしているので参考にしてもらえれば。

オフライン

#3 2006-07-01 17:01:42

200bpm
メンバー
登録日: 2006-06-20
投稿: 50

Re: NP_Topblogsにページスイッチを付けたい

本当にヒントだけで申し訳ないですが,NP_PagerのshowUsingQuery対応改造版をインストールし,
NP_TopBlogsをそれを使うように書き換えれば,できると思います。
NP_Bookで同じようなことをしているので参考にしてもらえれば。

ANDYさん、こんにちは。
ありがとうございます。小さなヒントだけでもいただけで本当にありがたいです。
NP_Pagerについても調べてみます!

また難題にぶつかったら、ここに書かせていただきます。
本当にいろいろとすみませんが、よろしくお願いします。m(_ _)m

オフライン

#4 2006-07-03 04:51:49

200bpm
メンバー
登録日: 2006-06-20
投稿: 50

Re: NP_Topblogsにページスイッチを付けたい

この時間まで粘ってやったのですが・・無理っぽいです。。。

>> NP_TopBlogsをそれを使うように書き換えれば
ということが、どうしてもできなくて・・。 :cry:  :cry:

あーもう泣ける。。。 :cry:

オフライン

#5 2006-07-03 10:55:12

200bpm
メンバー
登録日: 2006-06-20
投稿: 50

Re: NP_Topblogsにページスイッチを付けたい

未だ調べています。。。

調べている途中に気づいたのですが、このフォーラムの検索が機能していないように
みえるのですが、私の勘違いでしょうか・・。 sad

明らかに検索でひっかかるワードを入れたのですが、97%ぐらいの確率で引っかかりません。。
トピックの件名とはずれてしまいましたが、併せてご回答いただけたらと思います。。

オフライン

#6 2006-07-03 13:29:43

NKJG
メンバー
From: あなたのうしろ
登録日: 2005-03-28
投稿: 56
ウェブサイト

Re: NP_Topblogsにページスイッチを付けたい

200bpm さんの発言:

調べている途中に気づいたのですが、このフォーラムの検索が機能していないように
みえるのですが、私の勘違いでしょうか・・。 sad

明らかに検索でひっかかるワードを入れたのですが、97%ぐらいの確率で引っかかりません。。
トピックの件名とはずれてしまいましたが、併せてご回答いただけたらと思います。。

同感です。

『メンバー』や『チーム』で検索しても1件もヒットしません。

オフライン

#7 2006-07-03 14:11:24

200bpm
メンバー
登録日: 2006-06-20
投稿: 50

Re: NP_Topblogsにページスイッチを付けたい

NKJGさん、こんにちは。

そうですよねぇ。ヒットしませんよね。。 :cry:

というか、少し驚きです。
さっきまで、肉少なめの「PEARのPagerが~」の記事を見ていたんです。(このトピの疑問を解決するために・・・)
管理人様が来てくれるなんて、偶然な・・。


土曜日からですが、未だ解決できず・・。 sad
検索はなんででしょうねぇ。。。調べごとが、できず・・。

オフライン

#8 2006-07-03 14:53:47

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: NP_Topblogsにページスイッチを付けたい

フォーラム検索できないですねぇ。(笑

NP_Pagerが面白そうだったので(知りませんでした。orz)、NP_TopBlogsのページスイッチ対応を試してみました。
一応、できたような気がします。200bpmさん、よかったらお試しください。
添付ファイルのコードの、perPageを変更すると、1ページに表示する件数を変更できます。とりあえず10件にしてみました。


ところで、
NP_Pagerのver0.2+というのが、なかなか見つからないのですが、
本家の下記トピックのものが最新版になるのでしょうか?
http://forum.nucleuscms.org/viewtopic.p ... t=10#60521
↑のコードから、NP_Pager.phpを作成し、
本家の、
http://wakka.xiffy.nl/pager
ver0.1の、他のファイルを使用しました。

試してみたのですが、うまく動かなかったので、
NP_Pager.phpの「**** $blog ****」と付けた行の$thisを、$blogに変更して使用しました。

   function showUsingQuery(&$blog, $templateName, $query, $highlight = '', $comments = 0, $dateheads = 1) {
      global $CONF, $manager, $blog, $member;

      $lastVisit = cookieVar($CONF['CookiePrefix'] .'lastVisit');
      if ($lastVisit != 0)
         $lastVisit = $blog->getCorrectTime($lastVisit);//**** $blog ****

      // set templatename as global variable (so plugins can access it)
      global $currentTemplateName;
      $currentTemplateName = $templateName;
      
      $template =& $manager->getTemplate($templateName);
      
      // create parser object & action handler
      $actions =& new ITEMACTIONS($blog);//**** $blog ****
      $parser =& new PARSER($actions->getDefinedActions(),$actions);
      $actions->setTemplate($template);
      $actions->setHighlight($highlight);
      $actions->setLastVisit($lastVisit);
      $actions->setParser($parser);
      $actions->setShowComments($comments);

      // execute query
      $pages = $this->getPagedResults($query, 'mysql_fetch_object');

      // loop over all items
      foreach($pages['data'] as $item) {
         $item->timestamp = strtotime($item->itime);   // string timestamp -> unix timestamp
      
         // action handler needs to know the item we're handling
         $actions->setCurrentItem($item);
         
         // add date header if needed
         if ($dateheads) {
            $new_date = date('dFY',$item->timestamp);
            if ($new_date != $old_date) {
               // unless this is the first time, write date footer
               $timestamp = $item->timestamp;
               if ($old_date != 0) {
                  $oldTS = strtotime($old_date);
                  $manager->notify('PreDateFoot',array('blog' => &$blog, 'timestamp' => $oldTS));
                  $parser->parse(strftime($template['DATE_FOOTER'], $oldTS));
                  $manager->notify('PostDateFoot',array('blog' => &$blog, 'timestamp' => $oldTS));
               }
               $manager->notify('PreDateHead',array('blog' => &$blog, 'timestamp' => $timestamp));
               // note, to use templatvars in the dateheader, the %-characters need to be doubled in
               // order to be preserved by strftime
               $parser->parse(strftime($template['DATE_HEADER'],$timestamp));
               $manager->notify('PostDateHead',array('blog' => &$blog, 'timestamp' => $timestamp));
            }
            $old_date = $new_date;
         }
         
         // parse item
         $parser->parse($template['ITEM_HEADER']);
         $manager->notify('PreItem', array('blog' => &$blog, 'item' => &$item)); //**** $blog ****
         $parser->parse($template['ITEM']);         
         $manager->notify('PostItem', array('blog' => &$blog, 'item' => &$item)); //**** $blog ****
         $parser->parse($template['ITEM_FOOTER']);

      }
      
      $numrows = sizeof($page['data']);
      
      // add another date footer if there was at least one item
      if (($numrows > 0) && $dateheads) {
         $manager->notify('PreDateFoot',array('blog' => &$blog, 'timestamp' => strtotime($old_date))); //**** $blog ****
         $parser->parse($template['DATE_FOOTER']);
         $manager->notify('PostDateFoot',array('blog' => &$blog, 'timestamp' => strtotime($old_date))); //**** $blog ****
      }


      echo '<div class="pagination">';
      // $pages['links'] are the page links
      echo  $pages['links'];
      echo  '</div>';
      
      return $numrows;
   }

Attachments:
zip NP_TopBlogs.zip, Size: 1.32 KiB, Downloads: 354

各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#9 2006-07-03 14:58:04

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_Topblogsにページスイッチを付けたい

佐藤(な) さんの発言:

フォーラム検索できないですねぇ。(笑

NP_Pagerが面白そうだったので(知りませんでした。orz)、NP_TopBlogsのページスイッチ対応を試してみました。
一応、できたような気がします。200bpmさん、よかったらお試しください。
添付ファイルのコードの、perPageを変更すると、1ページに表示する件数を変更できます。とりあえず10件にしてみました。


ところで、
NP_Pagerのver0.2+というのが、なかなか見つからないのですが、
本家の下記トピックのものが最新版になるのでしょうか?
http://forum.nucleuscms.org/viewtopic.p ... t=10#60521
↑のコードから、NP_Pager.phpを作成し、
本家の、
http://wakka.xiffy.nl/pager
ver0.1の、他のファイルを使用しました。

ありがとうございます。このあたりを説明するのが大変で,ちょっとさぼってしまったのでした。
showUsingQuery部分のコード最新版は

	function showUsingQuery(&$blog, $templateName, $query, $highlight = '', $comments = 0, $dateheads = 1) {
		global $CONF, $manager, $blog, $member;

		$lastVisit = cookieVar($CONF['CookiePrefix'] .'lastVisit');
		if ($lastVisit != 0)
			$lastVisit = $this->getCorrectTime($lastVisit);

		// set templatename as global variable (so plugins can access it)
		global $currentTemplateName;
		$currentTemplateName = $templateName;
		
		$template =& $manager->getTemplate($templateName);
		
		// create parser object & action handler
		$actions =& new ITEMACTIONS($blog);
		$parser =& new PARSER($actions->getDefinedActions(),$actions);
		$actions->setTemplate($template);
		$actions->setHighlight($highlight);
		$actions->setLastVisit($lastVisit);
		$actions->setParser($parser);
		$actions->setShowComments($comments);

		// execute query
		$pages = $this->getPagedResults($query, 'mysql_fetch_object');

		// loop over all items
		foreach($pages['data'] as $item) {
			$item->timestamp = strtotime($item->itime);	// string timestamp -> unix timestamp
		
			// action handler needs to know the item we're handling
			$actions->setCurrentItem($item);
			
			// add date header if needed
			if ($dateheads) {
				$new_date = date('dFY',$item->timestamp);
				if ($new_date != $old_date) {
					// unless this is the first time, write date footer
					$timestamp = $item->timestamp;
					if ($old_date != 0) {
						$oldTS = strtotime($old_date);
						$manager->notify('PreDateFoot',array('blog' => &$blog, 'timestamp' => $oldTS));
						$parser->parse(strftime($template['DATE_FOOTER'], $oldTS));
						$manager->notify('PostDateFoot',array('blog' => &$blog, 'timestamp' => $oldTS));
					}
					$manager->notify('PreDateHead',array('blog' => &$blog, 'timestamp' => $timestamp));
					// note, to use templatvars in the dateheader, the %-characters need to be doubled in
					// order to be preserved by strftime
					$parser->parse(strftime($template['DATE_HEADER'],$timestamp));
					$manager->notify('PostDateHead',array('blog' => &$blog, 'timestamp' => $timestamp));
				}
				$old_date = $new_date;
			}
			
			// parse item 
			$parser->parse($template['ITEM_HEADER']);
			$manager->notify('PreItem', array('blog' => &$this, 'item' => &$item));			
			$parser->parse($template['ITEM']);			
			$manager->notify('PostItem', array('blog' => &$this, 'item' => &$item));			
			$parser->parse($template['ITEM_FOOTER']);

		}
		
		$numrows = sizeof($page['data']);
		
		// add another date footer if there was at least one item
		if (($numrows > 0) && $dateheads) {
			$manager->notify('PreDateFoot',array('blog' => &$this, 'timestamp' => strtotime($old_date)));		
			$parser->parse($template['DATE_FOOTER']);
			$manager->notify('PostDateFoot',array('blog' => &$this, 'timestamp' => strtotime($old_date)));
		}


		echo '<div class="pagination">';
		// $pages['links'] are the page links
		echo  $pages['links'];
		echo  '</div>';
		
		return $numrows;
	}

となっております。

オフライン

#10 2006-07-03 15:12:18

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: NP_Topblogsにページスイッチを付けたい

> showUsingQuery部分のコード最新版は

確認しました。動きました。 big_smile
Andyさん、いろんな所で、斬新なことやってますねぇ。
ストーキングしきれません。(爆


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#11 2006-07-03 16:16:29

200bpm
メンバー
登録日: 2006-06-20
投稿: 50

Re: NP_Topblogsにページスイッチを付けたい

インストール時に何度かエラーが出ましたが、なんとかインストールできました!
一件変わったところはないのですが・・正常に働いているのは不安です。

訳あってテスト用のサブドメインを作ってその中に10個ほどのブログを作成して、NP_Topblogsで
15個の最新記事を呼んでいます。

ですが、うまくページ分けがされていません。
これはブログが少なすぎるのでしょうか・・。

改ページとかは20件からなどと決まっているのでしょうか。
(ソースを見たのですが、どこで改ページをしているのか分からなくて・・・ :cry: )

スキンには以下のように記述してあります。

<%TopBlogs(001/index,,)%>

オフライン

#12 2006-07-03 16:31:54

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: NP_Topblogsにページスイッチを付けたい

>  インストール時に何度かエラーが出ましたが、なんとかインストールできました!

無事にインストールできていないとなると、不安定要素が増えますので、まずは、ここをクリアしないといけないと思います。

> これはブログが少なすぎるのでしょうか・・。

ぼくは、ブログ数3個で試してみました。複数ブログは、2つ以上あれば問題ないです。

> 改ページとかは20件からなどと決まっているのでしょうか。

			$options = array(
				'separator' => '|',
				'spacesBeforeSeparator' => 1,
				'spacesAfterSeparator' => 1,
				'perPage' => 10 //
			);

'perPage' => 10 のところが、改ページ件数です。

> スキンには以下のように記述してあります。
> <%TopBlogs(001/index,,)%>

これでいいと思います。
まずは、インストール時のエラーの原因を見つける必要があると思います。

エラーの状況を具体的に教えてもらえますか?どのタイミングで、どんな感じになるのでしょうか?

あと、
本家で、一緒に配布されている、デモ用プラグインNP_PagerDemoは、動作しますか?
http://wakka.xiffy.nl/pager

p.s.
200bpmさん、徹夜ですか?大丈夫ですか?


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#13 2006-07-03 16:45:50

200bpm
メンバー
登録日: 2006-06-20
投稿: 50

Re: NP_Topblogsにページスイッチを付けたい

佐藤(な)さん、ありがとうございます。

> 200bpmさん、徹夜ですか?大丈夫ですか?
ご心配ありがとうございます。
一応2時間ほど睡眠を取りましたので、大丈夫です。
(朝から焦ってばっかりですが・・)

やはり、ウェブデザイナーもプログラマー同様の知識を持った方がいいですよね。
自分の不甲斐なさに反省しています。

-----
インストール時のエラーは、原因を突き止めました。
showUsingQuery関数のコピペミスでした。(お恥ずかしい。。。)
function showUsingQuery (***~の部分が2重になっていました。

> 本家で、一緒に配布されている、デモ用プラグインNP_PagerDemoは、動作しますか?
はい、これは動作しました。
全コメントが1件づつ、ページ分けされて表示されています。

オフライン

#14 2006-07-03 17:04:56

200bpm
メンバー
登録日: 2006-06-20
投稿: 50

Re: NP_Topblogsにページスイッチを付けたい

もう少し詳細に内容を書きます。

まず既存のNP_PagerとNP_Topblogsをアンインストールしました。
その後、佐藤(な)さんで、カスタマイズしていただいた、NP_Topblogsを
上書きし、インストールを行いました。

インストール後、下記URLより、NP_Pagerのソースをコピー&ペーストして、ファイル名を
NP_pager
http://forum.nucleuscms.org/viewtopic.p ... t=10#60521


・・・・・すいません。。。

書いていて、「あっ!!!!」って思いました。
単純なミスで困らせてしまって、本当にすいません。

インストールしたNP_pagerのファイル名を「NP_Pager」に変更したところ・・・
無事動作しました。

あぁ、もう涙ものです。

Andyさん、佐藤(な)さん、本当に本当にありがとうございました!

オフライン

#15 2006-07-03 17:05:51

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: NP_Topblogsにページスイッチを付けたい

200bpm さんの発言:

インストール時のエラーは、原因を突き止めました。
showUsingQuery関数のコピペミスでした。(お恥ずかしい。。。)
function showUsingQuery (***~の部分が2重になっていました。

> 本家で、一緒に配布されている、デモ用プラグインNP_PagerDemoは、動作しますか?
はい、これは動作しました。
全コメントが1件づつ、ページ分けされて表示されています。

インストール時のエラーは、NP_Pagerの方だったんですね。
んー何ででしょう?
一応、最新版のNP_Pagerを、ここでもダウンロードできるようにしておきますね。
Andyさん、問題ありましたら削除します。
サーバ上のNP_Pagerは、一旦アンインストールして、
NP_Pager.zipを解凍してできたファイルとディレクトリを、そのまま階層構造で、アップロードして、インストールしてみてください。

改造版NP_TopBlogsは、インストールには特別問題ないと思います。
プラグイン一覧で、0.12 [pager]となっていれば、ちゃんとインストールされていると思います。
念のため、ブラウザをリロードしてみるとか?(意味ないっすねぇ
んー、10個のブログで、改ページ件数10件指定だから、改ページされていないだけとか?
件数が少なくて改ページされない場合、ページスイッチが表示されるべきところに、
1
とだけ表示されると思います。多分。


Attachments:
zip NP_Pager.zip, Size: 43.3 KiB, Downloads: 396

各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#16 2006-07-03 17:07:19

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: NP_Topblogsにページスイッチを付けたい

あ、入れ違いになっちゃいましたね。

うごきました?
良かった。 big_smile


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#17 2006-07-03 17:12:09

200bpm
メンバー
登録日: 2006-06-20
投稿: 50

Re: NP_Topblogsにページスイッチを付けたい

ご迷惑おかけしました。(T_T)

無事動作して、改ページもうまく変更することができました。
本当に本当に感謝していますm(_ _)mm(_ _)m

オフライン

Board footer