要約
* [*introtext*]
* [!EndIf!]
*
* 2) 長いタイトル(longtitle)が入力されていなければ、
* タイトル(pagetitle)を表示する。
*
* [*longtitle*]
* [!StartIf? ¬=`1` &var=`longtitle`!][*pagetitle*][!EndIf!]
*
* Description:
* デフォルトでは、変数等の値が空(未入力)の場合、表示OFFとし、
* StartIfが「」を、EndIfが「」を、
* それぞれ出力して、間のコンテンツを囲むことによって非表示にする。
* 変数等の値がある(入力済み)の場合、表示ONとし、
* StartIfもEndIfも何も出力せず、間のコンテンツはそのまま表示される。
*
* Note:
* ネストして(入れ子にして)使用することも可能。
*
* 1ページに複数組入れる場合、同じタグを繰り返すとキャッシュされる?ので、
* 適当にオプションを指定して、別のタグと認識させる必要がある。
* 例)[!EndIf? &for=`longtitle`!] [!EndIf? &no=`1`!] [!EndIf? &no=`2`!]
*
* 特殊文字(記号)の一部は、MODx側で処理されて期待通りに動作しないため、
* 以下のように、urlencodeした値を指定する必要がある。
* (対応パラメータ:attr、on_st、on_ed、off_st、off_ed、value、regex)
* = => %3D
* ? => %3F
* % => %25
* & => %26
* ` => %60
* [ => %5B
* ] => %5D
*
* 例えば、
の途中で、StartIfとEndIfを使う等、
* StartIfとEndIfの間で、一連のHTMLタグが完結されていないような場合は、
* デフォルトの動作では問題が起こる可能性があります。
*
* Param:
* ----判定する値の指定----
*
* [string] var テンプレート変数名(省略時:content)
*
* [string] config 設定名(省略時はテンプレート変数)
*
* ----値の修飾----
*
* [flag: 1 | 0] trim 両端空白除外フラグ(省略時:1)
* 1:両端の空白を除いた値で判定する。
* 0:値の両端に空白があっても含めたまま判定する。
*
* ----論理演算----
*
* [flag: 1 | 0] not 条件否定フラグ(省略時:0)
* 1:条件を否定(表示のON/OFFを逆転)する。
* 0:条件そのまま。
*
* ----タグの自動生成----
*
* [flag: 1 | 0] either タグ無条件出力フラグ(省略時:0)
* 1:表示ONでもOFFでもタグを生成して出力する。
* 0:表示OFFの場合のみタグを生成して出力する。
*
* [string] tag 出力するタグ名を指定(省略時:span)
* [string] attr 出力するタグの属性を指定(省略時:なし)
*
* (※)タグを自動生成する場合、上記の指定にかかわらず、
* 表示OFFの場合のみ「style="display:none;"」を開始タグに付加する。
*
* ----出力内容の直接指定----
*
* [string] on_st 表示ONの場合に、StartIfが出力する内容
* [string] on_ed 表示ONの場合に、EndIfが出力する内容
* [string] off_st 表示OFFの場合に、StartIfが出力する内容
* [string] off_ed 表示OFFの場合に、EndIfが出力する内容
*
* (※)これら指定により、タグは自動生成せず、指定された内容を出力する。
* on_stとon_ed、off_stとoff_ed、それぞれ対で指定しなければ無効。
*
* ----値の判定方法----
*
* 指定無し 空(未入力)でなければ表示ON。
* [string] value 指定の値に一致すれば表示ON。
* [string] regex 指定の正規表現に一致すれば表示ON。
*
* Implementation:
* グローバル変数「$_EndIfStack」を使用し、StartIfからEndIfに情報を渡す。
*
* More example:
* 1) 要約(introtext)が未入力なら、見出しとともにコメントアウトする。
* (途中にコメントタグが入っている場合は使えない)
*
* [!StartIf? &var=`introtext` &off_st=``!]
* 要約
* [*introtext*]
* [!EndIf!]
*
* 2) 変数「number」が数字だけの場合、見出しとともに表示する。
*
* [!StartIf? &var=`number` ®ex=`/^\d+$/`!]
* 番号
* [*number*]
* [!EndIf!]
*
* Date:
* 2007-12-11
*
* Created by:
* Kazuyuki Ikeda (HIKIDAS Co.,Ltd) http://www.hikidas.com/
*
* Changelog:
* 2007-12-11 1.00 公開バージョン
*/
//---- 値の取得
if (isset($config)) {
$content = $modx->config[$config];
} else {
if (isset($var)) {
$var_name = $var;
} else {
$var_name = 'content';
}
$content_array = $modx->getTemplateVar($var_name);
$content = $content_array['value'];
}
//---- 値の修飾
$trim_flag = isset($trim) ? $trim : "1";
if ($trim_flag) {
$content = trim($content);
}
//---- 値の判定
if (isset($value)) {
$match = ($content === rawurldecode($value));
} elseif (isset($regex)) {
$match = preg_match(rawurldecode($regex), $content);
} else {
$match = ($content !== '');
}
//---- 表示条件の判定
$not_flag = isset($not) ? $not : "0";
$display = FALSE;
if ($match xor $not_flag) {
$display = TRUE;
}
//---- タグの自動生成
$tag_name = isset($tag) ? $tag : 'span';
$attributes = isset($attr) ? ' '.rawurldecode($attr) : '';
$start_tag = '<'.$tag_name.$attributes; // 閉じない
$end_tag = ''.$tag_name.'>';
$either_flag = isset($either) ? $either : "0";
if ($display) {
if ($either_flag) {
$block_tag = $start_tag.'>';
$stack_tag = $end_tag;
} else {
$block_tag = '';
$stack_tag = '';
}
} else {
$block_tag = $start_tag.' style="display:none;">';
$stack_tag = $end_tag;
}
//---- 出力内容の直接指定
if ($display) {
if (isset($on_st) && isset($on_ed)) {
$block_tag = rawurldecode($on_st);
$stack_tag = rawurldecode($on_ed);
}
} else {
if (isset($off_st) && isset($off_ed)) {
$block_tag = rawurldecode($off_st);
$stack_tag = rawurldecode($off_ed);
}
}
//---- グローバル変数に情報をセット
$stack_var_name = "_EndIfStack";
if (! isset($GLOBALS[$stack_var_name])) {
$GLOBALS[$stack_var_name] = array();
}
array_push($GLOBALS[$stack_var_name], $stack_tag);
return $block_tag;
?>