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

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

メッセージ

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


  • AutoLinkが有効になっていると{}のページ名がPukiWiki側でリンク変換されるので、{}内に指定したページ名を取得するのは難しいです。よって実現する場合の仕様は以下のようになるでしょうか。 -- にぶんのに 2003-07-12 (土) 23:37:44
    &new{日付};
    &new(ページ名);
    現状でも日付のページ(yyyy-mm-dd)が存在するとnewの判定が失敗するので、そもそもの仕様としては{}でなく()内で指定するのが正しいのかもしれません。(移行が非常に悩ましいですが)
    • 日付のページが存在すると判定に失敗する…これは気がつきませんでした ;( -- ぱんだ 2003-07-14 (月) 14:42:30
    • あう。ゴメンなさい。()の中でも駄目かもです。日付のフォーマットに曜日の()があるんだった X(
  • どちらか最初に指定されたほう、という仕様にすればいいですかね。 -- ぱんだ 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」など)が更新された場合にもNEW!が表示されて欲しいです。
    &new(ページ名/*);
    のような記述の方法で可能にできないものでしょうか?#trackerを使っている場合などにありがたみ倍増です。 -- sha 2003-07-14 (月) 19:45:05
  • こんなのはどうでしょうか?tracker.inc.phpの一部を流用。まだ動作確認はしてません。 -- sha 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 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に上の変更を加えてみたものを添付してみました。filenew.inc.php-1.2+shaでの修正を次のリビジョンに反映していただけると幸いです。 -- sha 2003-07-17 (木) 19:47:05
  • 別の機能になってしまいますが、&newを使う場所によっては、NEWだけが欲しくて日付やページ名の出力が不要な場面とあったら嬉しい場面があります。そこで、nodateのような引数で切り替えができると嬉しいです。 -- sha 2003-07-17 (木) 20:14:49
    • 作ってみました。filenew.inc.php-1.2+sha.2では、引数にnostringとつけると、NEW!以外の文字列を出力しないように出来ます。例えば、メニューの横につける場合には、nostringでファイルを指定し、#tracker_listのときにはnostring無しで日付を指定したりします。これが結構便利です。以下が記述方法です。 -- sha 2003-07-28 (月) 13:38:41
      &new(nostring,2003-07-28 (月) 13:38:41);
      &new(nostring,BugTrack/*);
      • PHP 5.1からのstrtotimeの仕様変更対応の修正です。 -- BECK? 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);
        +	}
  • ありゃ。被っちゃいました。以下のような指定方法を考えていたんですが。 -- ぱんだ 2003-07-28 (月) 15:20:39
    カレントページ
     &new;
    ページ指定
     &new([page][,nolink]);
    プレフィクス指定
     &new(prefix/[,nolink]);
    日付文字列
     &new([nodate]){日付文字列};
    • あ、ええと、お任せします。機能は同じですので、他のコマンドと統一感のある引数になっているぱんださんの方がよさそうですね。 -- sha 2003-07-28 (月) 15:53:34
  • 要望です。「ページ指定」の場合に、new!表示するときだけ「ページ名」が表示されるオプションが欲しいです。「プレフィックス指定」の場合にはそのような仕様になっていますが、新しいときだけページ名が現れるので非常に便利でした。これを「ページ指定」の時にも使いたいです。むしろ、仕様をそのように変更してもよいかもしれません。nolink指定があるので使用方法のバリエーションには問題ないでしょう。 -- sha 2003-07-29 (火) 13:27:57

添付ファイル: filenew.inc.php-1.2+sha.2 1179件 [詳細] filenew.inc.php-1.2+sha 1026件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-06-20 (火) 14:44:08
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.277 sec.

OSDN