#author("2023-07-23T06:02:17+09:00;2022-11-16T12:50:32+09:00","default:kanateko","kanateko")
#author("2023-08-31T11:42:06+09:00","default:kanateko","kanateko")
&tag(プラグイン,自作,追加);

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

#contentsx

*フォーム形式のテンプレートプラグイン [#j8d7db6e]
#infobox(plugin){{
name=newtpl
ver=1.1.3
ver=1.2.0
pukiwiki=1.5.4
update=2022-11-16
update=2023-08-31
}}

新規ページを作成する際にフォーム形式のテンプレートを利用できるようにするプラグイン。
newpageプラグインとtrackerプラグインをかけ合わせたようなもの。

従来のテンプレートプラグインは手軽な反面、テンプレートを読み込んだ後にどこを編集したらいいのかという点に悩まされるユーザーが多そうだと感じたため、より直感的に使えそうな本プラグインを開発した。


#clear

#box(label,label-style=full,box-color=blue,title=このプラグインでできること){{
-フォームを入力することで簡単にテンプレートを用いたページの作成ができる。
--入力項目はカスタマイズ可能。
---text, textarea, number, range, radio, checkbox, select, file, hiddenが使える。
---それぞれの形式でさらに細かい設定ができる。
---必須項目を指定可能。
---未記入時の出力も設定可能。
-管理者のみ、凍結必須といった設定を切り替えられる。
}}


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

|~日付|~バージョン|~備考|h
|CENTER:120|CENTER:60|590|c
|2023-08-31|1.2.0|#ul(filledオプションを追加)|
|2023-08-24|1.1.4|#ul(0が未記入扱いになる問題を修正,パスワード入力欄が表示されない問題を修正)|
|2022-11-16|1.1.3|#ul(fileのオプションにアップロードページの指定を追加)|
|2022-11-04|1.1.2|#ul(文字数カウントがマルチバイト文字に対応していなかった問題を修正)|
|2022-10-28|1.1.1|#ul(編集制限時は管理者パスワードを要求するのではなく、ログインを促すように変更)|
|2022-10-27|1.1.0|#ul(ファイル添付機能を追加,設定ページの凍結の要/不要を切り替える機能を追加,細かいバグを修正)|
|2022-10-12|1.0.5|#ul(ページ名の相対指定に対応,rangeのスライダーに数値の表記を追加)|
|2022-10-11|1.0.0|#ul(初版作成)|

*セットアップ [#x6ce5cb0]
+GitHubからダウンロードした「plugin-newtpl」フォルダの中身 (plugin, skin) をPukiWikiのディレクトリに放り込む。
+(任意) 「新規」ボタンをこのプラグインに置き換えるため、PukiWikiディレクトリのlibにある「html.php」の以下の部分を変更する。

#prism(diff-php diff-highlight){{
-	$_LINK['new']      = "$script?plugin=newpage&refer=$r_page";
+	$_LINK['new']      = "$script?plugin=newtpl&refer=$r_page";
}}

*プラグイン設定 [#y7d6a8db]
#style(word-break:break-all;,class=table_compact){{{
#tableif(^(int|\d+)$=COLOR(#62bf4b),^(string|'.+')$|DIR \.=COLOR(#cb643d),^'/.+/'$=COLOR(#df0606),^(bool|true|false)$=COLOR(#463dcb)){{
|~定数 (PLUGIN_NEWTPL_~)|~型|~初期値|~説明|h
|BOLD:BGCOLOR(--table-header-td-color):160|CENTER:80|120|400|c
|CSS|string|SKIN_DIR . 'css/newtpl.css'|プラグイン用CSSのパス|
|ROOT|string|':config/plugin/newtpl/'|テンプレート設定の親ページ|
|ADMINONLY|bool|false|フォームで管理者パスワードを要求する。|
|RESTRICT|bool|false|設定ページを凍結していないと使えないようにする|
|AVAILABLE_FORMAT|string|'image/jpeg,image/png,image/gif,image/webp'|添付可能なファイルのmime-type (カンマ区切り)|
|MAX_FILESIZE|int|1024|添付可能なファイルの最大サイズ (キロバイト)|
|ENABLE_UPLOADTO|bool|true|fileのアップロードページ指定オプションの有効/無効|
|UPLOADTO_EXCEPTION|string|'/^(FrontPage|MenuBar)$/'|fileのアップロードページに指定不可能なページ (正規表現)|
}}
}}}

*使用方法 [#b9619fda]
「新規」ボタンを置き換えている場合はページ名入力欄の下に利用可能なテンプレートが表示される。
任意のページにブロック型 (`#newtpl`) で記述することでもリストを表示可能。
使用したいテンプレート名のリンクをクリックするとフォームが表示される。
#fig(template_list.jpg,left,nofloat,cap=新規ボタンを押した時の画面)

*設定ページの使い方 [#v7bf5e4b]
テンプレート設定ページ (デフォルトは`:config/plugin/newtpl`) 以下に「テンプレート名」および「テンプレート名/page」の2つのページを作成する。
作成例は[[練習用Wikiのデモ:https://jpngamerswiki.com/_sandbox/?1a8db3d940]]を参照。

**項目指定 [#ec509bdf]
参考:[[:config/plugin/newtpl/プロフィール:https://jpngamerswiki.com/_sandbox/?3be5bc4530]]

「:config/plugin/newtpl/テンプレート名」ページにはフォームの各項目の設定を記述する。大まかな記述方法は
 - <項目名>
 -- type = <形式>
 -- name = <固有のname属性>
 -- <オプション> = <値>
このような形になる。 
項目名の後に''アスタリスク (*)''を付けると必須項目に設定できる。
例えば上で書いたデモの設定の一部を抜粋すると
 -名前*
 --name=name
 --type=text
 --placeholder=鈴木太郎
 --max=20
 --link=true
 -年齢
 --name=age
 --type=number
 --null=非公開
このようになっている。

現在利用可能な形式とそれぞれで使えるオプションは以下の通り。

***text, textarea [#x01c4007]
改行なしと改行ありのテキスト入力。オプションは共通。

|>|~オプション|h
|BOLD:200|400|c
|placeholder|プレースホルダー|
|default|初期入力値|
|max|最大文字数|
|desc|項目の補足説明|
|null|未記入の場合に実際のページに表示する内容|
|filled|入力内容がある場合に実際のページに表示する内容。%sと書くと入力内容に置換される|
|link|`link=true`で入力内容と同じ名前のページ名が存在する場合にリンク化する|

***number, range [#y412cdea]
数字の入力とスライダー。オプションは共通。

|>|~オプション|h
|BOLD:200|400|c
|default|初期入力値|
|min|最小数|
|max|最大数|
|step|数値の変動間隔|
|desc|項目の補足説明|
|null|未記入の場合に実際のページに表示する内容|
|filled|入力内容がある場合に実際のページに表示する内容。%sと書くと入力内容に置換される|

***radio, checkbox, select [#u4696d17]
択一の選択、複数選択、プルダウン式の選択項目。オプションは一部を除いて共通

|>|~オプション|h
|BOLD:200|400|c
|default|初期選択|
|option|選択肢。それぞれをバーティカルバーで区切って記述する (option = aaa|bbb|ccc)|
|desc|項目の補足説明|
|null|未記入の場合に実際のページに表示する内容|
|filled|入力内容がある場合に実際のページに表示する内容。%sと書くと入力内容に置換される|
|link|`link=true`で入力内容と同じ名前のページ名が存在する場合にリンク化する|

:checkbox専用のオプション|''separator'':複数選択された場合に、ページに表示される各選択肢の区切りを指定する。
''\s''で空白、''\n''で改行になる。指定しない場合は","で区切られる。
例えば`separator = \s・\s`を指定した状態で、フォームの選択肢A、B、Cをチェックしてページを作成した場合、実際の表示は「A ・ B ・ C」になる。separatorを指定しなかった場合は「A,B,C」になる。

***hidden [#ua6e4a6d]
フォームに表示せず設定した値を送信する。

|>|~オプション|h
|BOLD:200|400|c
|value|送信する値|

***file [#g3fa94d5]
ファイル添付。1項目に付き1つのみ添付可能。
ファイル形式や最大サイズはプラグイン内の設定でのみ変更可能。
`uploadto`を指定しない場合は新規作成したページに添付される。
ページにはファイル名が表示される。 (`fullpath=true`を指定した場合は「ページ名/ファイル名」)

|>|~オプション|h
|BOLD:200|400|c
|desc|項目の補足説明|
|null|未記入の場合に実際のページに表示する内容|
|filled|入力内容がある場合に実際のページに表示する内容。%sと書くと入力内容に置換される|
|uploadto|ファイルの添付ページ。作成するページとは別のページにアップロードしたい場合に使用する|
|fullpath|`uploadto`と併用。`fullpath=true`でファイル名の前にページ名がつく|

**ページテンプレート [#yb32b6e6]
参考:[[:config/plugin/newtpl/プロフィール/page:https://jpngamerswiki.com/_sandbox/?7da9634f7f]]

「:config/plugin/newtpl/テンプレート名/page」ページにはテンプレートと置き換える項目の位置を書く。

置き換えたい場所は`{{{name属性}}}`このように設定ページに記述したname属性を3重の波括弧で囲っておく。
また、設定ページに記述したname属性以外にも以下のものが使用可能。

:{{{title:name属性}}}|指定したname属性の項目名
:{{{_page}}}|ページ名
:{{{_pagelink}}}|リンク化したページ名
:{{{_base}}}|ベースネーム
:{{{_tpl}}}|設定ページ名
:{{{_tpllink}}}|リンク化した設定ページ名
:{{{_date}}}|ページの作成日時 (Y-m-d (w) H:i:s)

*使用例 [#beb78fe8]
練習用Wikiにデモを置いているのでそちらを参照。

-[[新規ボタンのページ:https://jpngamerswiki.com/_sandbox/?plugin=newtpl&refer=FrontPage]]
-[[設定ページ:https://jpngamerswiki.com/_sandbox/?3be5bc4530]]
-[[ページテンプレート:https://jpngamerswiki.com/_sandbox/?7da9634f7f]]
-[[テンプレートを使って作成したページ:https://jpngamerswiki.com/_sandbox/?e8fc5b86bf]]
 
*追加したい機能 [#v1c5931b]
-プレビュー機能を入れたいが、そうなるとファイル添付との兼ね合いから非同期バリデーション+プレビューと言う形での実装にせざるを得ず、%%面倒くさそう%%時間がかかりそうなので後回しに。

*備考 [#r391afcf]
-未だにこういったプラグインの設定ページはどういった書き方にするのが最も使いやすいか模索中で、似たようなプラグインでも書き方が違ったりするので注意。

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