要約 * [*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 = ''; $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; ?>