| Цитата(dm9 @ 15.1.2005, 17:34) | {IF LALALA} Конец такой: {ENDIF} |
Я это делал так:
| Код | function FindCondition() { // Поиск шаблонных условий. // Регулярное выражение для поиска условий в шаблоне. $Preg = "|{if\s?%?([a-zA-Z0-1_.]*?)%?\s+?([=!<>]*?)\s?%?([a-zA-Z0-1_.]*?)%?}(.*?){endif}|si"; // При нахождении консрукций шаблонных условий они заносятся в массив ConditionMatches. preg_match_all($Preg, $this->Document, $this->ConditionMatches); if(!isset($this->ConditionMatches[0][0])) return false; return true; }
|
Но в этой функции можно еще потом и {elseif} использовать. Добавлено @ 16:45 Условия потом парсились таким методом:
| Код | function CompileCondition(&$Template) { // найти все вхождения конструкций шаблонных условий. if(!$Template->FindCondition()) return false; if(sizeof($Template->ConditionMatches[0]) < 1) return true; for($i = 0; $i < sizeof($Template->ConditionMatches[0]); $i++) { // Если в условных блоках шаблона не встречаются блоки "или": if(!strpos($Template->ConditionMatches[4][$i], '{elseif}')) { // Разбор условий на составляющии и их обработка. $l = addslashes(trim($Template->ConditionMatches[1][$i])); $c = addslashes(trim($Template->ConditionMatches[2][$i])); $r = addslashes(trim($Template->ConditionMatches[3][$i])); if(isset($Template->Variables[$l])) { $l = $Template->Variables[$l]; } else { $l = 'null'; } if(isset($Template->Variables[$r])) { $r = $Template->Variables[$r]; } if(eval('if("'.$l.'" '.$c.' "'.$r.'") { return true; } else { return false; }')) { $Template->Document = str_replace($Template->ConditionMatches[0][$i], $Template->ConditionMatches[4][$i], $Template->Document); } else { $Template->Document = str_replace($Template->ConditionMatches[0][$i], '', $Template->Document); } } else { // Если в условных блоках шаблона встречаются блоки "или": // Разбор условий на составляющии и их обработка. $l = addslashes(trim($Template->ConditionMatches[1][$i])); $c = addslashes(trim($Template->ConditionMatches[2][$i])); $r = addslashes(trim($Template->ConditionMatches[3][$i])); if(isset($Template->Variables[$l])) { $l = $Template->Variables[$l]; } else { $l = 'null'; } if(isset($Template->Variables[$r])) { $r = $Template->Variables[$r]; } $ex = explode('{elseif}', $Template->ConditionMatches[4][$i]); if(eval('if("'.$l.'" '.$c.' "'.$r.'") { return true; } else { return false; }')) { $Template->Document = str_replace($Template->ConditionMatches[0][$i], $ex[0], $Template->Document); } else { $Template->Document = str_replace($Template->ConditionMatches[0][$i], $ex[1], $Template->Document); } } } }
| |