#author("2024-09-01T19:14:16+09:00;2024-09-01T14:37:50+09:00","default:kanateko","kanateko")
#author("2024-09-13T22:47:59+09:00","default:kanateko","kanateko")
&tag(プラグイン,自作,追加);

#ref(inctmp.jpg,center,wrap,500x)

#contentsx

*取得したテンプレートの一部を置き換えて表示するプラグイン [#summary]
#infobox(plugin){{
name=inctmp
ver=1.1.0
ver=1.1.1
pukiwiki=1.5.4
update=2024-08-31
update=2024-09-13
}}

[[infoboxプラグイン>../infobox]]を汎用化したもの。指定したテンプレートページ内の任意のキーワードを置き換えた上で現在のページに表示することができる。プラグイン名は''inc''lude ''t''e''mp''lateの略。

元々PukiWiki公式サイトにて似たようなプラグインが公開されていたようだが、既に配布ページが消失していたため、[[infoboxプラグイン>../infobox]]同様自作することにした。

includeやincludexなどとの主な違いは以下の通り。

-指定したキーワードを任意の文字に変更可能。
--デフォルト値を設定可能。
-1ページ内で同一のテンプレートを複数回用いることができる。
--ループ対策済

上記の違いにより、より柔軟なページ編集が可能になっている。

#clear

#box(label,label-style=full,box-color=blue,title=このプラグインでできること){{
-指定したページの内容を取得して表示する。
--ページ内で指定されたキーワードを任意の内容に変更して表示できる。
--テンプレートの==noinclude==~==/noinclude==間は表示先のページに反映されない。
-オプションで追加のクラス指定が可能。
}}


*ダウンロード [#download]
最新: [[GitHub>https://github.com/kanateko/pukiwiki-plugin]]

|~日付|~バージョン|~備考|h
|CENTER:120|CENTER:60|590|c
|2024-09-13|1.1.1|#ul(複数行の値でのコメントアウトに対応)|
|2024-08-31|1.1.0|#ul(各キーのデフォルト値を指定する機能を追加,値を複数行にわたって書く機能を追加)|
|2023-09-25|1.0.1|#ul(出力時の余分な改行を削除)|
|2023-07-19|1.0.0|#ul(初版作成)|

*セットアップ [#setup]
+GitHubからダウンロードした「inctmp.inc.php」をPukiWikiのpluginディレクトリに放り込む。

*プラグイン設定 [#setting]
#style(word-break:break-all;,class=table_compact){{{
#tableif(^(int|\d+)$=COLOR(#62bf4b),^string|'$|DIR \.=COLOR(#cb643d),^(bool|true|false)$=COLOR(#463dcb)){{
|~定数 (PLUGIN_INCTMP_~)|~型|~初期値|~説明|h
|BOLD:BGCOLOR(--table-header-td-color):180|CENTER:80|220||c
|PAGE|string|':config/plugin/inctmp'|テンプレートページのルート|
|SAFEMODE|bool|false|テンプレートの編集制限チェックの有無|
|KEY_FORMAT|string|'{{{%s}}}'|テンプレート上のキーのフォーマット。%s部分が任意のキーになる|
|DEFAULT_VALUE_REGEXP|string|'([^{}]+):([^{}]+)'|デフォルト値検索用の正規表現|
}}
}}}

*使用方法 [#usage]
 #inctmp(< テンプレート名 > [, オプション]){{
 < キー > = < 値 >
 < キー > = < 値 >
 ︙ 
 }}

**オプション [#option]
:テンプレート名|
必ず第一引数で指定する。
設定のルートページ以下が対象になるため、例えば`hoge`を指定したら、実際のページは`:config/plugin/inctmp/hoge`になる。
:class = < クラス名 >|
表示したテンプレートを囲うdiv要素にクラスを追加する。
複数クラスを追加する場合は半角スペースをはさむ。
:<キー> = < 値 >|
テンプレート上の指定したキーを全て指定した値に置き換える。
最終的な表示で未指定のキーが残っている場合、そのキーを含む行がテンプレートから削除された状態で表示される。
イコールの後に改行を入れると、その下で複数行にわたって値を書くことができる。

**テンプレート [#template]
テンプレート見本:[[:config/plugin/inctmp/example]]

置き換えたい部分を`{{{キー}}}`にしておく。`{{{キー:デフォルト値}}}`のようにデフォルト値を設定することもできる。

*使用例 [#example]
テンプレート:[[:config/plugin/inctmp/example]]
#tab{{{
#:表示
#inctmp(example){{
title = 使用例
color = red
text =
テンプレートのページと見比べると、どのように動作しているかがわかりやすいと思います。
複数行にわたって値を書くこともできます。
}}
#inctmp(example,class=align-center){{
color = blue
text =
このように同じテンプレートを使用して別の表示も可能です。
ループ対策済み。
値の指定がない場合、テンプレート内でデフォルトの値が設定してあれば、自動的にそれが表示されます。
}}
#:ソース
 #inctmp(example){{
 title = 使用例
 color = red
 text =
 テンプレートのページと見比べると、どのように動作しているかがわかりやすいと思います。
 複数行にわたって値を書くこともできます。
 }}
 #inctmp(example,class=align-center){{
 color = blue
 text = 
 このように同じテンプレートを使用して別の表示も可能です。
 ループ対策済み。
 値の指定がない場合、テンプレート内でデフォルトの値が設定してあれば、自動的にそれが表示されます。
 }}
}}}

*備考 [#note]
-動作にはPHP8以上が必要になる。

*コメント [#comment]
#pcomment(reply)