Smarty, jak ładnie pisać
W moim pojęciu system szablonów (nasze przykłady skupią się na Smarty) sprawdza się do końca tylko wtedy gdy ich budowa jest banalnie prosta (np. nie ma zbyt wielu zagęszczonych warunków if). Dzięki temu zyskujemy dwie rzeczy - przejrzystość, jeśli coś zmieniamy to martwimy się o kod php głównie i tam dokonujemy większość poprawek. W innym przypadku trzeba byłoby się jeszcze zagłębiać w logikę systemu szablonów, co oznacza 2x więcej roboty. Kolejny plus to praca zespołowa, osoba, która tworzy html nie musi być programistą, więc po co ją straszyć jakimiś dziwnymi konstrukcjami.
Kolejna kwestia to dobranie odpowiedniej konstrukcji. Praktycznie każda działa, ale nie każda jest IDEALNA.
Chciałbym wyświetlić formularz o budowie:
nazwa sekcji
nazwa : pole do uzupełnienia
nazwa : pole do uzupełnienia
nazwa sekcji
nazwa : pole do uzupełnienia
Smarty rozwiązanie 1
<table>
{assign var='section' value=''}
{foreach from=$dataForms item=row}
{if $row.section ne $section}
{assign var='section' value=$row.section}
<tr>
<td colspan="2">{$row.section}</td>
</tr>
{/if}
<tr>
<td>{$row.name}</td>
<td><input type="text" name="data[]" /></td>
</tr>
{/foreach}
</table>
Smarty rozwiązanie 2
<table>
{foreach from=$dataForms item=row}
{if $row.section}
<tr>
<td colspan="2">{$row.section}</td>
</tr>
{else}
<tr>
<td>{$row.name}</td>
<td><input type="text" name="data[]" /></td>
</tr>
{/if}
{/foreach}
</table>
Smarty rozwiązanie 3
<table>
{foreach from=$sections item=row key=key}
<tr>
<td colspan="2">{$key}</td>
</tr>
{foreach from=$row item=row2}
<tr>
<td>{$row2.name}</td>
<td><input type="text" name="data[]" /></td>
</tr>
{/foreach}
{/foreach}
</table>
Każde z powyższych rozwiązań oczywiście wymaga przygotowania innej tablicy z danymi. Pierwsze jest ble bo muszę w systemie szablonów definiować nową zmienną - PORAŻKA. Drugie rozwiązanie bazuje na zasadzie dodatkowych pojedynczych wpisów w tablicy, które zawierają tylko nazwę sekcji - PORAŻKA. Ostatnie rozwiązanie wydaje mi się najtrafniejsze. W PHP budujemy tablicę o kluczu złożonym z nazwy sekcji, a zawartość to tablica z danymi tej sekcji.
Słowa kluczowe: PHP, Szablony, czytelność, html, pętla, system szablonów, artykuł, blog

Komentarze i opinie
jeszcze da się przez {section} :P
To section to jakiś dziwny twór :P Nie wiem po co go w ogóle dodali ;)
@sf:
ja w sumie czesto z tego korzystam :P np. musze przejsc przez tablice ale nie wiem czy bedzie zawierac w ogole jakies elementy :P jesli nie bedzie zawierac to {sectionelse} :)
hm, ale jest {foreachelse} ;)
@sf: hmm, to juz wiem :D nie mozesz robic przeskokow co 5 :P podczas foreach ;)
To racja, bez if w takim przypadku się nie obejdzie. Tyle, że taka konstrukcja w systemie szablonów ani razu mi sie w życiu nie zdarzyła - skakać co ileś :P Wtedy tez nasuwa się pytanie po co te dane w ogóle przesyłać do systemu szablonów jeśli z nich nie korzystamy tylko skakamy. Poza tym przy kompilacji pewnie i tak dodaje takiego if. Stąd moje przekonanie, że to po prostu zbędny "fajerwerek" :)
jeszcze mozna zmienic np. za pomoca tego kolor wiersza co 2 na przemian :)
{section} w Smarty'm jest strasznie nieintuicyjne w użyciu ;] Znacznie bardziej podoba mi się pod tym względem OPT, tym bardziej że tablice które trzeba podesłać bardzo łatwo utworzyć.
Nowy komentarz