body,pane命令
編集エリアの仕様について
{body オプション・・・・}
あるいは、
{pane permalink="permalink名" オプション・・・・}
bodyとpaneの違い
body命令はURLで指定されたページのコンテンツをHTML形式で出力する。pane命令は、pagenameやpermalinkで指定されたページを参照する。
- body
- コンテンツエリア本文。この部分が編集モードとして編集できるようになる。WIKIPLUSの骨子に当たる部分で、ページに使う事ができる全てのデザインファイルで、body要素を入れなくてはならない。
- body要素で表示されるページは、ブラウザの「URL」で示すパーマリンクとなる。
- pane
- コンテンツエリア。この部分が編集モードで編集できるようになる。本文ではなく、ページ内にある「その他の編集要素」として、コンテンツ担当者が編集できる領域。
- 動きとしては、「別のパーマリンクのページ」を透過的にpaneで呼び出す形。pane命令で直接呼ばれたページは、ページ属性が例え非表示であったとしても表示するができる(ページ属性は、編集用URL側でそのパーマリンクで直接アクセスすれば良い)。「bodyとしては表示しない(直接URLで指定しても表示しない)ページ」を、要素として付け加えるとき、利用できる。
pane(body)のオプションについて
bodyの場合は、ブラウザURLで指定されたPermalinkがpermalink引数に自動的に入っていると考えれば良い。
paneの場合は、
- permalink
- paganame
- content
のいずれかがなくてはならない。
permalink | 差し込むコンテンツエリアを、 パーマリンクで指定する。 body命令では、parmalink指定はできない。 | |
pagename | 差し込むコンテンツエリアを、ページ名で指定する。 body命令では、pagename指定はできない。 | |
pageprefix | (URLで指定されているBody要素の)ページ名のPrefix。同階層の別のページを要素として利用するためにつかう。 body命令では使用できない。 | |
content | ヒアWIKIドキュメント構文として記述。 WIKIのブロック要素、インライン要素などを直接指定することができ、デザイン中に動的要素を差し込むことが可能となる。 body命令では使用できない。 | |
error403 | paneがエラー403の時に出力するメッセージ。文字列内ではWIKI構文が使用できる。body関数で利用し、pane関数では現在では403になることは(基本は)ない。 | |
error404 | paneがエラー404の時に出力するメッセージ。文字列内ではWIKI構文が使用できる。body関数とpane関数どちらでも利用ができる。 paneの場合、呼び出すページが存在しないときに代わりに呼ばれるだけで、httpのresult codeが404になるわけではない。 | |
type | text | テキストモード。Wikiパーザは通らなく、テキスト文字しか許さない。テキストの文字数の指定が可能(length=で指定) |
inline | インラインWikiモード。プラグインのブロック命令(HTML的にブロック要素となるもの)は利用できない。 先頭に特殊タグ(スペース、-、+、*、>など)がはいる行や、空行によって複数パラグラフになるものは、ブロック要素になるため利用出来ない。 | |
block | 全てのWIKI構文が利用できる(デフォルト)。 HTML的にはブロック要素となる。 | |
width | ペインの横幅の指定。 この設定をすると、WIKIPLUSのシステムはこの横幅になるべく入るような形でコンテンツを変換する。 編集モードのワープロビューで「横幅」がwidthに制限される。 また、imageプラグインのfit=100%が、この横幅になる。 | |
properties | ページプロパティエリアの表示非表示on/off。デフォルトはoff。 | |
editor_css | エディター向けのcssを設定する。 cssファイルを設定しておくことで、エディタのワープロビューで、表示と近しい表示を編集者にみせることができる。h2〜h3などを指定しておくと良い。 |
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)"}