Още в първите дни след като почнах да пиша PHP, преди 6-7 години, реших че е грозно да имаш разни <?php ?> из кода HTML кода ти и предпочитах там да са само променливите в този вид {$name}. Което се оказа доста полезен и правилен ход. Така намерих Smarty.
Напоследък(в последните 2 години) забелязвам че много хора решават да се отказват от Smarty и да ползват PHP като template engine(какъвто е бил първоначалния му замисъл). Но за мен просто с нормалните <?php ?> става твърде грозно и особено CSS/HTML дивелопърите (ако някой знае по-добро име за тях), не ги приемат за разлика от чистото {$name}.
Основните плюсове на Smarty са:
- За разлика от повечето PHP template engine-и Smarty “компилира” кода на темлеитите до нормален PHP код. Но това остава “скрито” от хората и може да се контролира от настройките чрез compile_check и force_compile
- Smarty си има вложене security sandbox.
- Вграден cаche модул.
- Великолепна plugin система. Като в нея има вложени function | modifiers | blocks | compilers и още …
- Много лесно се свиква със Smary и доста голяма част от CSS/HTML дивелопърите се “разбират” много добре с него.
- По-красиво е ползването на нормално php
Но това което наистина ми харесва е plugin системата която ти позволява да правиш това(е директно копирано от работещ проект):
{pagination separator="|" page=p}
<a href="{$p.url}" {if $p->isCurrent()} class="selected" {/if}>{$p.num}</a>
{/pagination}
{paginator} и мой плъгин, а {$p} e обект. Това би трябвало това написано на “чист” php ще е нещо такова(тъй като отдавна не съм писал директно PHP във view може и аз да бъркам някъде).
<?php foreach($pages as $p): ?> <a href="<?php echo $p['url']; ?>"<?php if ($p->isCurrent()) echo ' class="selected"'; ?>><?php echo $p['num'];</a> <?php endforeach; ?>
или
foreach($pages as $p){
echo '<a href="', $p['url'], '">';
if ($p->isCurrent()) echo ' class="selected"';
echo '>', $p['num'], '</a>';
}
– no comment –
п.п. Преди 1-2 седмици попаднах на това DWOO. Поне от първите ми опити това ми прилича на достойния наследник на Smarty.
