サマリ | #contents のプラグイン化、そして拡張 |
---|---|
リビジョン | 1.0 |
対応バージョン | 1.4.x |
投稿者 | sonots |
投稿日 | 2005-02-07 (月) 14:01:14 |
sonots:contents2_1.inc.php に引っ越しました。フルスクラッチから書き直したsonots:contentsx.inc.php が最新版です。
contents プラグインは実際のところプラグインではなく、本体組み込みの機能です。 拡張がしにくいのでプラグイン化しました。 アイデアの多くは自作プラグイン/ls2_1.inc.phpからきています。ということで名前はcontents2_1 です。
#contents をおいた位置より上の見出しが表示されても無駄だなと思っていた人が使うかもしれません。例えばこのページだと上の contents2_1.inc.php のリンクがいらない、と。
MenuBar に
#contents2_1(fromhere=false,hierarchy=false)
としておくのも便利かもしれません。hierarchy はお好みで。
(欲しいプラグイン/170)(欲しいプラグイン/91)(続・質問箱/221)(続・質問箱/220)(質問箱/287)(欲しいプラグイン/125)(dev:BugTrack/617) (質問箱/59)(続・質問箱/447)(続・質問箱/306)
問題1.include オプションを完全にはできないことが発覚しました。アンカー番号は convert_html が呼ばれた回数が振られるのですが、#contents2_1 が数えているのは結局のところ #include の数にしかすぎません。 つまり、convert_html を呼ぶ include 以外のプラグインが呼ばれるときっとずれます。
問題2.#include でとりこまれたページで表示される #contents2_1 のアンカーリンクの番号がまた1からはじまりうまくいきません。これは痛いです。
考察1.convert_html 中の static $contents_id を global にしたらどうかと考えてみましたが、だめです。
考察2.plugin_contents2_1_convert を convert_html が呼んだときに引数で $contents_id を渡す
ことができたらどうかと考えてみましたが、そのように convert_html を改造できたとしても、問題2は直せますが問題1は変わりません。
ちなみに本体組み込み #contents は convert_html が $contents_id を渡しているこのような形です。include オプションがないのでこれ以上は悩む必要がないのです。
問題2のためにやりたいところですが、はてさて・・・。
考察3.とりあえず固定アンカーで逃げる。現在の pukiwiki はデフォルトで $fixed_heading_anchor = 1; のようなので全然ありみたいですね。
現状解.固定アンカーで逃げています。とりあえず解決。
#contents2_1([オプション])
&contents2_1([オプション]);
インライン型プラグイン時は強制的に display=inline となります。
見出しリストを行うページを指定。デフォルトはカレントページ。
#contents2_1 がある次の行以降の見出しのみをリストする。fromhere だけでも true になります。
ファイル中の PLUGIN_CONTENTS2_1_FROMHEARE で初期値を設定できます。デフォルトで TRUE です。
Note: 現状では #contents2_1 が2つあると一番上のものだけに反応してしまいます。
あえて page オプションで表示ページと異なるページを指定した場合は発動しないようにしています。
リスト表示形式の指定。hierarchy では見出しのレベルに応じた階層的リスト表示。
flat では見出しのレベルによらず平らに表示。inline では横に並べて表示。
ファイル中の PLUGIN_CONTENTS2_1_DISPLAY で初期値を設定できます。デフォルトは hierarchy です。
Note: インライン型プラグインとして使用する場合は強制的に display=inline となる。
display=inline 時の前につける文字を設定。
ファイル中の PLUGIN_LS2_1_DISPLAY_INLINE_BEFORE で初期値を設定できます。デフォルトでは '[ ' です。
display=inline 時の区切り文字を設定。
ファイル中の PLUGIN_LS2_1_DISPLAY_INLINE_DELIMITER で初期値を設定できます。デフォルトでは ' | ' です。
display=inline 時の後ろにつける文字を設定。
ファイル中の PLUGIN_LS2_1_DISPLAY_INLINE_AFTER で初期値を設定できます。デフォルトでは ' ]' です。
リストのレベルを調節する。display=hierarchy 用のオプションです。compact だけでも true になります。
ファイル中の PLUGIN_CONTENTS2_1_COMPACT で初期値を設定できます。デフォルトで TRUE です。
表示件数の指定。
Note: include ページ名の表示も1つとカウントします。
見出しレベル指定。1 なら見出しレベル 1 のみを表示する。
2-3 のような指定も可能 (2,3 の意)。2- のように指定するとレベル 2 以上の見出し。。
2+1 のような指定も可能 (2 とそこから +1 。つまり 2,3 の意)。
Note: include ページ名がレベル0、見出しはレベル1以降です。
現状は compact を使用していても(デフォルトで TRUE)、depth オプションで指定するレベルは変わりません。
よって見た目と指定すべきレベルが違うかもしれません。一旦 compact=false として調べれば確実です。
リストしない見出しを正規表現にて指定。
ヒント: ereg で判定を行います。
except=Test|sample → Test または sample を含む見出しを除く。
#include プラグインで取り込んでいるページとその見出しも扱う。include だけでも true になります。
ファイル中の PLUGIN_CONTENTS2_1_INCLUDE で初期値を設定できます。デフォルトで TRUE です。
Note: ページタイトルへのジャンプは #include がアンカーを張ってくれないと無理です。
下のもっと便利に - include2.inc.php をご覧ください。
固定アンカーがあればそれを利用する。fixed_anchor だけでも true になります。推奨です。
ファイル中の PLUGIN_CONTENTS2_1_FIXEDANCHOR で初期値を設定できます。デフォルトで TRUE です。
Note: 固定アンカーをつけるためには pukiwiki.ini.php 中で $fixed_heading_anchor = 1 と設定しなければいけません。現在の pukiwiki ではデフォルトで 1 です。
拡張子の番号をはずして、plugin ディレクトリに放りこんでください。
リビジョン | 日付 | 変更点 |
![]() | 03/05/2005 | include ページタイトルに対するアンカーが固定なアンカーになるように変更。自作プラグイン/include2.inc.phpの最新版が対応しているので include にはそちらを利用してください。これに伴い改造include.inc.phpは表面上消しました。 |
![]() | 03/04/2005 | 自作プラグイン/include2.inc.phpの対応を受けて対応。#include, #include2 共に認識します。 |
![]() | 02/26/2005 | 既知の問題点を固定アンカーで回避。display=inline 時の区切り文字等をオプションでも設定できるようにした。 |
![]() | 02/18/2005 | 要望をうけてリストではなく横一列に表示する機能を追加。それをうけて hierarchy=true,false オプションは display=hierarchy,flat となり、今回の追加機能は display=inline と指定することになりました。depth オプション指定時のレベルを変更。include ページ名がレベル0、見出しはレベル1以降とたぶんわかりやすくなりました。インライン型プラグインとして実行可能に。ただし強制的に display=inline です。CSSで設定しやすいようにHTMLにクラス名を追加。ソースコードの整理。 |
![]() | 02/14/2005 | typo が原因で depth オプションが正しく動いていなかったので修正 |
![]() | 02/08/2005 | pageオプション使用時でもリンクにアンカーしか使用していなかったので修正 |
![]() | 02/08/2005 | v1.05の修正でv1.04時に修正したはずの症状がまたでていたので修正 |
![]() | 02/08/2005 | 今度は再帰 include のときのアンカーの処理が間違っていたので修正 |
![]() | 02/08/2005 | 別のところでまたアンカー付けの処理が間違っていたので修正 |
![]() | 02/08/2005 | アンカー付けの処理が間違っていたので修正 |
![]() | 02/06/2005 | page オプションを指定した場合 fromhere オプションが発動しないようにした。 |
![]() | 02/06/2005 | 初版 |
include プラグインは現状ではページタイトルの見出しにアンカーをつけてくれないので、 ジャンプできません。
自作プラグイン/include2.inc.php は #contetns2_1 のアンカーリンクに対応しているのでそちらを利用するとページタイトルへジャンプできるようになります。
次のような「とあるページ」があったとします。
**AA #contents2_1 *B ***BBB **CC #include(別のページ) *D
「別のページ」の内容は次のとおりだったとします。
*1 #contents2_1 **11
「とあるページ」の #contetns2_1 が変更されると思ってください。
#contents2_1
#contents2_1(fromhere=false)
MenuBar に設定する場合は fromhere=false を用いることになるでしょう。
#contents2_1(page=別のページ)
#contents2_1(compact=false)
#contents2_1(compact=false,include=false)
#contents2_1(compact=false,depth=1-2)
#contents2_1(compact=true,depth=1-2)
#contents2_1(compact=false,depth=1-2,include=false)
#contents2_1(display=flat)
#contents2_1(display=inline,depth=1)
[ B | 1 | D ]
#contents2_1(number=5)
#contents2_1(except=B)
#contents2_1(include=false)
バグ、リクエストなどがあったら教えてください。リクエストは詳細な仕様も書いてくれたりするとうれしいです。
選択肢 | 投票 |
現状(include=true 時は見出しレベルが2以降、include=false 時は見出しレベルが1以降) | 3 |
include=true 時は見出しレベルが2以降、include=false でも見出しはレベル2以降 | 0 |
include=true 時は見出しレベルが2以降 include=false の時は見出しのリスト表示レベルは1以降、でも depth では2以降(include=true時と同じになる) | 0 |
include=true の時は見出しのリスト表示レベルが2以降、でも、depth では1以降 include=false 時は見出しレベルが1以降(アンケート3とほぼ同じ。depth が -1) | 1 |
55: //見出しアンカーの開始番号 56: define('PLUGIN_CONTENTS2_1_ANCHOR_ORIGIN',0); 57: define('PLUGIN_CONTENTS2_1_PAGE_ANCHOR_ORIGIN',1);実際に使われているのは「PLUGIN_CONTENTS2_1_ANCHOR_ORIGIN」で「PLUGIN_CONTENTS2_1_PAGE_ANCHOR_ORIGIN」は使われていませんよね。57行目は削除して56行目の0を1にした方がいいのではないでしょうか。 -- sagen 2005-02-08 (火) 11:02:08