Nucleus(JP)フォーラム

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

ログインしていません。

#1 2005-02-04 17:04:33

naha
メンバー
登録日: 2004-10-31
投稿: 68

Re: <%UpdateTime%>と<%date%>の使い分け方法

NP_UpdateTime を使わせていただいております。

「メインの目次ページ」と「個別アイテムページ」のテンプレートのアイテムのところで、
日付を表示させるように<%UpdateTime%>と<%date%>を記入しております。
ここで、新規のアイテムについては<%date%>によって日付を表示し、
更新したアイテムについては<%UpdateTime%>で表示したいのです。
このような場合わけは可能でしょうか?

更新時は、アイテムの並び順を変えたくないため「更新日時を記録する」で編集しています。

よろしくお願い致します。

オフライン

#2 2005-02-04 17:30:28

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: <%UpdateTime%>と<%date%>の使い分け方法

横道それちゃいますが。

並び順は変えずに、投稿日時を択一表示だと、見た目が混乱を招くような気がしてならないんですが....

とだけ書くだけだと性格悪いので(笑)、ちょっと考えてみました。

	function doTemplateVar(&$item){
		$query = 'SELECT r.up_id, UNIX_TIMESTAMP(r.updatetime) as updatetime, UNIX_TIMESTAMP(i.itime) as itemtime FROM '.sql_table('plugin_rectime') . ' as r, '.sql_table('item') .' as i WHERE r.up_id='.$item->itemid.' and r.up_id=i.inumber';
		$res = sql_query($query);
		if($row = mysql_fetch_assoc($res)){
			$data['utime'] = date($this->getOption('DateFormat'),$row['updatetime']);
			if($row['updatetime'] > $row['itemtime']){
				echo TEMPLATE::fill($this->getOption('AfterTime'),$data);;
			}elseif($row['updatetime'] < $row['itemtime']){
				echo TEMPLATE::fill($this->getOption('BeforeTime'),$data);;
			}else{
				echo date($this->getOption('DateFormat'),$row['itemtime']);
			}
		}
	}

のように、function doTemplateVar節を上書き(実際はelse文のみを追加)して、テンプレートは<%UpdateTime%>だけを使う、ってのはどうでしょうか?(動作は未検証です)
なお、この場合、日付フォーマットはプラグインオプションで指定した方の日付形式で整形されます。(テンプレート本体の指定を使ってません)


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#3 2005-02-04 20:52:40

naha
メンバー
登録日: 2004-10-31
投稿: 68

Re: <%UpdateTime%>と<%date%>の使い分け方法

nakahara21 さんの発言:

並び順は変えずに、投稿日時を択一表示だと、見た目が混乱を招くような気がしてならないんですが....

すみません…どうも私は本来のblogとしての使い方をしていないようですね …:(

考えていただいたコードで試してみましたが、更新を行っていないアイテムだと、
$row = mysql_fetch_assoc($res)
のところで $row が FALSE になるらしく、新たに挿入した else 文までそもそもたどり着かないようでした。

ちょっと私の知識だとどうしたら大丈夫になるかわからないので、他の方法も考えてみます。
ありがとうございます。

オフライン

#4 2005-02-05 14:31:24

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: <%UpdateTime%>と<%date%>の使い分け方法

ああ、そうですね<FALSE
すいませんでした。


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#5 2005-02-06 12:07:29

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

Re: <%UpdateTime%>と<%date%>の使い分け方法

naha さんの発言:

考えていただいたコードで試してみましたが、更新を行っていないアイテムだと、
$row = mysql_fetch_assoc($res)
のところで $row が FALSE になるらしく、新たに挿入した else 文までそもそもたどり着かないようでした。

すごい浅はかな考えなんですが、

function doTemplateVar(&$item){ 
      $query = 'SELECT r.up_id, UNIX_TIMESTAMP(r.updatetime) as updatetime, UNIX_TIMESTAMP(i.itime) as itemtime FROM '.sql_table('plugin_rectime') . ' as r, '.sql_table('item') .' as i WHERE r.up_id='.$item->itemid.' and r.up_id=i.inumber'; 
      $res = sql_query($query); 
      if($row = mysql_fetch_assoc($res)){ 
         $data['utime'] = date($this->getOption('DateFormat'),$row['updatetime']); 
         if($row['updatetime'] > $row['itemtime']){ 
            echo TEMPLATE::fill($this->getOption('AfterTime'),$data);; 
         }elseif($row['updatetime'] < $row['itemtime']){ 
            echo TEMPLATE::fill($this->getOption('BeforeTime'),$data);; 
         } 
      }else{ 
         echo date($this->getOption('DateFormat'),$row['itemtime']); 
      } 
   }

とelseをひとつ外に出したら良いような気がするのですが、どうでしょうか。
#思いつきで書いてるので突っ込み希望…。

私の知り合いにも、最初の投稿時の日付は維持したまま、「更新履歴」としてメニューとして表示したいと
いうニーズがありました。

現状では
「最新投稿アイテム~件」
として<%date%>を使用したテンプレートと、
「最新更新アイテム~件」
として<%UpdateTime%>を使用したテンプレートを二つ並べて表示する必要があって、
それが「最新更新アイテム~件」だけで統一したいという事でした。

上記のような表記をしている人はたまに見かけるので、たぶんニーズはそれなりにあるのかもと思ってます。


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

オフライン

#6 2005-02-07 10:44:49

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

Re: <%UpdateTime%>と<%date%>の使い分け方法

藤咲 さんの発言:

すごい浅はかな考えなんですが、
elseをひとつ外に出したら良いような気がするのですが、どうでしょうか。
#思いつきで書いてるので突っ込み希望…。

浅はかでした…orz
そもそも<%UpdateTime%>が<%date%>と同じ動きをするわけじゃないんですよね。忘れてました…。

NucleusをCMS的に使う場合に、「更新履歴」として新規投稿と記事更新を同等に扱えたらなぁと思ってるんですが、
CMS的に使う人って以外といないのでしょうかね…。


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

オフライン

#7 2005-02-09 12:07:06

naha
メンバー
登録日: 2004-10-31
投稿: 68

Re: <%UpdateTime%>と<%date%>の使い分け方法

お返事が遅れて申し訳ありません。

elseまでたどり着かない、というレスを出す前に、
私も else を外に出してみたのですが、だめでした。
コードがよくわからないまま、だめもとでやってみたので、レスには明記しませんでした・・すみません。

私のやりたいことですが…
カテゴリのひとつがお知らせページのようになっていて、
「Aについて - xx月yy日」
「Bについて - xx月yy日」
「Cについて - xx月yy日」
のようにA,B,Cの順番を変えたくないアイテムが並んでいます。
(日付は、最初の投稿日時は必要なくて、常に最新のものを表示したい。)
現在は、「StickyItで固定に並べる + 投稿日時を上書き」にしておりますが、
アイテムが増減すると、StickyItをその都度書き換えなければならないため、
<%UpdateTime%>でできないだろうか?と思い、質問させていただきました。
そうちょくちょくアイテムの増減があるカテゴリではないので、今の対応でも大丈夫ではあります。

オフライン

#8 2005-02-10 18:53:33

jun
メンバー
登録日: 2004-02-07
投稿: 345

Re: <%UpdateTime%>と<%date%>の使い分け方法

現在アイテムに重要度(例:★★★とか★)をつけるプラグインを作成中なのですが、ついでに更新時間も記録しちゃえと思ったとき、このトピックスのことを思い出しました。(と言うことで、少し考えてみた)

下記のように書きかえれば希望通りに動くと思います。(一応検証済み)

	function doTemplateVar(&$item){
		$query = 'SELECT r.up_id, UNIX_TIMESTAMP(r.updatetime) as updatetime, UNIX_TIMESTAMP(i.itime) as itemtime, i.inumber FROM '.sql_table('item') . ' as i left join '.sql_table('plugin_rectime') .' as r on r.up_id=i.inumber WHERE i.inumber='.$item->itemid;
		$res = sql_query($query);
		if($row = mysql_fetch_assoc($res)){
			$data['utime'] = date($this->getOption('DateFormat'),$row['updatetime']);
			$up_id = quickQuery('SELECT up_id as result FROM '.sql_table('plugin_rectime').' WHERE up_id = '.$row['inumber']);
			if(!$up_id){
				echo date($this->getOption('DateFormat'),$row['itemtime']);
			}elseif($row['updatetime'] > $row['itemtime']){
				echo TEMPLATE::fill($this->getOption('AfterTime'),$data);;
			}elseif($row['updatetime'] < $row['itemtime']){
				echo TEMPLATE::fill($this->getOption('BeforeTime'),$data);;
			}
		}
	}

オフライン

#9 2005-02-11 14:54:49

naha
メンバー
登録日: 2004-10-31
投稿: 68

Re: <%UpdateTime%>と<%date%>の使い分け方法

ありがとうございます。<%UpdateTime%>だけであらわせることができました!
いつもわがままな質問ですみません…

オフライン

Board footer