//
// 説明
// テンプレートで置換を実行します。 下位の
// テンプレートの置換を行わないという意味で、実際には下方への再帰
// はしません。 この
// テンプレートの一部である下位テンプレートごとに、結果の現在の値を挿入します。
//
// Notes
// これを参照に戻しますか?
function subst ($handle 、$tag、$autoload = true) {
$append = false;
$debug = $this->DEBUGALL || $this->DEBUG['subst'];
$this->LAST = $handle;
if ($debug)
$this->logwrite ("subst (handle=$handle, tag=$tag) , autoload=$autoload)");
// FastTemplate との互換性を確保するには、配列の結果を上書きする必要があります
//。 これは実際には次の場合にのみ役立つようです
// のようなもの
// $t->parse ('MAIN', array ('array', 'main'));
// ここで 'main'テンプレートには MAIN という名前の変数があります。これは
// 最初のパス (つまり、'array' を解析するとき) で設定され、
// 2 番目のパス (つまり、'main' を解析するとき) で使用されます。
if (gettype( $tag) == 'array') {
foreach (array_values($tag) as $t) {
if ($debug)
$this->logwrite ("subst: 呼び出し subst($handle,$t,$) autoload) ");
$ this-> subst($ handle、$ t、$ autoload);既存の値。
if (substr($tag,0,1) == '.') {
$append = true;
$tag = substr ($tag, 1);
if ($debug)
$ this->logwrite ("subst (handle=$handle, tag=$tag, autoload=$autoload) in append モード");
}
// $this->TEMPLATE[$tag] は次の場合にのみ設定されますこれは明示的に
//define() によって宣言されました。つまり、劣ったテンプレートには
// エントリがありません。
if (isset($this->TEMPLATE[$tag])) {
if (!isset($this->TEMPLATE[$tag]['parsed '])
|| !$this->TEMPLATE[$tag]['parsed'])
$this->parse_internal ($tag);
} else {
if (!$this->DYNAMIC) {
$this->error ("subst (handle=$handle, tag=$tag, autoload=$autoload): " .
「そのようなタグと動的テンプレートはオフになっています」, true);
}
もし($autoload) {
if ($debug)
$this->logwrite ("subst: TEMPLATE[tag=$tag] が見つかりません。自動ロードを試行しています");
foreach (array_keys($this->TEMPLATE) as $t) {
if ($debug)
$this->logwrite ("subst: parse_internal (tag=$t) の呼び出し");
if ( !isset( $this->TEMPLATE[$tag]['parsed'])
|| !$this->TEMPLATE[$tag]['parsed'])
$this->parse_internal ($t);
}
if ($debug)
$this->logwrite ('subst: 自動ロード = false で再試行中');
$this->subst ($handle, $tag, false);
if ($デバッグ)
$ this->logwrite ('subst: completed with autoload = false');
return;
} else {
$this->error ("subst (handle=$handle, tag=$tag, autoload=$autoload) : そのようなタグはありません", true);
}
}
if (!$append) {
$this->TEMPLATE[$tag]['result'] = '';
if ($debug)
$これ->logwrite ("subst (handle=$handle, tag=$tag, autoload=$autoload) 上書きモード");
}
if ($debug)
$this->logwrite ('subst: type( this->TEMPLATE[$tag]['part']) => ' .
gettype($this->TEMPLATE[$tag]['part']));
// うーん、subst() の前にclear() を呼び出すと、この not
// が定義されているようです。少し混乱しています....
$result = '';
if (isset($this->TEMPLATE[$tag]['part'])) {
reset ($this->TEMPLATE[$tag] ['part']);
foreach (array_keys($this->TEMPLATE[$tag]['part']) as $p) {
if ($debug)
$this->logwrite ("subst: TEMPLATE[$tag]['part'][$p]");
$tmp = $this->TEMPLATE[$tag]['part'][$p];
// 試さないでくださいif ($p == 'parent')....
if (strcmp ($p, 'parent') == 0) {
if ($debug)
$this->logwrite ("subst: 部分をスキップ$p");
$tmp = '';
else if (gettype($this->TEMPLATE[$tag]['part'][$p]) == 'string') {
if ($ debug)
$this->logwrite ("subst: using part $p");
リセット ($this->VAR);
// (
// class.FastTemplate.php3 とは異なり) VAR と HANDLE を別々に扱うため、両方を反復処理する必要があります。そうしないと
// 一部の置換を見逃してしまい、10 ではありません0 % 互換性があります。
while (list($key,$val) = each ($this->VAR)) {
if ($debug)
$this->logwrite ("subst: VAR $key を置換しています) = $val $tag");
$key = '{'.$key.'}';
$tmp = str_replace ($key, $val, $tmp);
}
リセット ($this->HANDLE);
while (list($key,$val) = each ($this->HANDLE)) {
if ($debug)
$this->logwrite ("subst: HANDLE $key = の置換$tag の $val ");
$key = '{'.$key.'}';
$tmp = str_replace ($key, $val, $tmp);
$ result .= $tmp;
} else {
$ xtag = $this->TEMPLATE[$tag]['part'][$p]['tag'];
if ($debug) {
$this->logwrite ("subst: 他のタグ $xtag を置換しますresult in $tag");
}
// 結果が設定されていない場合、割り当ては何も行われませんが、
// E_ALL が有効な場合、
// isset()テスト。
if (isset ($this->TEMPLATE[$xtag]['result']))
$result .= $this->TEMPLATE[$xtag]['result'];
}
}
}
if ($this->STRICT) {
// 静かモードがオンになっている場合は、何もしない
// とにかく何もしないので、チェックをスキップします。
if (!$this->QUIET) {
if (preg_match ($this->REGEX_VAR, $result)) {
$this->error ("一致しないタグが $tag
");
}
}
} else {
$result = preg_replace ($this->REGEX_VAR, '', $result);
}
if ($append) {
if ($debug) {
$this->logwrite ("subst: appending TEMPLATE[$tag]['result'] = $result");
$this->logwrite (" subst: old HANDLE[$handle] = {$this->HANDLE[$handle]}");
$this->logwrite ("subst: old TEMPLATE[$tag]['result'] = {$this ->TEMPLATE[$tag]['result']}");
}
// isset() テストは、E_ALL が有効な場合に警告を抑制します
// 変数が実際にはまだ設定されていない場合 (たとえただし、
// ユーザー指定の追加モード).
if (isset ($this->HANDLE[$handle]))
$this->HANDLE[$handle] .= $result;
else
else $これ->HANDLE[$handle] = $result;
if (isset ($this->TEMPLATE[$tag]['result']))
$this->TEMPLATE[$tag]['result'] .= $result;
else
$this->TEMPLATE[$tag]['result'] = $result;
if ($debug) {
$this->logwrite ("subst: new HANDLE[$handle] ] = {$this->HANDLE[$handle]}");
$this->logwrite ("subst: new TEMPLATE[$tag]['result'] = {$this->TEMPLATE[$tag] ]['result']}");
}
} else {
if ($debug)
$this->logwrite ("subst: 設定 TEMPLATE[$tag]['result'] = $result") ;
$this->HANDLE[$handle] = $result;
$this->TEMPLATE[$tag]['result'] = $result;
}
return $this->HANDLE[$handle] ;
}
//
// 説明
// テンプレートからブロックをクリアします。 その目的は、劣った
// テンプレートを親から削除することです。 これは、指定されたテンプレートに直接移動して結果要素をクリア
// テンプレートがすでに解析されている場合でも機能します。 指定されたテンプレートがまだ
// ロードされていない場合は、parse_internal().
//
function clear_dynamic ($tag = NULL) {
$debug = $this->DEBUGALL || を呼び出すことによってロードが強制されます。 $this->DEBUG['clear_dynamic'];
if (is_null ($tag)) {
// すべての結果要素をクリアします。 うーん、テストする必要があります。
if ($debug)
$this->logwrite ("clear_dynamic (NULL)");
foreach (array_values ($this->TEMPLATE) as $t) {
$これは- >clear_dynamic ($t);
}
return;
} else if (gettype($tag) == 'array') {
if ($debug)
$this->logwrite ("clear_動的 ($tag) ");
foreach (array_values($tag) as $t) {
$this->clear_dynamic ($t);
}
return;
}
else if (!isset($this->TEMPLATE[$tag] )) {
if ($debug)
$this->logwrite ("clear_dynamic ($tag) --> $tag が設定されていません。parse_internal を呼び出しています");
$this->parse_internal ($tag);
/// $this->TEMPLATE[$tag] = array ();
}
if ($debug)
$this->logwrite ("clear_dynamic ($tag)");
// $this->TEMPLATE[ $tag]['loaded'] = true;
// $this->TEMPLATE[$tag]['string'] = '';
$this->TEMPLATE[$tag]['result'] = '';
// $this->TEMPLATE[$tag]['clear'] = true;
}
//
// 説明
// parse() によって設定されたハンドルの結果をクリアします。 入力ハンドルは、
// 単一の値、配列、または PHP 定数 NULL にすることができます。
// 最後のケースでは、すべてのハンドルがクリアされます。
//
関数クリア ($handle = NULL) {
$debug = $this->DEBUGALL || $this->DEBUG['clear'];
if (is_null ($handle)) {
// わざわざ設定を解除する必要はなく、全体を新しいものに設定するだけです
// 空の配列。
if ( $debug)
$this->logwrite ("clear (NULL)");
$this->HANDLE = array ();
} else if (gettype ($handle) == 'array') {
if ($debug)
$this->logwrite ("clear ($handle)");
foreach (array_values ($handle) as $h) {
$this->clear ($h);
} else if (isset ($this->HANDLE[$handle])) {
if ($debug)
$this->logwrite ("clear ($handle)");
unset ($this->HANDLE [$handle]);
}
}
//
// 説明
// 指定されたタグに関連付けられているすべての情報と
// 埋め込みテンプレートに関連付けられている情報をすべてクリアします。 これにより、次回の subst() 呼び出しでテンプレートが強制的に再ロードされます
// さらに、subst() への以前の呼び出しの結果もクリアされます
// // 注意事項
// これにより、$this->HANDLE にぶら下がり参照が残ります。 それとも、PHP は
// 参照カウントを行うので、それらはまだ有効ですか?
//
function unload ($tag) {
if (!isset($this->TEMPLATE[$tag]))
return;
if ( isset ($this->TEMPLATE[$tag]['parent'])) {
$ptag = $this->TEMPLATE[$tag]['parent'];
foreach (array_keys($this->TEMPLATE) as $t) {
if ($this->TEMPLATE[$t]['parent'] == $ptag) {
unset ($this->TEMPLATE[ $t]);
}
}
}
unset ($this->TEMPLATE[$tag]);
return;
}
//
// 説明
// class.FastTemplate.php3 互換インターフェイス。
//
function assign ($tplkey, $rest = '') {
$this->setkey ($tplkey, $rest);
}
//
// 説明
// Set a (key, value) を内部変数配列に追加します。 これらは
// テンプレート変数を置き換えるために置換フェーズ中に使用されます。
//
関数 setkey ($tplkey, $rest = '') {
if (gettype ($tplkey) == 'array') {
reset ($tplkey);
while (list($key,$val) = each ($tplkey)) {
if (!empty($key)) {
$this->VAR[$key] = $val;
}
}
} else {
if (!empty($tplkey)) {
$this->VAR[$tplkey] = $rest;
}
}
}
//
// 説明
/ / class.FastTemplate.php3 互換インターフェイス
//
function get_assigned ($key = '') {
return $this->getkey ($key);
}
//
// 説明
//キー名を指定した内部変数配列からの値。
//
function getkey ($key = '') {
if (empty($key)) {
return false;
} else if (isset ($this-> ;VAR[$key])) {
return $this->VAR[$key];
} else {
return false;
}
}
関数 fetch ($handle = '') {
if (empタイ($handle)) {
$handle = $this->LAST;
}
return $this->HANDLE[$handle];
}
function xprint ($handle = '') {
if (empty ($handle)) {
$handle = $this->LAST;
}
print ($this->HANDLE[$handle]);
}
function FastPrint ($handle = '') {
$ this->xprint ($handle);
}
function clear_href ($key = '') {
$this->unsetkey ($key);
}
function unsetkey ($key = '') {
if (empty($key)) {
unset ($this->VAR);
$this->VAR = array ();
} else if (gettype($key) == 'array') {
リセット ($key);
foreach (array_values($key) as $k) {
unset ($this->VAR[$k]);
}
} else {
unset ($this->VAR[$key]);
}
}
function define_nofile ($stringList, $dynamic = 0) {
$this->define_raw ($stringList, $dynamic);
}
//
// 説明
// 明示的なエラーメッセージを制御するメンバー関数。
// 実際の PHP エラー処理は行いません。
//
関数エラー ($errorMsg, $die = 0) {
$this->ERROR = $errorMsg;
echo "ERROR: {$this-> ;ERROR}
n";
if ($die) {
exit;
}
return;
}
}
// 全部束