*&new{ページ名};でそのページの鮮度がNEW!で表示されて欲しい [#v3951506]

-ページ: BugTrack
-投稿者: [[sha]]
-優先順位: 普通
-状態: 完了
-カテゴリー: プラグイン
-投稿日: 2003-07-12 (土) 02:59:31
-バージョン: 1.4rc3

**メッセージ [#n4afeba5]
MenuBarなどに張ったリンクに対して、内容が更新された場合にNEW!などと表示して欲しいです。&newは現在&new{''日付''};で''日付''が書きこみなどで更新される場合にはよいですが、MenuBar等に置いて別のページの更新はチェックできません。そこで、&new{''ページ名''};のように仕様を拡張して、これが出来るようになれば便利だと思います。いかがでしょうか?是非欲しい機能です。

----
-AutoLinkが有効になっていると{}のページ名がPukiWiki側でリンク変換されるので、{}内に指定したページ名を取得するのは難しいです。よって実現する場合の仕様は以下のようになるでしょうか。 -- [[にぶんのに]] &new{2003-07-12 (土) 23:37:44};
 &new{日付};
 &new(ページ名);
現状でも日付のページ(yyyy-mm-dd)が存在するとnewの判定が失敗するので、そもそもの仕様としては{}でなく()内で指定するのが正しいのかもしれません。(移行が非常に悩ましいですが)
--日付のページが存在すると判定に失敗する…これは気がつきませんでした ;( -- [[ぱんだ]] &new{2003-07-14 (月) 14:42:30};
--あう。ゴメンなさい。()の中でも駄目かもです。日付のフォーマットに曜日の()があるんだった X(
-どちらか最初に指定されたほう、という仕様にすればいいですかね。 -- [[ぱんだ]] &new{2003-07-14 (月) 14:21:24};
 &new{日付};
 &new(日付1){日付2};  日付1を採用 日付2を無視
 &new(ページ名);
-
 Index: new.inc.php
 ===================================================================
 RCS file: /cvsroot/pukiwiki/pukiwiki/plugin/new.inc.php,v
 retrieving revision 1.2
 diff -u -r1.2 new.inc.php
 --- new.inc.php	30 Apr 2003 08:17:15 -0000	1.2
 +++ new.inc.php	14 Jul 2003 05:39:54 -0000
 @@ -31,15 +31,26 @@
  	}
  	
  	$args = func_get_args();
 -	
 -	$date = array_pop($args);
 -	if (($timestamp = strtotime($date)) === -1)
 +	$date = array_pop($args); // {}部分の引数
 +	if (count($args))
 +	{
 +		$date = join(',',$args); // ()部分の引数があればそちらを採用
 +	}
 +	if (is_page($date))
 +	{
 +		$timestamp = get_filetime($date);
 +		$retval = make_pagelink($date);
 +	}
 +	else if (($timestamp = strtotime($date)) !== -1)
 +	{
 +		$timestamp -= LOCALZONE;
 +		$retval = htmlspecialchars($date);
 +	}
 +	else
  	{
  		return FALSE;
  	}
 -	$retval = htmlspecialchars($date);
 -
 -	$erapse = UTIME - $timestamp + LOCALZONE;
 +	
 +	$erapse = UTIME - $timestamp;
  	foreach ($_plugin_new_elapses as $limit=>$tag)
  	{
  		if ($erapse <= $limit)
-「[[official:欲しいプラグイン/45]]」にも記載してますが、下の階層のページ(例えば、「ページ名/3」など)が更新された場合にも&color(red){NEW!};が表示されて欲しいです。
 &new(ページ名/*);
のような記述の方法で可能にできないものでしょうか?#trackerを使っている場合などにありがたみ倍増です。 -- [[sha]] &new{2003-07-14 (月) 19:45:05};
-こんなのはどうでしょうか?tracker.inc.phpの一部を流用。まだ動作確認はしてません。 -- [[sha]] &new{2003-07-16 (水) 03:00:37};
 	if (is_page($date))
 	{
 		$timestamp = get_filetime($date);
 		$retval = make_pagelink($date);
 	}
 +      //else if ( preg_match("/\/\*$/", $date) ){
 +      else if ( substr($date, -2) === "/*" ) { 
 +              $refer_len = strlen($date)-2;
 +              $refer     = substr($date, 0, $refer_len);
 +              $timestamp = 0;
 +              $retval    = "";
 +              foreach (get_existpages() as $_page)
 +              {
 +                      if (strpos($_page,$refer) === 0)
 +                      {
 +                            $tm = get_filetime($_page);
 +                            if ( $timestamp < $tm ) {
 +                                    $timestamp = $tm;
 +                                    $retval = make_pagelink($_page);
 +                             }
 +                      }
 +               }
 +      }
 	else if (($timestamp = strtotime($date)) !== -1)
 	{
 		$timestamp -= LOCALZONE;
		$retval = htmlspecialchars($date);
 	}
-これではまずいようです。初期値$timestamp=0だと、NEWを表示すべきページが無かった場合にも最初のページが該当してしまいます。NEWを表示する最も古い時間をセットすべきでした。また、ページ名でマッチングするときに、''/''も含めないと下層でないページまでチェックする可能性が出てしまいます。そこで上の修正の代わりに、こんな修正にしてみました。なかなかうまく動いています。 -- [[sha]] &new{2003-07-17 (木) 14:26:16};
   function plugin_new_init()
   {
 +     global $_maxsec;
       ....
 +     $_maxsec = 0;
 +     foreach ( $_plugin_new_elapses as $key=>$val )
 +     {
 +         if ( $_maxsec < $key ) $_maxsec = $key;
 +     }
   }
-
   function plugin_new_inline()
   {
 +     global $_maxsec;
       ....
 +      //else if ( preg_match("/\/\*$/", $date) ){
 +      else if ( substr($date, -2) === "/*" ) { 
 +              $refer_len = strlen($date)-1;
 +              $refer     = substr($date, 0, $refer_len);
 +              $timestamp = UTIME - $_maxsec;
 +              $retval    = "";
 +              foreach (get_existpages() as $_page)
 +              {
 +                      if (strpos($_page,$refer) === 0)
 +                      {
 +                            $tm = get_filetime($_page);
 +                            if ( $timestamp < $tm ) {
 +                                    $timestamp = $tm;
 +                                    $retval = make_pagelink($_page);
 +                             }
 +                      }
 +               }
 +               if ( $retval === "" ) $timestamp = 0;
 +      }
-というわけで、new.inc.phpのv1.2に上の変更を加えてみたものを添付してみました。&ref(new.inc.php-1.2+sha);での修正を次のリビジョンに反映していただけると幸いです。 -- [[sha]] &new{2003-07-17 (木) 19:47:05};
-別の機能になってしまいますが、&amp;newを使う場所によっては、NEWだけが欲しくて日付やページ名の出力が不要な場面とあったら嬉しい場面があります。そこで、nodateのような引数で切り替えができると嬉しいです。 -- [[sha]] &new{2003-07-17 (木) 20:14:49};
--作ってみました。&ref(new.inc.php-1.2+sha.2);では、引数に''nostring''とつけると、''NEW!''以外の文字列を出力しないように出来ます。例えば、メニューの横につける場合には、''nostring''でファイルを指定し、#tracker_listのときには''nostring''無しで日付を指定したりします。これが結構便利です。以下が記述方法です。 -- [[sha]] &new{2003-07-28 (月) 13:38:41};
 &new(nostring,2003-07-28 (月) 13:38:41);
 &new(nostring,BugTrack/*);
---PHP 5.1からの[[strtotimeの仕様変更対応>dev:BugTrack2/120]]の修正です。 -- [[BECK]] &new{2006/06/20 (火) 14:41:41};~
new.inc.php-1.2+sha.2に対しての差分です。
 -	else if ( ( $timestamp = strtotime($date)) !== -1 )
 -	{
 -		$timestamp -= LOCALZONE;
 -		$retval = htmlspecialchars($date);
 -	}
 -	else {
 -		return FALSE;
 -	}
 +	else { 
 +		// PHP 5.1からのstrtotime()の仕様変更対応
 +		if(LANG == 'ja') {
 +			$timestamp = strtotime(preg_replace('/\([^\x00-\x7f]+\)/','',$date));
 +		} else {
 +			$timestamp = strtotime($date);
 +		}
 +		if ($timestamp === -1 || $timestamp === FALSE) {
 +			$timestamp = strtotime("now");	// 何も指定無し now セット
 +		}
 +		$timestamp -= LOCALZONE;
 +		$retval = htmlspecialchars($date);
 +	}

-ありゃ。被っちゃいました。以下のような指定方法を考えていたんですが。 -- [[ぱんだ]] &new{2003-07-28 (月) 15:20:39};
 カレントページ
  &new;
 ページ指定
  &new([page][,nolink]);
 プレフィクス指定
  &new(prefix/[,nolink]);
 日付文字列
  &new([nodate]){日付文字列};
--あ、ええと、お任せします。機能は同じですので、他のコマンドと統一感のある引数になっている[[ぱんだ]]さんの方がよさそうですね。 -- [[sha]] &new{2003-07-28 (月) 15:53:34};
-要望です。「ページ指定」の場合に、''new!''表示するときだけ「ページ名」が表示されるオプションが欲しいです。「プレフィックス指定」の場合にはそのような仕様になっていますが、新しいときだけページ名が現れるので非常に便利でした。これを「ページ指定」の時にも使いたいです。むしろ、仕様をそのように変更してもよいかもしれません。nolink指定があるので使用方法のバリエーションには問題ないでしょう。 -- [[sha]] &new{2003-07-29 (火) 13:27:57};

#comment
//#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.042 sec.

OSDN