body,pane命令
編集エリアの仕様について
{body オプション・・・・}
あるいは、
{pane permalink="permalink名" オプション・・・・}
body命令はURLで指定されたページのコンテンツをHTML形式で出力する。pane命令は、pagenameやpermalinkで指定されたページを参照する。
paneのオプションについて
pagename | ページ名で指定 body命令では、pagename指定はできず、必ずそのページ名が入る。 | |
pageprefix | ページ名のPrefix。body命令では使用できない。 | |
permalink | パーマリンクで指定 body命令では、parmalink指定はできず、必ずURLで指定したパーマリンクが入る。 | |
content | ヒアWIKIドキュメント構文として記述。 | |
error403 | aneがエラー403の時に出力するメッセージ。WIKI構文が使用できる。現時点では使用されない。 | |
error404 | paneがエラー404の時に出力するメッセージ。WIKI構文が使用できる。bodyがはかれたときには、paneが404であってもhttpのresult codeが404になるとは限らない。 | |
type | text | テキストモード。Wikiパーザは通らなく、テキスト文字しか許さない。テキストの文字数の指定が可能(length=で指定) |
inline | インラインWikiモード。ブロック命令、先頭にタグが入る物(スペース、-、+、*、>など)は設置不可能 | |
block | 全ての命令が使えるもの。デフォルト | |
width | ペインの横幅の指定。この設定をすると、システムはこの横幅になるべく入るような形でコンテンツを変換する。具体的には、imageプラグインのfit=100%が、この横幅になるなど。 | |
properties | ページプロパティエリアの表示非表示on/off。デフォルトはoff。 | |
editor_css | エディター向けのcssを設定する。 |
permalink,pagename paneの名前と、permalinkについて
paneに読み込むページ・コンテンツを指定する。ページコンテンツの指定には、permalinkによる指定とページ名での指定がある。
permalinkの指定では.htmlを付けない形式で指定し、pagenameはページの名前のフルパスで指定する。
paneの実体ページの名前と、permalinkの指定については、下記のようなスタンスでつけると良い。
- permalink
- divやspanで使うIDになるため。英数字が望ましい。
- 慣習的に_から始めることにする。
- ページ名
- 編集ツールバーのプルダウンのラベルとして表示されるため、人間がみてわかる名前にする。
- 慣習的に、ページとして見えない方がいいため、:からスタートする。
content
paneに読み込むコンテンツをページではなく、ヒアドキュメント形式で指定する。
content="ここにWIKI形式でコンテンツを書く"
次のようにマルチライン記述をすることもできる。
content=" * タイトル いろいろいろいろ #sitemap "
contentで指定したWIKIヒアドキュメントは、デザインファイルに配置されるため、デザイナーしか編集することができない。これにより、編集不可能なpaneを使うことができる。
例:サイトマップの指定の場合など
主にブロック型のプラグインを呼び出すことが多い。
次のようにすると、サイトマップを表示するだけのpaneを指定することができる。
{pane content="#sitemap()"}
次のようにすると、そのページの下位のページのコンテンツを1段階だけリスト表示する。
{pane content="#sitemap(`$page`,1,underlist)"}
例:特定のペインが存在しなければ、特定のWIKIコンテンツを出す。
下記の読み込み順序の法則を利用することで、次のような実装ができる
{pane pagename="ページネーム" content=" * コンテンツがありません いろいろ。 "}
この方法を上手く利用すると、特定のページの下位のページをペインで切り替えることができる。
{pane pagename="`$page`/サイドバー" content=" * サイトマップ #sitemap "}
この方法では、そのページの下位にサイドバーという名前のページが存在するときはそのページを出力し、存在しなければcontentに記載されたサイトマップを出力している
複数コンテンツの指定のコンテンツの読み込み順序について
pagename、permalink、content、どの方法でも、ペインを表示することができるが、この読み込みの優先順位は下記のようなルールになっている。
- pagename= (旧形式page=でもOK)
- permalink=
- content=
複数列挙の場合、「読み込める物が見つかった場合」、そこでやめるので、マッチする複数のコンテンツを全て表示することはない。
例:3つとも指定されたとき
{pane pagename="メニュー" permalink="product.html" content="#jsitemap()"}
というような構文があった場合、下記の順番で評価を試みる。
- メニューというページを見つける
- product.htmlというパーマリンク名のページ見つける
最後の#jsitemap()は、メニューというページも、product.htmlというパーマリンクをもったページも、どちらも見つからない場合のみ、利用される。
したがって、次のような表記ができる
{pane permalink="product_menu.html" content="プロダクト集はありません"}
この場合、product_menu.html自体がないか、権限がなければ、contentを表示する
pageprefixについて
pageprefixという変数には、pagenameで与えるプレフィックスを指定する。
{pane pageprefix="プロダクト/" pagename="メニュー"}
この場合、「プロダクト/メニュー」というページを参照するペインとなる。
変数の利用
これらには、変数を利用することができる。
{pane pageprefix=$page pagename="ユーザ名" content="ありません。"}
この例では、自分のページの下の「ユーザ名」というページを示す。ない、あるいは権限もなければ、ありませんという表示をだす。
配列渡しについて
下記の3点は、配列渡しが可能
- pagename
- permalink
- pageprefix
配列渡しの場合、ページ名の羅列から、存在する物がみつかるまで探し出して表示をすることができる。
例)YAMLに合わせてリスト(li)を変えたい場合
user_config.ymlに下記のように設定されていたとする
MENU_PAGES: - メニューバー - メニューマップ - メニュー - menubar - MenuBar {pane pagename=$user_config.MENU_PAGES content=""}
下記の順番でページを探し、あったらそれを表示する。
- メニューバー
- メニューマップ
- メニュー
- menubar
- MenuBar
- 全てを探してなければ、content=""が有効になり、「何も出力されない」
例)YAMLのリストにあわせて読み出すページを変えたい
pageprefixにも配列を指定することができるので、これを使うとYAMLの内容でリストの内容を変えることができる。
user_config.ymlに、さらに下記のような追記があったとする
PAGE_PREFIXS: - メニューエリア/ - / {pane $pageprefix=$user_config.PAGE_PREFIXS pagename=$user_config.MENU_PAGES content="メニューはありません"}
この場合、下記の順番でページをみつけ、会ったらそれを表示、
- メニューエリア/メニューバー
- メニューエリア/メニューマップ
- メニューエリア/メニュー
- メニューエリア/menubar
- メニューエリア/MenuBar
- メニューバー
- メニューマップ
- メニュー
- menubarMenuBar
なければ、「メニューがありません」という文字を表示する。
error403とerror404について
permalink、pagename、あるいはpageprefixなどで指定したページが見当たらない場合に表示するコンテンツを記述する。
先に記述した方法ではcontent=で代用することもできるが、エラーとして明記したい場合に利用する。
- error403
- 権限が足りなくて参照できないときに表示するWiki構文
※ただし現在はWIKIPLUSのコンテンツに権限不足が発生することがないので利用することはない。 - error404
- そもそも存在しないときに表示するWiki構文
error404とcontentの違いについて
コンテンツの読み込み順序がpermalink→pagename→contentで解釈されるため、error404とcontentはどちらも、paneの対象ページがない場合に利用される。
この2つの違いは下記の通り
content | error404 | |
エラーとみなすか? | 見なさない | 見なす |
公開ページでの処理 | 変わらない | |
編集ページでの処理 | contentが利用されて終わり | error404が利用されるが、新規作成ボタンが設置される。 |
エラーログ | エラーではないので残らない | 裏画面でのみエラーログが発行される。正し、error_log_if_error404をoffに設定すると出力されない |
例:あっても無くても良いペインを作る。無い時はボタンを設置したい。
{pane pagename="ペイン1" error404="ペイン1を作成"}
例:ペインの権限の付与、有り無しで出力メッセージを使い分けたい
このように書くと、ペインの権限の付与、有り無しで出力メッセージを使い分けることもできる。
{pane permalink="special_menu.html" error403="権限がありません" error404="special_menu.htmlのペインがありません"}
editor_css
editor_cssを使うことで、そのペインの編集BOXでエディタを開くときのみ、スタイルシートを切り分けることができる。
これはメニューやヘッダーリンク・フッターリンクなど、リスト(ul,li)などに特殊なスタイルシートを割り振っている場合、エディタ中、画面に似せた表現をしたいときに利用する。
editor_cssを設定する場合。
{pane permalink="_menu" editor_css="./css/editor_menu.css"}
./css/editor_menu.cssは別途ファイルは置いておくこと。
例:色選択毎に分けたい場合
色選択毎に分ける場合は下記のように設定する。
{pane permalink="_menu" editor_css="./color/`$user_config.DESIGN.COLOR`/editor_menu.css"}
`$user_config.DESIGN.COLOR`にはカラーリストからgreenなどの文字列がはいるので、./color/green/editor_menu.cssを色に合わせて参照することができる
各種変数の追加
$page_parent
親ページ全てのページ構造体をもつ。
「プロダクト/Aシリーズ/01番系/A-01BK」
というページがあったとき、構造体は、
page_parent: - / - プロダクト/ - プロダクト/Aシリーズ/ - プロダクト/Aシリーズ/01番系/ - プロダクト/Aシリーズ/01番系/A-01BK
というような配列が入る。
SMARTYデバッガのON/OFFについて
user_configに
SMARTY: DEBUG: true
とすることで、デバッガをONにできる(但し裏画面のみで動作する)
応用例
サブメニューが有効にされたWikiPlus Ver 1系(Nadeshiko)の$menu風の使い方
WIKIPLUS Ver 2系(Kikyo)では、
{pane pageprefix=$page_parents|@array_reverse pagename="メニュー" content='&style(red,bold){メニューはありません};'}
次の順番で、ページを参照する。
- プロダクト/Aシリーズ/01番系/A-01BK/メニュー
- プロダクト/Aシリーズ/01番系/メニュー
- プロダクト/Aシリーズ/メニュー
- プロダクト/メニュー
- メニュー
- なにもなければ、「メニューはありません」と、赤、boldで表示。
メニューはもう少し搾りたい場合
プロダクト/メニューと、直下のメニューのみにしたい
{assign var='menulist' value=","|explode:"プロダクト/メニュー,メニュー"} {pane pagename=$menulist content="メニューがありません"}
自分の階層以下のコンテンツをリスト表示する
{assign var='parent' value=$page_parents|@array_pop} {pane content="#jsitemap($parent,1,underlist)"}
自分の親の階層以下(兄弟)のコンテンツをリスト表示する
{assign var='parent' value=$page_parents|@array_pop} {assign var='parent' value=$page_parents|@array_pop} {pane content="#jsitemap($parent,1,underlist)"}