clevel
Новичок
условные операторы в шаблонах
1.Поиск по данному вопросу дергал.
2.Необходимо в своей системе шаблонов ввести возможность задавать условия вида:
IF[condition]{}ELSE{another}, приче ELSE{} является не обязательной частью.
сделал регулярное выражение:
3.собственно проблема: надо корректно отрабатывать условные операторы, если есть подшаблоны.
strtok смотрел, не устраивает, так как при задании условия для рабивки слов IF[0>0]{cccIF[1>1]{nnn}}ELSE{ddd} начинает игнорировать символы IFELSE в шаблоне, что не допустимо.
Подскажите, куда смотреть?
Заранее спасибо!
-~{}~ 23.06.04 08:55:
решение пришло само, как снежный ком на голову..
П.С.: в последнее время участились случаи самовольного обнаружения решения проблем...
Спасибо всем за участие..
-~{}~ 23.06.04 09:30:
так.. столкнулся по ходу с такой проблемкой... у меня функция remove_if в качестве параметра получает массив $match, где $match[1] "чистенькое" условие IF[]..
так вот, простое
всегда дает истину, что по документации правильно...
однако хочется получать истину/ложь исходя из содержания строки. eval использовать крайне не хочется..
Есть ли решения данной проблемы?
Условия вида 0>0, 'ab'!=''
-~{}~ 23.06.04 11:28:
сделал самописную функцию, вроде работает. Критика приветствуется:
-~{}~ 23.06.04 11:28:
какое продуктивное общение получилось.. сам с собой..
1.Поиск по данному вопросу дергал.
2.Необходимо в своей системе шаблонов ввести возможность задавать условия вида:
IF[condition]{}ELSE{another}, приче ELSE{} является не обязательной частью.
сделал регулярное выражение:
PHP:
$shab=preg_replace_callback("/IF\s*\[([^]]*)\]\s*\{([^}]*)\}\s*(ELSE\{([^}]*)\}|)/sim","remove_if",$shab);
strtok смотрел, не устраивает, так как при задании условия для рабивки слов IF[0>0]{cccIF[1>1]{nnn}}ELSE{ddd} начинает игнорировать символы IFELSE в шаблоне, что не допустимо.
Подскажите, куда смотреть?
Заранее спасибо!
-~{}~ 23.06.04 08:55:
решение пришло само, как снежный ком на голову..
PHP:
while(($pos=strrpos($shab,"IF"))!==false){
$shab=substr($shab,0,$pos).preg_replace_callback("/IF\s*\[([^]]*)\]\s*\{(.*?)\}\s*(ELSE\s*\{(.*?)\}|)/sim","remove_if",substr($shab,$pos));
} //while have conditions
Спасибо всем за участие..
-~{}~ 23.06.04 09:30:
так.. столкнулся по ходу с такой проблемкой... у меня функция remove_if в качестве параметра получает массив $match, где $match[1] "чистенькое" условие IF[]..
так вот, простое
PHP:
$tmpl=($match[1]) ? ($match[2]) : ($match[4]);
однако хочется получать истину/ложь исходя из содержания строки. eval использовать крайне не хочется..
Есть ли решения данной проблемы?
Условия вида 0>0, 'ab'!=''
-~{}~ 23.06.04 11:28:
сделал самописную функцию, вроде работает. Критика приветствуется:
PHP:
function parse_condition($val){
preg_match("/([^><!=]*?)([><!=]{1,2})(.*)/is",$val,$res);
switch($res[2]){
case ">": return ($res[1]> $res[3]) ? (true): (false);
case ">=": return ($res[1]>=$res[3]) ? (true): (false);
case "<": return ($res[1]< $res[3]) ? (true): (false);
case "<=": return ($res[1]<=$res[3]) ? (true): (false);
case "==": return ($res[1]==$res[3]) ? (true): (false);
case "!=": return ($res[1]!=$res[3]) ? (true): (false);
default: return false;
} //switch operand
} //function parse_condition
какое продуктивное общение получилось.. сам с собой..