トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BugTrack-wiki/105

ページの作成や編集にはユーザ登録が必要です。

recentcalendar/futurecalendarプラグインの指定セクション表示

  • 投稿者: BJM(と)
  • カテゴリ: プラグイン
  • 優先度: 普通
  • 状態: リリース済
  • 日時: 2003年07月30日 03時23分43秒

 内容

3.4.2release現在、recentcalendar/futurecalendarプラグインの指定セクション表示オプションにおいて、もし指定した名前のセクションが存在しない場合、そのページのすべてが表示されてしまいます。

しかし、数日ごとに書かれる(同じタイトルの)記事を抽出するといった用途が考えられるので、そのタイトルのセクションがない場合は !!!yyyy-mm-dd も含めて全く表示しないのが妥当だと思われます。

他に、存在しないことを警告するというやり方もありますが、

上記目的を鑑みるに表示しない方が要望は多いと思う。

この方針でいく場合は、CalendarHandler.pmの make_recent_pages の

    if ($para ne "") {
      if ($source =~ /(\n|^)!!!\s*$para((.|\s|\r|\n)*?)\s*(\n!!!|$)/) {
	$source = $2;
      } elsif ($source =~ /(\n|^)!!\s*$para((.|\s|\r|\n)*?)\s*(\n!!|$)/) {
	$source = $2;
      } elsif ($source =~ /(\n|^)!\s*$para((.|\s|\r|\n)*?)\s*(\n!|$)/) {
	$source = $2;
      } else {
	$source = $source;
      }
    }

の最後の部分を

      } else {
	$cgi->param("page",$pagetmp);
	next;
      }
    }

とすればいいようです。

また、同じ方向性で行くならば、「条件を満たすセクションを全て表示」というオプションも欲しいです。これは、allとか0という指定でも良いし、「デフォルトは全部」でもいいように思います。0指定 / デフォルトがこの挙動というならば、

  my $count        = ($2 ? $2 : 1);

  my $count        = ($2 ? $2 : 0);

とするだけと、楽ですよね。

#デフォルトの挙動が最も重いというのはいかがなものかという話はありますが。

 コメント

  • ドキュメントを見なおして気が付いたのですが、

recentcalendarは第2引数で表示件数を指定(省略時1件)できますが

-1を指定することによって過去全件表示することができます。

とありますね・・・。リリース版は仕様に従っていないので、以下の行を修正してください。

---+++ plugin::calendar::CalendarHandler::make_recent_pages
-  $count =~ m/([-]?)\s*(\d*)\s*([+]?)/;
-  my $reverse      = ($1 ?  1 : 0);
-  my $count        = ($2 ? $2 : 1);
-  my $ignore_today = ($3 ?  1 : 0);
+  $count =~ m/\s*([-]?\d*)\s*([+]?)([-]?)/;
+  my $reverse      = ($3   ?  1 : 0);
+  my $count        = ($1+0 ? $1 : 1);
+  my $ignore_today = ($2   ?  1 : 0);
---+++ plugin::calendar::CalendarHandler::make_future_pages
-  return &make_recent_pages(shift, shift, "-".(shift), shift);
+  return &make_recent_pages(shift, shift, (shift)."-", shift);

- Aki (2003年07月30日 13時05分16秒)

  • 3.5.0ではカレンダの実体はincludeプラグインを使用したものになります。そのためパラグラフが存在しなかった場合の挙動はincludeプラグインと同じになります。(「パラグラフが存在しません」というメッセージが表示されてしまいますが・・・) - たけぞう (2003年08月04日 16時56分50秒)
  • 「そのためだけに」includeプラグインに引数を追加するのもなんだかマヌケですが、calendar以外でエラーメッセージが無いincludeの需要があるなら、そういう回避策もあるかと思います - Aki (2003年08月04日 18時28分16秒)
  • 上記のパッチについては3.5.0dev2で取り込みました。インクルードのエラーメッセージについては別件ということでよいでしょうか。 - たけぞう (2003年08月08日 17時19分51秒)
  • お疲れ様です。インクルードの方は暇を見て手を入れるつもりです - Aki (2003年08月08日 19時34分35秒)
  • 状態を「提案」に戻して申し訳ありません。3.4.3に関して、CalendarHandler.pm回りに虫がいたので再利用させていただきます。
 # calendarプラグインと同様の表示
 my $q_para = quotemeta(Util::trim($para));

(中略)

   if ($q_para ne "") {
     if ($source =~ /(\n|^)!!!\s*$q_para((.|\s|\r|\n)*?)\s*(\n!!!|$)/) {
	$buf .= $wiki->process_wiki("!!![[$year-$month-$day|$page]]\n{{include $page,$para}}\n");
    } elsif ($source =~ /(\n|^)!!\s*$q_para((.|\s|\r|\n)*?)\s*(\n!!|$)/) {
	$buf .= $wiki->process_wiki("!!![[$year-$month-$day|$page]]\n{{include $page,$para}}\n");
	
     } elsif ($source =~ /(\n|^)!\s*$q_para((.|\s|\r|\n)*?)\s*(\n!|$)/) {
	$buf .= $wiki->process_wiki("!!![[$year-$month-$day|$page]]\n{{include $page,$para}}\n");
     } else {

要するに、includeするときはquotemetaしていないものを渡さねばならないと。同様の虫は3.5.0devにも存在します。- BJM(と) (2003年08月16日 06時52分35秒)

  • 3.4系では3.4.4で修正しました。 - たけぞう (2003年08月17日 14時07分05秒)
  • 本件リリース済みとなっていますが、recentcalendarプラグインがincludeプラグインを使うようになって、「内容」で説明される不具合は解消されていません。「インクルードのエラーメッセージについては別件」とありますが、Bugtrackには挙がっていないようです。アドホックなものでもかまいませんので、「内容」で説明される不具合の解消法(includeプラグインの改造法)をご教示ねがえないでしょうか。よろしくお願いします。 - 名無しさん (2005年06月29日 23時11分40秒)
お名前: コメント:

最終更新時間:2005年06月29日 23時11分40秒