Лесен и удобен PHP template engine
27-04-2010
Здравейте туристи, бях помолен във форума да пусна урок за темплейт енджина, който използвам. Има го публикуван в блога ми, но за да не правя реклама ще публикувам урок специално за wt тук. Първо искам да започна с това, че енджина е писан от jooorooo и той любезно ми го предостави и разреши да го публикувам като урок. И така. Първо си сваляте самият темплейт енджин от тук :

http://pastebin.com/taX0GT2n

И така. Каква е процедурата след като си го include() в страницата. Правим си инстанция на класа template като за аргумент подаваме папката, в която ще ни стоят *.tpl файловете. Пример :

$tpl = new template("tpl");
// В случай, че папката ни е "tpl"

Продължаваме със указание как се казва всеки темплейт файл за всяка страница. Обикновено аз го слагам в самия config.php файл на сайта.

$tpl->tpl_file(array(
"index" => "index.tpl",
"news" => "news.tpl",
"users" => "users.tpl
));
В тоя случай казваме, че за страница "index" ще се използва tpl файл "index.tpl" итн. ВНИМАНИЕ : TPL файловете не могат да съдържат в себе си никакъв PHP код. И така. От тук нататък на класът $tpl можем да използваме два метода: a_var и a_block, които съответно са за единични променливи и за блокове. За аргумент се подава масив. Да обясним първо за единичните променливи. Да речем, че след заявка имаме променливи $user, $email, $city, които съдържат потребителско име, мейл и месторождение.

$tpl->a_var(array(
"USER" => $user,
"EMAIL" => $email,
"CITY" => $city
));

След това във .tpl файла имаме :

Ти си {USER}, роден си в {CITY} и твоят е-mail е {EMAIL}

В a_var разбира се можете да подавате масиви с каквито си искате ключове и стойности. Само после използвате същите ключове, за да изведете данните в tpl файла. Как процедираме с блоковите променливи. Блокова променлива е когато имаме стойности създадени от цикъл. Да речем имаме fetch_array на много потребители с техните градове и мейл адреси.

while($row = mysql_fetch_array($query)) {
$tpl->a_block("users", array(
"USER" => $row['user'],
"CITY" => $row['city'],
"EMAIL" => $row['email']
));
}

Както виждате имаме два аргумента на a_block. Първото е името на блока, а второто е масива с променливите. Във tpl файла трябва да имаме :

<!-- BEGIN users -->
Ти си {users.USER}, роден си в {users.CITY} и твоят e-mail е {users.EMAIL] <br />
<!-- END users -->

Коментарите с BEGIN и END указват къде започва и къде свършва блока. Когато имаме блок, променливите в него трябва да започват с името на блока, следва точка и тогава името на променливата. Ако блокът Ви се казва "block", а променливата "VAR", в tpl файла изваждаме {block.VAR}.
Ако искаме да имаме блок във друг блок, създаваме блока по следния начин :

$tpl->a_block("blockEdno.blockDve", array(
"VAR" => $var,
"FOO" => $foo,
"BAR" => $bar
));

А във tpl, изваждаме вътрешният блок така :

<!-- BEGIN blockDve -->
{blockEdno.blockDve.Var}, {blockEdno.blockDve.FOO} итн .. :)
<!-- END blockDve -->

Ето пример, ако искате в tpl файла да изведете едно под друго числата от едно до сто ... Просто пример, за да разберете по-добре идеята на блоковете.

$i = 1;
while($i <= 100) {
$tpl -> a_block("numbers", array("NUM" => $i));
$i++;
}

Във .tpl имаме

<!-- BEGIN numbers -->
{numbers.NUM} <br />
<!-- END numbers -->


И така извеждаме числата от 1 до 100 едно под друго :)

Има още няколко трика, които можете да откриете сами при използването. Изключително удобно е и за мен (повтарям - за мен) е много по-удачен избор от тежките SMARTY-та и така нататък. Надявам се да съм обяснил добре, ако не съм ще съдействам на тези, които искат да го използват по тук, на лс, теми във форума или дори скайп.

Повтарям. Самият енджин е дело на jooorooo.




/ Трябва да сте регистриран за да напишете коментар /
От: cLiford
14:10 30-04-2010
Понеже не смогнах какво е енджин темплатес може ли демо да го видя :) ?
От: PHPclown
12:36 22-05-2010
Това разделя чистият HTML от PHP за да не става каша и за да е МНОГО по-лесно на този след теб да променя или добавя код.

Перфектна работа на jooorooo и браво на idevbg за доброто обяснение.
От: Karcho
2:39 30-08-2010
Перфектно.
От: flesheater
2:55 04-10-2010
значи я някой който вече е благодарил да обясни ...
създаваш index.php файл в който примерно има този код:

include('../templ.php');
$tpl = new template("tpl");
$tpl->tpl_file(array(
"index" => "index.tpl"
));
$user = 'Petyr';
$tpl->a_var(array(
"USER" => $user
));

като във файла templ.php е кода от линка и в папка tpl/ във темплейта index.tpl пишем примерно {USER} и трябва да се покаже петър когато отворя страницата index.php ? това ли е идеята или аз нещо не съм разбрал ?
От: hellkiller
12:16 19-10-2010
Нещо не се получава - пробвам примерите от обяснението ама не се появява нищо като отворя страницата.
От: streleca_stz
14:03 30-12-2011
За да ви проработи трябва да добавите накрая $tpl->prase('Името на файла, които искате да покажете'); :)
От: streleca_stz
14:03 30-12-2011
Опа, не prase, a parse!
1