mymind
Новичок
Разработка TemplateEngine может кто подскажет
Прошу помощи. Сижу уж третий день. Не могу решить задачу. Подвис и всё тут. Может кто мыслю выскажет.
Проблема в обработке вложеных циклов в шаблоне. Значит система работает следующим образом. Первоначально шаблон инициализируется. В результате содержимое файла шаблона помещается в массив, под своим ключом
Далее формируется массив из данных следующего вида
Тут всё просто. Теперь шаблон. Тоже велосипеда не изобрел. Все переменные обозначаются {VAR}
Так вот возникла проблема с обработкой вложеных циклов. Отмечу, что обрабатывает также и условия, и вставки и формы. Но вот с циклами подвис. В шаблоне циклы выглядят следюущим образом (пример) :
Теперь результат. Что нужно получить :
Например :
Цикл VC1 имеет два прохода. А цикл VC2 при значении VC1=0 имеет два прохода, при VC1=1 имеет три прохода. Т.е в общем виде схема такая
При VC1=0
Имеет количетсво элементов в VC2=2
При VC1=1
Имеем количество элементов VC2=3
Ес-но, вложений неограниченно. И VC1 и VC2 - это всего лишь названия циклов. Т.е. может быть и CICLE и MYDATA тут неважно. Понятно, что после работы шаблонизатора, вся конструкция должна быть заменена на соовтетвующий результат. Т.е. пример должен выглядеть следлующим образом ( переменные IVAR и JVAR всего лишь счётчики) :
Значит данные, что передаю Я выглядят следующим образом :
А вот дальше не знаю что делать. Пока сделал лишь такую штуку. Парсится шаблон и на основе результат парсинга рекурсивно формирую массив вида, которы написал выше. Ес-но значение выбираются просто. Сначала формирую строку вида к примеру
И рекурсивно в итоге можно построить дерево массива. Проблем нет. Но вот, как дальше поступить. Даже не представляю.
Может просто усталость говорит. Проблема в том, чтобы на основе данных сформировать итоговый HTML, который заменит в результате сабой шаблонные команды.
Пока думаю так. В массив помещаются тела всех циклов. Когда рекурсия добежала до самого глубоко цикла, начинаем обрабатывать это тело на наличие переменных и их значение. А вот дальше как ? Просто заменить тело цикла на результат не вкатывает. Короче идеи пока подвисли. Может у кого есть какая мысля. Чиркните. Любая искорка поможет разгореться пламяни.
Прошу помощи. Сижу уж третий день. Не могу решить задачу. Подвис и всё тут. Может кто мыслю выскажет.
Проблема в обработке вложеных циклов в шаблоне. Значит система работает следующим образом. Первоначально шаблон инициализируется. В результате содержимое файла шаблона помещается в массив, под своим ключом
PHP:
$PAGE=new TEMPLATE;
$PAGE->ini("filetemplate.tpl","key");
PHP:
$DATA["NAMEVAR"]="VALUEVAR";
//И собственно сама подстановка
// выводим
$PAGE->insert("key","view",$DATA);
// или результат загоняем в переменную
$rezult=$PAGE->insert("key","return",$DATA);
Так вот возникла проблема с обработкой вложеных циклов. Отмечу, что обрабатывает также и условия, и вставки и формы. Но вот с циклами подвис. В шаблоне циклы выглядят следюущим образом (пример) :
PHP:
<ul type="square">
<!--BEGIN_"VC1"-->
<li>Основной цикл - проход {IVAR}
<ul type="round">
<!--BEGIN_"VC2"-->
<li>Цикл вложеный уже {JVAR}</li>
<!--END_"VC2"-->
</ul>
</li>
<!--END_"VC1"-->
</ul>
Например :
Цикл VC1 имеет два прохода. А цикл VC2 при значении VC1=0 имеет два прохода, при VC1=1 имеет три прохода. Т.е в общем виде схема такая
При VC1=0
Имеет количетсво элементов в VC2=2
При VC1=1
Имеем количество элементов VC2=3
Ес-но, вложений неограниченно. И VC1 и VC2 - это всего лишь названия циклов. Т.е. может быть и CICLE и MYDATA тут неважно. Понятно, что после работы шаблонизатора, вся конструкция должна быть заменена на соовтетвующий результат. Т.е. пример должен выглядеть следлующим образом ( переменные IVAR и JVAR всего лишь счётчики) :
PHP:
- Основной цикл - проход 1
-- Цикл вложеный уже 1
-- Цикл вложеный уже 2
- Основной цикл - проход 2
-- Цикл вложеный уже 1
-- Цикл вложеный уже 2
-- Цикл вложеный уже 3
Значит данные, что передаю Я выглядят следующим образом :
PHP:
$DATA["VC1"]["ELEMENTS"]=2;
$DATA["VC1"][0]["IVAR"]=1;
$DATA["VC1"][0]["VC2"]["ELEMENTS"]=2;
$DATA["VC1"][0]["VC2"][0]=1;
$DATA["VC1"][0]["VC2"][1]=2;
$DATA["VC1"][1]["IVAR"]=2;
$DATA["VC1"][1]["VC2"]["ELEMENTS"]=3;
$DATA["VC1"][1]["VC2"][0]=1;
$DATA["VC1"][1]["VC2"][1]=2;
$DATA["VC1"][1]["VC2"][2]=3;
PHP:
$my_string="[\"VC1\"][".$counter."][\"VC2\"][\"ELEMENTS\"]";
eval("\$elements=\$DATA".$my_string.";");
echo "Кол-во проходов для цикла VC2 на данный момент= ".$elements;
Может просто усталость говорит. Проблема в том, чтобы на основе данных сформировать итоговый HTML, который заменит в результате сабой шаблонные команды. Пока думаю так. В массив помещаются тела всех циклов. Когда рекурсия добежала до самого глубоко цикла, начинаем обрабатывать это тело на наличие переменных и их значение. А вот дальше как ? Просто заменить тело цикла на результат не вкатывает. Короче идеи пока подвисли. Может у кого есть какая мысля. Чиркните. Любая искорка поможет разгореться пламяни.