MODxでCMSの恩恵を賜りつつ、validを保ち、かつWEB標準化を目指そう
Welcome !! Now 2008.07.25 16:19 (JST)
[ スニペット ]
PHx (Placeholders Xtended)は、プレイスホルダやテンプレート変数、セッティングタグの出力結果をモデファイするプラグインです。タグのネストを許可します。カスタムモディファイアは、小さなスニペットを作ることによって可能です。
[+placeholder+][*variable*][(setting)]以下のスニペットには、あらかじめPHxファンクションが同梱されており、PHxを別途導入することなく、PHxファンクションを利用できます。
上記以外のスニペットでPHxファンクションを利用する場合は、PHx プラグインを別途導入する必要がるでしょう。
[+placeholder:esc+][*createdon:date=`%Y-%m-%d at %R`*][+somevar:esc:nl2br:strip+]複数のモディファイアをつなげる場合は、左から右に順番に実行されます。
これは実際には値を持たないダミープレイスホルダです。
[+phx:if=`[+this+]`:is=`[+that+]`:then=`do this`:else=`do that`+]また、この「PHx モディファイア」の他、いくつかのモディファイアは、自動的に明確な初期値を持つでしょう。
以下の場合、「userinfo モディファイア」の値はカレントユーザを示します(…ウソかも)。
[+phx:userinfo=`username`+]以下のようなキャラクタの組み合わせは、それがMODxタグの一部でないなら避けるべきです。
[+[*[(+]*])]一般的にこれらは問題とはならないでしょう。しかし、テンプレートの中に下記のようなJavascriptがあった場合:
array[counter++]
最後の「+]」のために奇妙な動作をすることになるでしょう
値を小文字で出力します
値を大文字で出力します
最初の文字を大文字で出力します
値の文字数を出力します
値のHMTLタグを序寄書します
html と ブラケットキャラクタを回避します
「&」などをエンティティに変換します
改行を<br />に変換します
改行やタブ、連続したスペースを取り去ります。
現在の値を逆転します。
指定した値より、現在の値の方が長い場合、ワードラップ処理を行いながら改行する?ウソかも。デフォルト「70文字」
現在の値の(最初の文字から)指定した文字数までを出力する。デフォルト「100文字」
[*introtext:limit=`40`*]PHP strftime 関数のように扱えます。
[*createdon:date=`%Y/%m/%d`*]現在の値からMD5 hash を作ります。
「feild」にはデータベースのフィールド名を指定します。
[*createdby:userinfo=`username`*]シンプルな計算ができます(* + /)。「?」が現在の値を現します。
?+1+(2+3)+4/5*6テンプレート変数の値や、プレイスホルダの値が「空」だった場合の値を指定します。
テンプレート変数やプレイスホルダによる出力結果を、指定した値で置き換えます
[+placeholder:select=`0=OFF&1=ON&2=UNKNOWN`+]等しい(==)
等しくない(!=)
以上(>=)
以下(<=)
~より大きい(>)
~より小さい(<)
カンマで区切ってWebグループを指定します。そして現在のユーザが所属するグループをチェックし、該当するかしないかによって「true/false」を返します。
[+phx:mo=`myWebgroup`:then=`I'm a member`:else=`I'm NOT a member`+]新しい値を取ります。たいていは、「or」や「and」の前に使われるでしょう
前後のステートメントを「or」で結びます
[+phx:if=`[*id*]`:is=`2`:or:is=`3`:then=`{{Chunk}}`:else=`{{OtherChunk}}`+]前後のステートメントを「and」で結びます
[+phx:if=`[!UltimateParent!]`:is=`1`:and:isnot=`[*id*]`:then=`{{ChildChunk}}`:else=`{{ParentChunk}}`+]返値が「true」ならば、{{chunk}}、[[snippet]]または
htmlを表示します
返値が「faulse」ならば、{{chunk}}、[[snippet]]または
htmlを表示します
返値が「true」の時、オリジナルの入力値をテンプレートとして使用する以外は、「then」と同じです。
[+myplaceholder:len:gt=`3`:show+]スニペットを作ることによって、モディファイアを独自に作ることができます。方法は、wikiを参照してください
PHx/CustomModifiers を参照してください
[+phx:input=`[+myplaceholder+]`:modifier1:modifier2+] または[*phx:input=`[+myplaceholder+]`:modifier1:modifier2*]※スニペットのロジックによっては、制限があるかもしれません
この改造を行うと、ドキュメントまたはテンプレーにあるおまじないを挿入することによって、ドキュメントまたはテンプレートごとにPHxの有効無効を切り替えられるようになります。
関連トピ:テンプレートごとにプラグイン(PHx)の有効/無効を切り替えたい
include_once $modx->config['rb_base_dir'] . "plugins/phx/phx.parser.class.inc.php"; $e = &$modx->Event; switch($e->name) { case 'OnParseDocument': if (!strstr($modx->documentOutput,"donotphx")) { $PHx = new PHxParser($phxdebug,$phxmaxpass); $PHx->OnParseDocument();}break;}
<!-- donotphx -->このおまじないが挿入されたドキュメントまたはテンプレートにおいて、PHxが無効になります。
ソースの中で該当する文字列(赤字の部分)を変更すれば、好きなおまじないにすることができます。
以下の方法でテンプレートをインクルードしている場合は、インクルードするファイル内や、ドキュメントにおまじないを書いても、おまじないは無視されます(PHxは無効になりません)。
この場合は、以下のように「テンプレート コード(html)」の中におまじないを書くようにします。
[*cube-black*]<!-- donotphx -->[!includeFile?
&file=`assets/template/mytemplate/todo_list-in.html`!]<!-- donotphx -->