BugTrack/422
の編集
Top
/
BugTrack
/
422
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
*&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}; -別の機能になってしまいますが、&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
タイムスタンプを変更しない
*&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}; -別の機能になってしまいますが、&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
テキスト整形のルールを表示する
添付ファイル:
new.inc.php-1.2+sha.2
1349件
[
詳細
]
new.inc.php-1.2+sha
1202件
[
詳細
]