Welcome !! Now 2008.07.25 16:19 (JST)

PHx 2.1.2 (Placeholders Xtended)

[ スニペット ]

PHx (Placeholders Xtended)は、プレイスホルダやテンプレート変数、セッティングタグの出力結果をモデファイするプラグインです。タグのネストを許可します。カスタムモディファイアは、小さなスニペットを作ることによって可能です。

参照ページ:PHx wikiPHx

テスト環境

  • サーバ:さくらインターネット  
    • PHP 4.4.4
    • MYSQL 4.0.27
  • MODX:0.9.5
  • PHx 2.1.2 (Placeholders Xtended)

このページの更新履歴

拡張できるMODxタグ

  • プレイスホルダタグ…[+placeholder+]
  • テンプレート変数タグ…[*variable*]
  • セッティングタグ…[(setting)]

対応しているスニペット

以下のスニペットには、あらかじめPHxファンクションが同梱されており、PHxを別途導入することなく、PHxファンクションを利用できます。

  • Ditto (1.1 以上)
  • Jot
  • MaxiGallery

上記以外のスニペットでPHxファンクションを利用する場合は、PHx プラグインを別途導入する必要がるでしょう。

基本的な書式

  • [+placeholder:esc+]
  • [*createdon:date=`%Y-%m-%d at %R`*]
  • [+somevar:esc:nl2br:strip+]

複数のモディファイアをつなげる場合は、左から右に順番に実行されます。

高度な使用法

phx

これは実際には値を持たないダミープレイスホルダです。

サンプル:
[+phx:if=`[+this+]`:is=`[+that+]`:then=`do this`:else=`do that`+]

また、この「PHx モディファイア」の他、いくつかのモディファイアは、自動的に明確な初期値を持つでしょう。

以下の場合、「userinfo モディファイア」の値はカレントユーザを示します(…ウソかも)。

サンプル:
[+phx:userinfo=`username`+]

注意点

以下のようなキャラクタの組み合わせは、それがMODxタグの一部でないなら避けるべきです。

  • [+
  • [*
  • [(
  • +]
  • *]
  • )]

一般的にこれらは問題とはならないでしょう。しかし、テンプレートの中に下記のようなJavascriptがあった場合:

array[counter++]

最後の「+]」のために奇妙な動作をすることになるでしょう

Modifiers

String

lcase

値を小文字で出力します

ucase

値を大文字で出力します

ucfirst

最初の文字を大文字で出力します

length | len

値の文字数を出力します

notags

値のHMTLタグを序寄書します

esc

html と ブラケットキャラクタを回避します

htmlent

「&」などをエンティティに変換します

nl2br

改行を<br />に変換します

strip

改行やタブ、連続したスペースを取り去ります。

reverse

現在の値を逆転します。

wordwrap(=`length`)

指定した値より、現在の値の方が長い場合、ワードラップ処理を行いながら改行する?ウソかも。デフォルト「70文字」

limit(=`length`)

現在の値の(最初の文字から)指定した文字数までを出力する。デフォルト「100文字」

サンプル:
[*introtext:limit=`40`*]

Special

date(=`dateformat`)

PHP strftime 関数のように扱えます。

サンプル:
[*createdon:date=`%Y/%m/%d`*]

md5

現在の値からMD5 hash を作ります。

userinfo=`field`

「feild」にはデータベースのフィールド名を指定します。

サンプル:
[*createdby:userinfo=`username`*]
作成者のユーザネームを返します

math=`calculation`

シンプルな計算ができます(* + /)。「?」が現在の値を現します。

計算式サンプル:
?+1+(2+3)+4/5*6

ifempty=`other value`

テンプレート変数の値や、プレイスホルダの値が「空」だった場合の値を指定します。

select=`options`

テンプレート変数やプレイスホルダによる出力結果を、指定した値で置き換えます

サンプル:
 [+placeholder:select=`0=OFF&1=ON&2=UNKNOWN`+]

Conditional operators

is(eq)

等しい(==)

ne(isnot)

等しくない(!=)

eg(equal or greater)

以上(>=)

el(equal or lower)

以下(<=)

gt(greater)

~より大きい(>)

lt(lower )

~より小さい(<)

mo=`Webgroups`

カンマで区切ってWebグループを指定します。そして現在のユーザが所属するグループをチェックし、該当するかしないかによって「true/false」を返します。

サンプル:
[+phx:mo=`myWebgroup`:then=`I'm a member`:else=`I'm NOT a member`+]

if =`value`

新しい値を取ります。たいていは、「or」や「and」の前に使われるでしょう

or

前後のステートメントを「or」で結びます

サンプル:
[+phx:if=`[*id*]`:is=`2`:or:is=`3`:then=`{{Chunk}}`:else=`{{OtherChunk}}`+]

and

前後のステートメントを「and」で結びます

サンプル:
[+phx:if=`[!UltimateParent!]`:is=`1`:and:isnot=`[*id*]`:then=`{{ChildChunk}}`:else=`{{ParentChunk}}`+]

then =`template`

返値が「true」ならば、{{chunk}}[[snippet]]または htmlを表示します

else =`template

返値が「faulse」ならば、{{chunk}}[[snippet]]または htmlを表示します

show

返値が「true」の時、オリジナルの入力値をテンプレートとして使用する以外は、「then」と同じです。

サンプル:
[+myplaceholder:len:gt=`3`:show+]
「3」より大きければ、「myplaceholder」の値を返すでしょう

Custom modifiers

スニペットを作ることによって、モディファイアを独自に作ることができます。方法は、wikiを参照してください

提供されているカスタムモディファイア

PHx/CustomModifiers を参照してください

対応外のスニペットでPHxを利用する方法

サンプル:
[+phx:input=`[+myplaceholder+]`:modifier1:modifier2+] または
[*phx:input=`[+myplaceholder+]`:modifier1:modifier2*]

※スニペットのロジックによっては、制限があるかもしれません

カスタマイズ

ドキュメント(またテンプレート)ごとにPHxプラグインの有効/無効を切り替える

この改造を行うと、ドキュメントまたはテンプレーにあるおまじないを挿入することによって、ドキュメントまたはテンプレートごとに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)」の中におまじないを書くようにします。

TVによるインクルードの場合
[*cube-black*]<!-- donotphx -->
IncludeFile によるインクルードの場合
[!includeFile? &file=`assets/template/mytemplate/todo_list-in.html`!]<!-- donotphx -->

△ページトップ