Mešanje PHPa i HTMLa, opet

Pre par dana sam pisao o ovoj temi i rekao da je mešanje PHPa i HTMLa veliki no-no. Sad povlačim tu izjavu... Postoji dosta slučajeva kada se za korišćenje template enginea može reći da su no-no. Kada ljudi počnu da uče PHP onda obično krenu sa tim da mešaju PHP i HTML na načine na koje to razumeju i koji im se tada čine logičnim. Često u tim slučajevima ni ne znaju kako se to pravilno radi. Jednostavno rade onako kako piše u tutorijalu / knjizi koju prate (a sami znamo kakav je njihov kvalitet, čast izuzecima). Sledeći, manje-više logičan korak je da počnu da koriste neki template engine i da u potpunosti zaborave mešanje PHPa i HTMLa i zagovaraju na svim forumima da se taj oblik rada što pre napusti i da je on odlika početnika.

Kroz tu školu sam prošao ja i par prijatelja za koje znam tako da otvoreno tvrdim da ima dosta ljudi koji ni dan danas ne znaju kako se pravilno meša PHP i HTML iako sada već imaju višegodišnje iskustvo u pisanju PHP skripti. Bukvalno su zavisnici od template enginea.

U zadnjih nedelju, dve dana sam video dosta primena gde se meša PHP i HTML (ili Ruby i HTML). Rails koristi takav pristup, kompajlirani Smarty templatei su u tom obliku, ja sam ga koristi za ispis detalja o izuzecima... Ono što je zanimljivo u svim ovim slučajevima je da se aplikacioni deo izvrši i nakon njega se automatski (ili na zahtev) prelazi u "prezentacioni sloj" koji je mešavina PHPa i HTMLa (ili Ruby + HTML). Znači nema klasičnog mešanja aplikacije i prezentacije koji je odlika početničkih primera, granica između njih je jasno povučena.

Template sistemi kao što je Smarty su dobar stvar i treba ih koristiti u svim projektima. Ali opet, treba imati meru. Ima slučajeva kada ga ne možete koristiti, a s druge strane guranje svih podataka kroz template engine je prosto preterivanje. Treba znati odmeriti i reći da li je korišćenje templatea u određenim slučajevima moguće i ne predstavlja višak, a ne polaziti sa stavom da je svaki oblik mešanja koda i HTML loš i da se za sve treba koristiti template.

Par saveta za kraj:

  • Pogledajte način na koji Smarty generiše template.
  • Bacite pogleda na output control funkcije.
  • <?= $var ?> je isto što i <?php echo $var ?>