todo.inc.php

サマリTODO など、各ページに散らばったマーク付き行を grep して一覧表示する
リビジョン0.01
対応バージョン1.4.3
投稿者tai?
投稿日2004-07-28 (WED) 12:58:56

解説

トピック別や時系列でページを書き続けていると、TODO などの小さな項目が各所に分散してしまい管理が難しくなります。一方、意識して TODO は TODO ページ、のように細かく種類分けして書くと書き分けが手間です。

こういう「トピック化するのも煩雑だがまとめて管理したい」という項目を「1行トピック」と私は呼んでいますが、これを検索して一覧表示してくれるプラグインです。

使い方

*** PukiWiki 開発
- [PROJECT] todo プラグイン開発。完成&登録中。

- [TODO] プラグインを登録すること

のように [タグ] 形式で行が始まるように 書いておくと(「*」や「-」で始まっても 大丈夫です)、後で

*** プロジェクトと一行ステータス
#todo('', PROJECT)

*** TODO 一覧
#todo('', TODO)

として一覧表示することができます。 一覧中の各引用行には元ページへのリンクも 付くので、行一覧画面から辿っての編集作業も 簡単にできます。#calendar2 プラグインで 時系列に書きながら [TODO] を書いていくと、 登録時間もページ名でわかるので便利です。

ダウンロード

コメント

  • 便利に使わせていただいてます。開発ありがとうございます。 -- :のん? 2005-03-20 (日) 01:52:56
  • howm-mode? -- 2005-04-05 (火) 14:25:09
  • 行頭が、「+」の見出になると、表示できないです。 -- zyx? 2005-09-12 (月) 14:57:08
    • 「+」の見出しに対応させるには
      // 探索するマーク行のパターン
      $expr = "/^[\*\-\+\s]*(\[".$mark."\].*)/i";
      にすればよさそうですよ。 -- 2005-10-14 (金) 13:08:53
  • 大変有用なpluginありがとうございます。
    自分はTODOを書くとき、最初に日付も書くようにしているので、todo_generate_index()関数で
       foreach ($todo as $page => $list) {
           sort($list);
           foreach ($list as $line) {
               $html .= "- " . $line . " [[[" . $page . "]]]\n";
    のようにsort()を入れておくと、日付順でソートされてでてくるので便利です。 -- 志田 2005-10-11 (火) 08:52:37
  • *だとアンカー(こんなの→ [#k47cdb8d]) が表示されるんですが、これを表示しないようにすることって出来ないでしょうか? -- TOBY? 2006-04-18 (火) 01:47:30
    • 私も見出しにtodoタグを書いた場合にアンカーが含まれて困っています。自力でアンカーを消してみようと
      todo.inc.php 104行目辺りtodo_search関数内
      
      foreach (get_source($name) as $line) {
      + $line = preg_replace('/^(\*{1,3}.*)\[#[A-Za-z][\w-]+\](.*)$/m','$1$2',$line);
      if (preg_match($expr, $line, $match)) {
      と一行追加してアンカーは消えたのですが、これで大丈夫かな~と聊か不安です; -- Mim? 2006-07-28 (金) 23:24:38
  • 1ページあたりn件表示として、多すぎるtodoをページで管理できるように出来ませんか? -- 2006-05-07 (日) 08:04:14
  • 上から古い順になっているので、並び順を選んで設定できるといいなと思ったのですが…… -- 玉? 2007-01-27 (土) 01:13:00
  • [TODO]のタグを非表示にする方法 -- kahata 2008-02-03 (日) 22:17:56
    便利なプラグインをありがとうございます。コードを読んで大変参考になりまた。ところで、[TODO]などのタグの表示がわずらわしい場合は、タグを[%TODO%]のような仕様にして、default.ini.phpのユーザ定義ルールに以下を追加すると[%TODO%]を非表示にできます。
    /////////////////////////////////////////////////
    // ユーザ定義ルール(コンバート時に置換)
    $line_rules = array(
    
    //------ 途中省略 -----------
    
    // TODO のタグを隠す
    	'\[%' => '<span style="display:none">',
    	'%\]' => '</span>',
    );
    tag.inc.phpと組み合わせて使い分けると、きめの細かい索引付けができると思います。
  • アンカーへのジャンプを可能にするpatch -- kahata 2008-02-04 (月) 10:56:24
    以下のpatchを当てると、[TODO]が記入された1行に&aname(hoge); のアンカーを埋め込むことによりこのアンカーへジャンプすることができます。
    function todo_generate_index($vars, $page, $mark) {
       $todo = todo_search($vars, trim($page), trim($mark));
    
       foreach ($todo as $page => $list) {
    	foreach ($list as $line) {
    
     // &aname();が使えるようにする
    +	   $anchor ='';
    +	    if (preg_match("/.*&aname\((.*)\);.*/i", $line, $match)) {
    +		$anchor = "#" . $match[1];
    +	    }
    -	    $html .= "- " . $line . " [[[" . $page . "]]]\n";
    +          $html .= "- " . $line . " [[[" . $page . $anchor . "]]]\n";
    	}
       }
       return convert_html($html);
    }
    • &aname(hoge);を埋め込まなくてもマークの付いた行に自動的にジャンプできればよいのですが・・・
      アイデアがあれば教えてください。 -- kahata 2008-02-04 (月) 22:35:55
      • aname を埋め込まない方法で、以下の方法でやってみました。
        function todo_generate_index($vars, $page, $mark) {
           $todo = todo_search($vars, trim($page), trim($mark));
        
           foreach ($todo as $page => $list) {
        	foreach ($list as $line) {
        
        +	   $anchor ='';
        +          if (preg_match("/^[\*\-\s]*(\[". $mark ."\][^#]*)(?:\[#([A-Za-z][\w-]+)\])?$/m", $line, $match)) {
        +              $line = $match[1];
        +              if (isset($match[2])) {
        +                  $anchor = "#" . $match[2];
        +              }
        +          }
        -	    $html .= "- " . $line . " [[[" . $page . "]]]\n";
        +          $html .= "- " . $line . " [[[" . $page . $anchor . "]]]\n";
        	}
           }
           return convert_html($html);
        }
        todosearchの中身と同じような正規表現をもう一度書いているのが気にはなっています --ari? 2009-07-02 (木) 20:36:59
  • todoプラグインを使わせていただきました。ありがとうございます。 -- BinaryShark? 2008-02-11 (月) 13:16:59
  • #todo(,".*hoge.*")のように正規表現で書くと、マークの中にhogeを含む全てのmarkをリストアップします。非常に便利です。 -- kahata 2008-02-29 (金) 16:50:48
  • [TODO]のタグを非表示にする方法2 -- in? 2008-04-04 (金) 14:21:57
    todo_generate_index内を修正
    foreach ($list as $line) {
    + $line = substr($line, strlen($mark)+1, strlen($line));
  • 大変重宝しています。複数タグを利用する方法があればよいのですが... -- takasima? 2009-03-28 (土) 14:13:06
    • 複数タグの利用というのが
      [急ぎ][TODO]プラグインを登録すること
      という見出しのタグをどちらでも引っ張れるという意味でしたら、私は以下のようにしています。-- ari? 2009-07-14 (火) 14:57:38
      function todo_search(...)
         :
          // 探索するマーク行のパターン
          //$expr = "/^[\*\-\s]*(\[".$mark."\].*)/i";
          $expr = "/^[\*\-\s]*((\[\S+\])*\[".$mark."\](\[\w+\])*.*)/m";
  • Pukiwiki1.4.7(UTF8)、PHP 5.1.6で使わせてもらったのですが、一覧表示の並び順に規則性はあるのでしょうか?。ページ名で昇順なのかと思ったのですが、試した限りではページ名や行の記述内容に関係なくバラバラに一覧表示されました。決まりがわかりません・・・。 -- moon? 2010-01-30 (土) 02:20:28
    • また、上のコメントで書かれていたsort()も試しましたが、バラバラのままでした。正しくソートさせて表示できている方はいるのでしょうか? -- moon? 2010-01-30 (土) 02:22:49
  • ソースをぱっと見ただけですが、デフォルトはget_existpages() でファイルシステムから渡されたファイル順 →各ページのデータでtodo のルールにヒットした順、の優先順位で並ぶと思います。
    上のコメントに書かれているsort() は各ページのデータの部分だけを並び替えるもので、ページ名の順に直すためのものではありません。(ファイルシステムから渡された順番のままです) -- 2010-01-30 (土) 08:36:46
    • ページ名でソートするには、例えば
      function todo_generate_index($vars, $page, $mark) {
          $todo = todo_search($vars, trim($page), trim($mark));
          ksort($todo, SORT_STRING);
      
          foreach ($todo as $page => $list) {
      	foreach ($list as $line) {
      のようにして、配列$todo そのものの順番を並べ替える必要があります。(todo_search() 内で先に並べ替えておいてもかまいません。そのへんは好みでどうぞ) -- 2010-01-30 (土) 08:36:46
  • 情報ありがとうございます。ページ名でソートできました。カレンダーに書いたTODOを降順で一覧にしたかったので、"krsort"を使いました。最新のものが上に来るので便利です。ありがとうございます! -- moon? 2010-01-31 (日) 02:48:36

添付ファイル: filetodo.inc.php.txt 5036件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-12-26 (日) 17:15:23
Site admin: PukiWiki Development Team

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

OSDN