Инкрементиране - темплейт енджин

Karcho

Registered
Здравейте, започнах да си пиша темплейт енджин (почти съм готов), но.. как когато сложа в цикъл например дадената функция, да инкрементира (не бях достатъчно ясен, затова ето примерче):
for($i=0;$i<5;$i++) {
$tpl->set_var(array('asd' => $i));
}
тази функция set_var съм си я направил. Сега когато имам в template.tpl например {asd} то връща 4 защото дефакто на петото завъртане стойноста е 4, та въпроса ми е как да го направя примерно {asd} <br/> и да ми изведе от 1 до 4 едно под друго да речем?
 
Код:
$asd = array();
for($i=0;$i<5;$i++) { 
$asd[] = $i;
} 
$tpl->set_var(array('asd' => $asd));

Ако си разбрал идеята. Сега ще ти подава масив а не променлива.
 
То добре ми подава масив ама какво да правя с него? Как ще накарам в tpl файла да се инкрементира?
 
Щом си направил ключ от масив да изкарва стойноста му значи ще можеш и да направиш цикъл в темплейта.
 
просто като връща масив можеш да позлваш функцията join(), като зададеш за разделител <br />, тоест

Код:
join('<br />', $array)

Пробвай по следният начин
Код:
for($i=0;$i<5;$i++) {
$masiv[$i]=array();
$masiv[$i] = $i;
$tpl->set_var(array('asd' => join('<br />', $masiv[$i])));
}
 
Промяна дефакто може да се направи и в самата функцията(set_var()) и в самите данни, които получава(което в случая е дадено за пример).
 
@kulov целта ми е това да става в *tpl файла.
@relax15pyt, ами айде кажи как точно ще стане, защото пробвах какви ли не начини?
 
Начини много. Решения още повече.

Най лесно, трябва да сетнеш от къде започва блока и къде свършва.

примерно
Код:
@BEGIN asdf@ {asd} @END asdf@


а самото подаване го прави така

Код:
for($i=0; $i<10; $i++) {
$tpl->tpl_var('asdf', $i);
}

демек си добави 2-ри аргумент, за да предаваш и блокови стойности.

трябва да ти се образува масив от сорта

Код:
$temp['asdf'][] = 1;
$temp['asdf'][] = 2;
$temp['asdf'][] = 3;
...
$temp['asdf'][] = 9;

взимаш блоковата схема
Код:
@BEGIN asdf@ {asd} @END asdf@
и я завърташ толкова пъти колкото е размера на масива.
 
Много ти благодаря, нещата са ми доста по-ясни, но може ли да ми обясниш малко повече за блоковите схеми, защото аз мислех, например те да са нещо като foreach, там на BEGIN и END да слагам начало и край на foreach-a и после да ги eval-вам, но едва ли ще стане.
 
Много лова идея е да ползваш eval.

Разгледай ми уроците, има темплейт енгин който който е блоков.
 
Аз ги разгледах, но не мога да г оразбера точно, пък и някак завъртяно написано, затова те моля, тука за една минута да обясниш точно какво да прави блоковият елемент?
 
Не ви разбирам. Честно. Имате най-хубавия темплейт енджин: PHP. Защо трябва да ползвате други глупости, които карат всичко да работи в пъти по-бавно, имат мноого по-малко възможности и трябва да учиш друг синтаксис?
Ползвайте си PHP в темплейтите и да не ви бърка. То идеята е да разделиш логиката от визията, не да измисляш нов синтаксис за глупости.

http://web-tourist.net/login/login/view.php?st=3072
 
Ами на де, но пък и като си наумя нещо и докато не го направя не ми се спи Very Happy Изглежда, че jooorooo ме разбра най-добре, ще помоля той като дойде да драсне 1-2 мнения, или някой друг който го разбере.

edit: ето каква ми е идеята

асд {asd} <br/>

--------------
php файла:

for($i=0;$i<5;$i++) {
$tpl->set_var(array('asd' => $i));
}

и да изкара
asd 0
asd 1
asd 2 и т.н. едно под друго, мисля, че вече съм достатъчно ясен.
Както е в на jooorooo системата просто там много извъртяно и честно казано, не успях да разбера много.
 
Аз гледах по друг начин на нещата. Например да се прави проверка, ако е масив да се задава стойност от рода {asd:1,{MAX}}, като MAX да получава последния елемент на масива. Вече не те знам как извеждаш самата променлива, за това и казах, че може да се правят промени и по самата функция.
 
И какво да я направя? В момента ги ръгам в масив и след взимането на информацията от file_get_contents на темплейт файла замествам съответният ключ с нейната стойност.
 
Еми тази стойност я ръгаш в цикъл за изкарване на всички стойности. Нито знам как са ти съставени функциите, нито нищо. Аз лично не съм се занимавал да правя Template Engine, за това ти давам само идеи, както аз бих пробвал да го направя.
 
Не, с този цикъл няма да стане. Трябва да се направят блокове и да завъртам самите блокове с цикъла доколкото разбра от @jooorooo, но не мога да разбера точно как. За това го моля (отново или пак) като се яви да ми помогне с 1-2 мнения.
 
Имаш го, аз го направих донякъде, но е доста бъгаво затова, чакам още бат Жоро.
 

Back
Горе