W szablonach instrukcje są zapisywane tak: <!-- IF -->
Działa bardzo dobrze, poza jedną rzeczą. Powienie obsługiwać instrukcji IF oraz ELSEIF.
Niestety dla instrukcji IF zwraca dobry rezultat tylko dla zmiennej PHP_VERSION o wartość 4.3.10. Dla wszystkich innych zwraca zły wynik.
Wydaje mi się, że problem jest w tej fukcji:
<?php function parse_if($pattern, $what){ /* Tokenize args for 'if' tag. */ "[^"]*(?:.[^"]*)*" | '[^']*(?:.[^']*)*' | [(),] | [^s(),]+)/x', $pattern, $match); $tokens = $match[0]; $token = &$tokens[$i]; switch ($token){ case 'eq': $token = '=='; break; case 'ne': case 'neq': $token = '!='; break; case 'lt': $token = '<'; break; case 'le': case 'lte': $token = '<='; break; case 'gt': $token = '>'; break; case 'ge': case 'gte': $token = '>='; break; case 'and': $token = '&&'; break; case 'or': $token = '||'; break; case 'not': $token = '!'; break; case 'mod': $token = '%'; break; case 'div': $token = '/'; break; case 'add': $token = '+'; break; case 'sub': $token = '-'; break; case 'mul': $token = '*'; break; case '(': break; default: if(preg_match('#{(((([a-zA-Z0-9-_]+?.)*?)([a-zA-Z0-9_]+?))|(@[a-zA-Z0-9_]+?)|(([a-zA-Z0-9_]+?)@([a-zA-Z0-9_]+?)))}#s', $token, $varrefs)){ $token = $this->generate_block_ref($token); }elseif($token{0} == '@'){ $token = '$this -> _variables[''.$token.'']'; } break; } } return (($what) ? '} elseif (' : ' '; if (') . (implode(' ', $tokens) . ') { $this -> compiled .= '' . "n"); } } // end parse_if(); ?>
Może ktoś znajdzie błąd w tej fukcji
--edit:
Używaj odpowiednich tagów BBCode...
~crash