**見出し番号をx.x.x形式で出力する [#o21d6d68] |RIGHT:70|LEFT:410|c |~バージョン|全部| |~投稿者|[[pooh]]| |~状態|提案| |~投稿日|&new{2008-10-09 (木) 19:09:34};| ***メッセージ [#oc17386e] 見出し番号を下記、 1 1.1 1.1.1 1.2 1.1.2 1.1.3 のように表示できるプラグインがほしいです。 「[[number プラグイン>自作プラグイン/number.inc.php]]」で箇条書き「-,--」には対応していますが、見出し「*,**」に対応されていません。 ***コメント [#b62f7ebd] - 私も同じようなプラグイン希望です。&br;見出しでnumberプラグインが使えないので、numberを改造して無理やり使ってます。&br;要望どおり「*,**」の見出しでもうまく機能して勝手にカウントアップしないようになりましたが、wikiソース記述は見苦しい状態です。(改造部分のPHPのソースもきれいではありませんが・・・)&br;&br;もっと使いやすいプラグインがあればと思っておりました。 -- [[boo]] &new{2008-10-10 (金) 09:20:40}; - ほしい!!! -- &new{2008-10-12 (日) 13:06:15}; - ↑の「ほしい」は拙作の「改造版numberプラグイン」のリクエストでしょうか?&br;かなり行き当たりばったり的に改造したのでここにアップするのも気が引けます。&br;ちなみに、wikiの記述イメージは、number()の第1引数の先頭に「+」を付け加えるとカウントアップのみ。「-」を付けるとカウントアップしない。「+」でも「-」でもない場合は今までと互換動作。というものです。&br;なので、見出し「*,**」などで使うには、その前の行でカウントアップのみ実行し、見出し行ではカウントアップしないという使い方で記述します。&br;とりあえずこの仕様でcontentsプラグインがあっても期待通りの動作をしています。 -- [[boo]] &new{2008-10-14 (火) 14:14:59}; - この見出しプラグイン良いですね。どなたか作ってほしい・・・。 -- &new{2008-10-23 (木) 19:42:02}; - やっつけ気味ですが・・・ -- &new{2008-10-26 (日) 02:55:06}; <?php define(PLUGIN_CHAPTER_MAX_DEPTH,10); define(PLUGIN_CHAPTER_SEPARATOR,'.'); function plugin_chapter_inline() { static $counter = array(); global $vars; foreach(debug_backtrace() as $r) if($r["function"] == "make_heading") return false; $args = func_get_args(); array_pop($args); $div = (is_null($args[1])) ? '' : $args[1]; $depth = ($args[0] == "" || is_null($args[0])) ? 1 : intval($args[0]); $depth = (is_null($args[0]) || $args[0] == "") ? 1 : intval($args[0]); if(is_null($counter[$vars['page']][$div])){ $counter[$vars['page']][$div]['count'] = array_fill(1, PLUGIN_CHAPTER_MAX_DEPTH, 0); $counter[$vars['page']][$div]['last_depth'] = 1; } if($depth <= 0 || $depth > PLUGIN_CHAPTER_MAX_DEPTH) return '<strong>(chapter: "<em>'. htmlspecialchars($args[0]) .'</em>" wrong parameter)</strong>'; if($depth < $counter[$vars['page']][$div]['last_depth']) for($i=$depth+1;$i<=PLUGIN_CHAPTER_MAX_DEPTH;$i++) $counter[$vars['page']][$div]['count'][$i] = 0; $counter[$vars['page']][$div]['count'][$depth]++; $numstr = implode(PLUGIN_CHAPTER_SEPARATOR,array_slice($counter[$vars['page']][$div]['count'], 0, $depth)); $counter[$vars['page']][$div]['last_depth'] = $depth; return $numstr; } ?> 上記ソースをchapter.inc.phpという名前でpluginフォルダに保存・アップロードし、&chapter(['''depth''',['''division''']]);みたいな感じで使ってください。(number.inc.phpとはパラメータの順番が逆になっています) - ありがたく使わせていただきます_(__)_ -- &new{2008-11-19 (水) 21:33:58}; - chapterプラグインを改造して#contentsでも表示できるようにして使わせてもらってます。chapterの作者に感謝。 -- [[koh]] &new{2009-02-07 (土) 02:39:47}; - 大変便利だと思います。#contentsで表示できるようにはどうすればよいのでしょうか? -- &new{2009-02-17 (火) 14:38:48}; - こんな修正をしてます。ページに添付できないようなので、はりつけときますね。 -- [[koh]] &new{2009-03-05 (木) 01:53:10}; -- 大変便利だと思います。#contentsで表示できるようにはどうすればよいのでしょうか? -- &new{2009-02-17 (火) 14:38:48}; -- こんな修正をしてます。ページに添付できないようなので、はりつけときますね。 -- [[koh]] &new{2009-03-05 (木) 01:53:10}; --- chapter.inc.php-orig 2009-02-07 01:26:59.000000000 +0900 +++ chapter.inc.php 2009-02-07 01:59:53.000000000 +0900 @@ -7,14 +7,16 @@ static $counter = array(); global $vars; - foreach(debug_backtrace() as $r) if($r["function"] == "make_heading") return false; - + $make_heading = false; + foreach(debug_backtrace() as $r) if($r["function"] == "make_heading") $make_heading = true; + $args = func_get_args(); array_pop($args); $div = (is_null($args[1])) ? '' : $args[1]; $depth = ($args[0] == "" || is_null($args[0])) ? 1 : intval($args[0]); if(is_null($counter[$vars['page']][$div])){ $counter[$vars['page']][$div]['count'] = array_fill(1, PLUGIN_CHAPTER_MAX_DEPTH, 0); + $counter[$vars['page']][$div]['mh'] = array_fill(1, PLUGIN_CHAPTER_MAX_DEPTH, false); $counter[$vars['page']][$div]['last_depth'] = 1; } if($depth <= 0 || $depth > PLUGIN_CHAPTER_MAX_DEPTH) @@ -22,7 +24,9 @@ if($depth < $counter[$vars['page']][$div]['last_depth']) for($i=$depth+1;$i<=PLUGIN_CHAPTER_MAX_DEPTH;$i++) $counter[$vars['page']][$div]['count'][$i] = 0; - $counter[$vars['page']][$div]['count'][$depth]++; + if (!$counter[$vars['page']][$div]['mh'][$depth]) + $counter[$vars['page']][$div]['count'][$depth]++; + $counter[$vars['page']][$div]['mh'][$depth] = $make_heading; $numstr = implode(PLUGIN_CHAPTER_SEPARATOR,array_slice($counter[$vars['page']][$div]['count'], 0, $depth)); $counter[$vars['page']][$div]['last_depth'] = $depth; あまりテストしてませんが、大丈夫ではないかと。。。 #comment