contents2_1.inc.php

Top > Old > Plugin > contents2_1.inc.php

org:自作プラグイン/contents2_1.inc.phpのミラーです。

contents2_1.inc.php の開発は停止します。改めて一から書き直した Plugin/contentsx.inc.php に移行してください。 -- 2006-05-17 (Wed) 01:30:43

#contents のプラグイン化、そして拡張 (old)

サマリ#contents のプラグイン化、そして拡張
リビジョン1.13
対応バージョン1.4.3 - 1.4.5 にて確認済み
投稿者sonots
投稿日2005-02-07 (月) 14:01:14
最終更新日2005-03-05
ライセンスGPL
Table of Contents

説明

contents プラグインは実際のところプラグインではなく、本体組み込みの機能です。 拡張がしにくいのでプラグイン化しました。 アイデアの多くはls2_1.inc.php?からきています。ということで名前はcontents2_1 です。

#contents をおいた位置より上の見出しが表示されても無駄だなと思っていた人が使うかもしれません。例えばこのページだと上の contents2_1.inc.php のリンクがいらない、と。

MenuBar に

#contents2_1(fromhere=false,hierarchy=false)

としておくのも便利かもしれません。hierarchy はお好みで。

関連

書式

#contents2_1([オプション])
&contents2_1([オプション]);

インライン型プラグイン時は強制的に display=inline となります。

オプション

  • page=ページ名

    見出しリストを行うページを指定。デフォルトはカレントページ。

  • fromhere=true|false

    #contents2_1 がある次の行以降の見出しのみをリストする。fromhere だけでも true になります。
    ファイル中の PLUGIN_CONTENTS2_1_FROMHEARE で初期値を設定できます。デフォルトで TRUE です。
    Note: 現状では #contents2_1 が2つあると一番上のものだけに反応してしまいます。 あえて page オプションで表示ページと異なるページを指定した場合は発動しないようにしています。

  • display=hierarchy|flat|inline

    リスト表示形式の指定。hierarchy では見出しのレベルに応じた階層的リスト表示。 flat では見出しのレベルによらず平らに表示。inline では横に並べて表示。
    ファイル中の PLUGIN_CONTENTS2_1_DISPLAY で初期値を設定できます。デフォルトは hierarchy です。
    Note: インライン型プラグインとして使用する場合は強制的に display=inline となる。

  • inline_before=文字列

    display=inline 時の前につける文字を設定。
    ファイル中の PLUGIN_LS2_1_DISPLAY_INLINE_BEFORE で初期値を設定できます。デフォルトでは '[ ' です。

  • inline_delimiter=文字列

    display=inline 時の区切り文字を設定。
    ファイル中の PLUGIN_LS2_1_DISPLAY_INLINE_DELIMITER で初期値を設定できます。デフォルトでは ' | ' です。

  • inline_after=文字列

    display=inline 時の後ろにつける文字を設定。
    ファイル中の PLUGIN_LS2_1_DISPLAY_INLINE_AFTER で初期値を設定できます。デフォルトでは ' ]' です。

  • compact=true|false

    リストのレベルを調節する。display=hierarchy 用のオプションです。compact だけでも true になります。
    ファイル中の PLUGIN_CONTENTS2_1_COMPACT で初期値を設定できます。デフォルトで TRUE です。

  • number=\d+ *1

    表示件数の指定。
    Note: include ページ名の表示も1つとカウントします。

  • depth=\d*[-+]?\d**2

    見出しレベル指定。1 なら見出しレベル 1 のみを表示する。 2-3 のような指定も可能 (2,3 の意)。2- のように指定するとレベル 2 以上の見出し。。 2+1 のような指定も可能 (2 とそこから +1 。つまり 2,3 の意)。
    Note: include ページ名がレベル0、見出しはレベル1以降です。 現状は compact を使用していても(デフォルトで TRUE)、depth オプションで指定するレベルは変わりません。 よって見た目と指定すべきレベルが違うかもしれません。一旦 compact=false として調べれば確実です。

  • except=正規表現

    リストしない見出しを正規表現にて指定。
    ヒント: ereg で判定を行います。 except=Test|sample → Test または sample を含む見出しを除く。

  • include=true|false

    #include プラグインで取り込んでいるページとその見出しも扱う。include だけでも true になります。
    ファイル中の PLUGIN_CONTENTS2_1_INCLUDE で初期値を設定できます。デフォルトで TRUE です。
    Note: ページタイトルへのジャンプは #include がアンカーを張ってくれないと無理です。 下のもっと便利に - include2.inc.php をご覧ください。

  • fixed_anchor=true|false

    固定アンカーがあればそれを利用する。fixed_anchor だけでも true になります。推奨です。
    ファイル中の PLUGIN_CONTENTS2_1_FIXEDANCHOR で初期値を設定できます。デフォルトで TRUE です。
    Note: 固定アンカーをつけるためには pukiwiki.ini.php 中で $fixed_heading_anchor = 1 と設定しなければいけません。現在の pukiwiki ではデフォルトで 1 です。

ダウンロード

拡張子の番号をはずして、plugin ディレクトリに放りこんでください。

リビジョン日付変更点
filev1.1303/05/2005include ページタイトルに対するアンカーが固定なアンカーになるように変更。Plugin/include2.inc.php?の最新版が対応しているので include にはそちらを利用してください。これに伴い改造include.inc.phpは表面上消しました。
filev1.1203/04/2005Plugin/include2.inc.php?の対応を受けて対応。#include, #include2 共に認識します。
filev1.1102/26/2005既知の問題点を固定アンカーで回避。display=inline 時の区切り文字等をオプションでも設定できるようにした。
filev1.1002/18/2005要望をうけてリストではなく横一列に表示する機能を追加。それをうけて hierarchy=true,false オプションは display=hierarchy,flat となり、今回の追加機能は display=inline と指定することになりました。depth オプション指定時のレベルを変更。include ページ名がレベル0、見出しはレベル1以降とたぶんわかりやすくなりました。インライン型プラグインとして実行可能に。ただし強制的に display=inline です。CSSで設定しやすいようにHTMLにクラス名を追加。ソースコードの整理。
filev1.0902/14/2005typo が原因で depth オプションが正しく動いていなかったので修正
filev1.0702/08/2005pageオプション使用時でもリンクにアンカーしか使用していなかったので修正
filev1.0602/08/2005v1.05の修正でv1.04時に修正したはずの症状がまたでていたので修正
filev1.0502/08/2005今度は再帰 include のときのアンカーの処理が間違っていたので修正
filev1.0402/08/2005別のところでまたアンカー付けの処理が間違っていたので修正
filev1.0302/08/2005アンカー付けの処理が間違っていたので修正
filev1.0202/06/2005page オプションを指定した場合 fromhere オプションが発動しないようにした。
filev1.0102/06/2005初版

もっと便利に - include2.inc.php

include プラグインは現状ではページタイトルの見出しにアンカーをつけてくれないので、 ジャンプできません。

Plugin/include2.inc.php? は #contetns2_1 のアンカーリンクに対応しているのでそちらを利用するとページタイトルへジャンプできるようになります。

使用例

次のような「とあるページ」があったとします。

**AA
#contents2_1
*B
***BBB
**CC
#include(別のページ)
*D

「別のページ」の内容は次のとおりだったとします。

*1
#contents2_1
**11

「とあるページ」の #contetns2_1 が変更されると思ってください。


#contents2_1
    • BBB
  • CC
  • 別のページ
      • 11

#contents2_1(fromhere=false)
  • AA
    • BB
  • CC
  • 別のページ
      • 11

MenuBar に設定する場合は fromhere=false を用いることになるでしょう。


#contents2_1(page=別のページ)
    • 11

#contents2_1(compact=false)
    • BBB (表現できません。もう一段階さがります。)
    • CC
  • 別のページ
      • 11
#contents2_1(compact=false,include=false)
    • BBB
    • CC

#contents2_1(compact=false,depth=1-2)
    • CC
    • 11
#contents2_1(compact=true,depth=1-2)
  • CC
    • 11
#contents2_1(compact=false,depth=1-2,include=false)
    • CC

#contents2_1(display=flat)
  • BBB
  • CC
  • 別のページ
  • 11

#contents2_1(display=inline,depth=1)

[ B | 1 | D ]


#contents2_1(number=5)
    • BBB
  • CC
  • 別のページ

#contents2_1(except=B)
  • CC
  • 別のページ
      • 11

#contents2_1(include=false)
    • BBB
  • CC

既知の問題点

プラグインで相対アンカーに完全対応できないことがわかっています。

  1. アンカー番号は 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 オプションがないのでこれ以上は悩む必要がないのです。
  3. 固定アンカーで逃げる。

結論

  1. 固定アンカー必須にせざるを得ない。

コメント

Note?


*1 \d+ は正規表現による表記です。例えば \d は数字のことです。
*2 \d*[-+]?\d* は正規表現による表記です。\d は数字のことです。