HipBox/includex

Last-modified: 2023-02-19 (日) 10:23:47

このページはincludexプラグインに関する解説を、http://pukiwiki.sonots.com/?Plugin/includex.inc.php のアーカイブを参照しやすいよう設置したものです。

概要

ページを取り込むプラグイン include の拡張です。

標準 #include との違い

ページタイトルの表示形式指定可能
ページタイトルにアンカーが付く
行番号指定機能
正規表現による全文検索機能(grep)
正規表現による除外全文検索機能(grep -v)
セクション指定
lsx.inc.php との併用による複数ページの取り込み

使い方

設定

全ての #include を #includex に置き換えてください。

書式

#includex(ページ名[,オプション])

必須

  • ページ名
  • とりこむページ名

オプション

option=bool なオプションは共通して、 option, option=true, option=on でそのオプションが有効になり、option=false, option=off で無効になります。

num=数字

表示件数指定。正数は前からN件目、負数は後ろからN件目の意味。

num=1:10 で先頭1件目から10件目までの意味。num=-10:-1 で後ろ10件目から後ろ1件目までの意味。num=2: で先頭2件目から最後までの意味。 num=5+2 で先頭5件目から、そこから2件先まで(5,6,7)の意味。

filter/except などの絞込みオプションと併用した場合、絞込みされてからの、件数指定になります。

filter=正規表現

各行を正規表現で限定する。Wikiソースに対する grep 的なもの。全文検索。

ヒント: ereg で判定を行います。

except=正規表現

除外全文検索。Wikiソースに対する grep -v 的なもの。

ヒント: ereg で判定を行います。 except=Test|sample → Test または sample を含む行を除く。
ヒント:例えばページの1部だけを取り込んでいるのに #contents によるリストが表示されて邪魔だと思ったときに except=^#contents として消去したりします。

titlestr=name | off | basename | relname | title

ページタイトル(<h1>ページ名</h1>)の表示形式。デフォルトは title。

  • name|pagename|absolute: include プラグインと同じくページ名を使用する。
  • off: ページタイトルを表示しない。
  • basename: ページ名の basename, つまり仮想階層を使用している場合のファイル名に相当する部分。
  • relname|relative: 現在ページからの相対的ページ名。例:現在ページ PukiWiki かつ include 先が Plugin/Hoge/includex.inc.php → Hoge/includex.inc.php
  • title: TITLE: 行があればその文字を、なければ name を表示。

備考:TITLE: の取得には contentsx.inc.php のコードを再利用します。インストールしておいてください(なければ常に name になります)。TITLE: とは Pukiwiki Plus! において HTML のタイトルを設定する書式です。本家の場合、default.ini.php の $line_rules で "^(TITLE):(.*)$" => "", と設定し、TITLE: 行を表示しないようにすればよいでしょう。おそらく。

titlelink=bool

ページタイトル(<h1>ページ名</h1>)でリンクを貼るか否か。

ヒント: pukiwiki.ini.php で $fixed_heading_edited を 1 に設定しておくと、ページタイトルの脇に編集リンク用の編集アイコンも表示されます。$fixed_heading_edited は pukiwiki plus におけるパラグラフ編集機能を利用する際の、それぞれの見出しの脇に編集アイコンを表示するか否かの設定です。

section=(contentsxオプション)

取り込むセクションを見出しに対する制限で指定。例えば、section=(num=0:1) で第0セクションと第1セクションの取り込み。

セクション番号の定義

  • 0 - 先頭から第一見出し直前までの部位
  • 1 - 第一見出しから第二見出し直前まで
  • 2 - 以下進む

num 以外でも contentsx のオプションを使用することによって、 取り込むセクションを見出しに対する制限で指定することが出来ます。

  • num=数字
  • depth=数字
  • filter=正規表現
  • except=正規表現
  • cache=bool
    等。上述同名オプションで想像が付くとは思いますが、詳しくは contentsx.inc.php 参照。

firsthead=bool

先頭行が見出しの場合、それも表示するか否か。<h1>ページタイトル</h1> 直後に、見出しがきて外観が損なわれるような場合に firsthead=off として使用。section と併用する場合が多い。

readmore=until | from

  • until - #readmore プラグイン(同プラグインパッケージに梱包。特に何もしないプラグイン)が記述されている箇所まで取り込む。ブログ的な使用ができるかもしれない。
  • from - #readmore から取り込む
  • permalink=リンク文字列
  • include した後にそのページへのリンク、 Permalink を表示する。ブログ的に。

動作例(仕様)

TEST/a というページが以下の内容で存在するとします。

 Contents of TOP section
 **AA
 Contents of AA section
 #contentsx
 *B
 Contents of B section
 ***BBB
 Contents of BBB section
 **BC
 Contents of BC section
 *D
 Contents of D section

このページを TEST ページから include するものとします。

下記の表示例はイメージです。リンクを PukiWiki のように [[]] 記法で表現し、h1 タイトルを <h1></h1> で表現し、見出しも PukiWiki のように * で表現することにします。

※TITLE: というのは PukiWiki Plus! で <title></title> を設定できるコマンド(?)です。本家では忘れてください。


 #includex(TEST/a)
 #includex(./a) // 相対階層指定。

PukiWiki の相対階層指定は UNIX とは異なることに注意。TEST + ./a = TEST/a

 <h1>[[テストページa>TEST/a]]</h1>
 Contents of TOP section
 **AA
 Contents of AA section
 #contentsx
 *B
 Contents of B section
 ***BBB
 Contents of BBB section
 **BC
 Contents of BC section
 *D
 Contents of D section

#includex(TEST/a,num=1:2) // 1行目から2行目抜き出し
 <h1>[[テストページa>TEST/a]]</h1>
 Contents of TOP section
 **AA
  • #includex(TEST/a,num=1:2,titlestr=name) // h1 タイトルにページ名を使用
 <h1>[[Test/a>TEST/a]]</h1>
 Contents of TOP section
 **AA

#includex(TEST/a,num=1:2,titlestr=off) // h1 タイトルを表示しない
Contents of TOP section
**AA

 #includex(TEST/a,num=1:2,titlestr=basename)
 // h1 タイトルにページ名の basename, つまり仮想階層を使用している場合のファイル名に相当する部分。
 <h1>[[a>TEST/a]]</h1>
 Contents of TOP section
 **AA

#includex(TEST/a,num=1:2,titlestr=relname) // h1 タイトルに現在ぺージからの相対パス
 <h1>[[a>TEST/a]]</h1>
 Contents of TOP section
 **AA

 #includex(TEST/a,num=1:2,titlestr=title)
 // h1 タイトルに TITLE: があれば使用。なければページ名。デフォルト
 <h1>[[テストページa>TEST/a]]</h1>
 Contents of TOP section
 **AA

 #includex(TEST/a,num=1:2,titlestr=title,titlelink=off) // h1 タイトルにリンクを貼らない
 <h1>テストページa</h1>
 Contents of TOP section
 **AA

 #includex(TEST/a,num=1:2,permalink=パーマリンク) // ブログ的に permalink を表示
 <h1>[[テストページa>TEST/a]]</h1>
 Contents of TOP section
 **AA
 [[パーマリンク>TEST/a]]

#includex(TEST/a,filter=B) // grep 的抜き出し
 <h1>[[テストページa>TEST/a]]</h1>
 *B
 Contents of B section
 ***BBB
 Contents of BBB section
 **BC
 Contents of BC section

 #includex(TEST/a,except=B) // grep -v 的抜き出し
 <h1>[[テストページa>TEST/a]]</h1>
 Contents of TOP section
 **AA
 Contents of AA section
 #contentsx
 *D
 Contents of D section

#includex(TEST/a,section=(num=0:1)) // セクション抜き出し

0番セクションがページ先頭から第1見出しまで。1番セクションが第1見出しから第2見出しまで。

 <h1>[[テストページa>TEST/a]]</h1>
 Contents of TOP section
 **AA
 [[パーマリンク>TEST/a]]

#includex(TEST/a,section=(depth=1)) // 見出しの深さでセクション指定
 <h1>[[テストページa>TEST/a]]</h1>
 *B
 Contents of B section
 *D
 Contents of D section

#includex(TEST/a,section=(depth=1),firsthead=off) // 先頭行が見出しの場合削る
 <h1>[[テストページa>TEST/a]]</h1>
 Contents of B section
 *D
 Contents of D section

FAQ

#include を一度に置き換えたい

プラグインの置き換え用プラグインとして replaceplugin.inc.php を作成してありますので利用してみてください。

複数ページの include は?

lsx.inc.php から include オプションを使用して行います。

ページタイトルアンカーについて

ページタイトル (<h1></h1>) に対するページ内アンカとして

'#z' . encode(ページ名)

のような文字列を採用しています。先頭の z は XHTML 文法的にアンカの先頭文字列は [A-Za-z] でなければならない(数字であってもならない)のでそのルールを保障するためにとりあえず z を付けています。

ダウンロード

v2.0 系統版

Sonots PukiWiki Plugin Collection に含まれています。

lsx-vX.XX.zip をダウンロードし、plugin ディレクトリ以下に展開してください。
同時梱包されているその他のプラグインは上述ページ内の「Release Notes」リンクから参照できます。

旧 v1.0 系統版

技術的詳細

関連

org:欲しいプラグイン/73 - 子階層のページをまとめてインクルードするプラグイン(実現)
org:欲しいプラグイン/74 - 相対指定(#include済)(実現)
org:欲しいプラグイン/136 - grep付 include プラグイン(実現)
org:欲しいプラグイン/144 - パラグラフをincludeするプラグイン(実現)
org:欲しいプラグイン/158 - 指定した行から指定行数分だけ抜き出し(実現)
org:欲しいプラグイン/196 -子階層のページの指定番号から指定番号までまとめてインクルードするプラグイン(実現)
org:欲しいプラグイン/219 - includeparagraphでは見出しレベルを指定して、一致する見出し以下を出力できます。しかし肝心の取得した見出しは表示してくれません(実現)。
org:質問箱/324 - タイトルも一緒に載ってしまいます(実現)
org:続・質問箱/174 - ページを再帰的にプリントアウトするツールありませんか?(実現)
org:質問箱3/219 - ls2,include,recentの複合機能(実現)
dev:BugTrack/350 - 指定範囲のみの#include(実現)
dev:BugTrack/505 - includeにnotitleがほしい(#include済)(実現)
dev:BugTrack/542 - 文書のトップに、オリジナル文書へのリンクがありますが、それが編集でのリンクであり、なんとかならないものか?と思っています。(実現)
dev:BugTrack/712 - includeプラグインにタイトルoff属性追加(#include済)(実現)
自作プラグイン/includels.inc.php - 指定されたページ以下を一括してincludeするプラグイン (実現)
自作プラグイン/ginclude.inc.php - 指定のタグつきの行のみをインクルードします。(タグを文字と考えれば実現)
org:自作プラグイン/showcase.inc.php - 最新ページ群を指定数行/文字列(内部で設定)まで読みこんで表示する
org:自作プラグイン/bloginclude.inc.php - 指定した条件で絞り込んで読み込むincludeプラグイン(実現)
org:自作プラグイン/include_interwiki.inc.php - 外部PukiWikiページをincludeするプラグイン(却下)