Nucleus(JP)フォーラム

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

ログインしていません。

#1 2005-07-13 13:07:22

ishiiyoshinori
メンバー
登録日: 2005-07-03
投稿: 4

Re: 各カテゴリページで、全てのカテゴリのarchivelistを表示するには?

はじめまして。4月からボチボチNucleusをいじりはじめ、最近カスタマイズを始めたばかりなのですが、ちょっと躓いてしまいました。やりたいことは件名の通り、「各カテゴリページで、全てのカテゴリのarchivelistを表示するには?」です。

メインの目次や月別アーカイブ、月別アーカイブ一覧において<%archivelist%>を使うと、全ての(4月、5月、6月、7月の)アーカイブが一覧されます。

一方、あるカテゴリページにおいて<%archivelist%>を使うと、そのカテゴリが含まれる月*だけ*の一覧が表示されます。例えばそのカテゴリに属するアイテムが4月と6月にしかポストされていないとすると、そのカテゴリページの<%archivelist%>には4月と6月の2つしか表示されないですよね。

このカテゴリページでの表示を、メインの目次などで<%archivelist%>と呼び出したのと同じように全てのアーカイブ一覧として表示したい(つまりカテゴリで絞り込まずに表示したい)のですが、そのやり方がわからないのです。試しに

<%archivelist(001/index,)%>

とか

<%archivelist(001/index,all)%>

とかやってみましたが、ダメでした。

解決法やアイデアを知っている方がいらっしゃいましたら、是非ご助言いただければと思います。

オフライン

#2 2005-07-13 16:56:15

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

Re: 各カテゴリページで、全てのカテゴリのarchivelistを表示するには?

ishiiyoshinori さんの発言:

一方、あるカテゴリページにおいて<%archivelist%>を使うと、そのカテゴリが含まれる月*だけ*の一覧が表示されます。例えばそのカテゴリに属するアイテムが4月と6月にしかポストされていないとすると、そのカテゴリページの<%archivelist%>には4月と6月の2つしか表示されないですよね。

このカテゴリページでの表示を、メインの目次などで<%archivelist%>と呼び出したのと同じように全てのアーカイブ一覧として表示したい(つまりカテゴリで絞り込まずに表示したい)のですが、そのやり方がわからないのです。

その場合,3月とか5月をクリックするとユーザーに空のページを表示してしまうことになりますが,それはかまわないのでしょうか?

オフライン

#3 2005-07-13 18:06:47

ishiiyoshinori
メンバー
登録日: 2005-07-03
投稿: 4

Re: 各カテゴリページで、全てのカテゴリのarchivelistを表示するには?

メッセージありがとうございます。

言葉足らずで申し訳ありません。カテゴリページで表示した際も、メインの目次ページで表示した場合と同じクエリパラメータにしたい(つまりカテゴリで絞込みをしたくない)、ということです。ですので3月や5月の箇所をクリックしたら、(カテゴリに関係なく)その月にポストされた全てのアイテムが表示されるというのを想定しています。クエリパラメータとしては

archive=2005-06&catid=5

ではなくて

archive=2005-06

になるでしょうか。MovableTypeでいうところの「月別アーカイブ一覧」みたいなイメージです。

MovableTypeからの移行なもので、コレがないとなんだか不安で :oops:

オフライン

#4 2005-07-13 18:34:07

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

Re: 各カテゴリページで、全てのカテゴリのarchivelistを表示するには?

コアに手を入れればできると思います。nucleus/libs/SKIN.phpの中にparse_archivelistという関数があります。

	function parse_archivelist($template, $category = 'all', $limit = 0) {
		global $blog;
		if ($category == 'all') $category = '';
		$this->_preBlogContent('archivelist',$blog);
		$this->_setBlogCategory($blog, $category);
		$blog->showArchiveList($template, 'month', $limit);
		$this->_postBlogContent('archivelist',$blog);
	}

これを

	function parse_archivelist($template, $category = 'all', $limit = 0) {
		global $blog, $catid;  //$catidを追加
		$tempcat = $catid;  //追加
		$catid = '';  //追加
		if ($category == 'all') $category = '';
		$this->_preBlogContent('archivelist',$blog);
		$this->_setBlogCategory($blog, $category);
		$blog->showArchiveList($template, 'month', $limit);
		$this->_postBlogContent('archivelist',$blog);
		$catid = $tempcat; //追加
	}

としたら,たぶんお望みのようになるのではないかと思います。

オフライン

#5 2005-07-14 00:02:28

ishiiyoshinori
メンバー
登録日: 2005-07-03
投稿: 4

Re: 各カテゴリページで、全てのカテゴリのarchivelistを表示するには?

Andy 様ありがとうございます!できました!

プラグインかスキン変数の書き方次第でなんとかなるだろーと思ってたのですが、コアをいじることになるとは…。
何はともあれ、ありがとうございました。

オフライン

#6 2005-07-14 00:35:22

藤咲
Administrator
From: 広島
登録日: 2003-11-17
投稿: 1,211
ウェブサイト

Re: 各カテゴリページで、全てのカテゴリのarchivelistを表示するには?

思いつきですが、NP_TitleListの絞り込みを表示しないで、テンプレートを工夫したらできないですかね?


藤咲
備忘録とかもろもろ
http://fjsk.tk/

オフライン

#7 2005-07-14 15:32:03

Taka
メンバー
From: 千葉
登録日: 2003-11-17
投稿: 264
ウェブサイト

Re: 各カテゴリページで、全てのカテゴリのarchivelistを表示するには?

同じく遅かったかもしれませんが、実は私が最初に書いたプラグインがこれを実現させるものだったんです(ちょっと前まで置いてたんですが、もう消しちゃった。)。
ローカルにももう無いし、どんなんだっけなーと思ってWinあさってたら見つけました。
一応置いておきます。

以下のコードをNP_SimpleArcList.phpとして保存→インストール
呼び出しはスキンで
<%SimpleArcList%> とか
<%SimpleArcList(day)%> とか
<%SimpleArcList(month,12)%>とか(12はリミット。この場合12ヶ月)

<?php
class NP_SimpleArcList extends NucleusPlugin {
	function getEventList() { return array(); }
	function getName() { return 'Simple Archive List'; }
	function getAuthor() { return 'Taka'; }
	function getURL() { return 'http://vivian.stripper.jp/'; }
	function getVersion() { return '0.1'; }
	function getDescription() {
		return 'This plug-in displays the archive list which does not change URLs by the selected category.(remove "catid" param.)';}

function doSkinVar($skinType, $mode = 'month', $limit = 0) { 
	global $manager, $blog, $CONF;
	
	if ($blog) {
		$b =& $blog;
	} else {
		$b =& $manager->getBlog($CONF['DefaultBlog']); 
	}
	
	$blogid = $b->getID();

	$query = 'SELECT UNIX_TIMESTAMP(itime) as itime, SUBSTRING(itime,1,4) AS Year, SUBSTRING(itime,6,2) AS Month, SUBSTRING(itime,9,2) as Day FROM nucleus_item'
	. ' WHERE iblog=' . $blogid
	. ' and UNIX_TIMESTAMP(itime)<=' . $b->getCorrectTime()// don't show future items
	. ' and idraft=0'; // don't show draft items
	
	$query .= ' GROUP BY Year, Month';
	if ($mode == 'day')
		$query .= ', Day';
	
	$query .= ' ORDER BY itime DESC';
	
	if ($limit > 0) 
		$query .= ' LIMIT ' . $limit;
	
	$res = sql_query($query);
	
	$this->linkparams = array('blogid'=>$blogid);
	$latest = createBlogLink($CONF['Self'],$this->linkparams);
	
	echo "<ul>\n";
	echo "<li><a href=\"{$latest}\">最新</a></li>\n";
	
	while ($row = mysql_fetch_object($res)) {
		if ($mode == 'day') {
			$archivedate = date('Y-m-d',$row->itime);
			$day = date('d',$row->itime);
		} else {
			$archivedate = date('Y-m',$row->itime);
		}
		$data['month'] = date('m',$row->itime);
		$data['year'] = date('Y',$row->itime);
		$data['archivelink'] = createArchiveLink($blogid,$archivedate);

		if($mode == 'day'){
			echo "<li><a href=\"{$data['archivelink']}\">{$data['year']}-{$data['month']}-{$day}</a></li>\n";
		}else{
			echo "<li><a href=\"{$data['archivelink']}\">{$data['year']}-{$data['month']}</a></li>\n";
		}
	}

	echo "</ul>";
	mysql_free_result($res);

}

}

テンプレートは無いので、直接いじるしかありません :oops:

オフライン

#8 2005-07-14 19:35:24

ishiiyoshinori
メンバー
登録日: 2005-07-03
投稿: 4

Re: 各カテゴリページで、全てのカテゴリのarchivelistを表示するには?

おおお!Taka様、ありがとうございます!できました!わーぱちぱちぱち。

いただいたソースをいじれば出力は好き勝手にできそうですので、テンプレートがないのは全然かまいません。

「もう消しちゃった」ってことは…あまりニーズがないんでしょうか…
MovableTypeからの乗り換え組にしてみれば、逆にこの機能が標準でないのが不思議なぐらいなんですが:cry:

藤咲様も、アイデアをいただき誠にありがとうございました。
皆様、今後ともよろしくお願いいたします。

オフライン

Board footer