DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   PHP (http://www.devprotalk.com/forumdisplay.php?f=9)
-   -   Monte Ohrt - is PHP template language? (http://www.devprotalk.com/showthread.php?t=9036)

bluesman 17. 08. 2010. 21:51

Monte Ohrt - is PHP template language?
 
Upravo sam dobio jedan mail od Monte Ohrt, čoveka koji je napravio Smarty, gde komentariše "večitu dilemu" da li je PHP template language. Pročitajte šta kaže, ja mogu samo da se složim:

Citat:

Over the years this argument about PHP being a template language always crops up. In the beginning, Rasmus wrote PHP touted as an HTML-embedded scripting language. So you can say it is a template language, only for the lack of a better alternative to mixing PHP with HTML. That is, unless you use something like Smarty to create that separation. That is exactly why Smarty was created, because PHP, as a template language, just plain sucks. It is however, an excellent development language, so use it that way! I was fighting this clear back in the late 1990's. Developers constantly scoffed "IT *IS* A TEMPLATE LANGUAGE!", but I simply couldn't come to those terms, and eventually Smarty was released.

Another pretty cool thing (since I have been writing the new website for Smarty 3), template inheritance just plain rocks. You'll never go back to including headers, footers, etc. We've been doing {include} style management in templates for years, because, well, that's how you do it in PHP, and that's what we knew. That is how you *have* to do it in PHP! Smarty already makes a separation from PHP, so it was pretty straight-forward to implement inheritance. Give it a try.

So, although PHP *can* be used for templating, IMHO it's not a desirable way to use it. Python is also a horrible "template language", which is why Django Templates and CheetahTemplates were written. Same concept.

Of course you all have already come to the same conclusions, being here and reading this, right? :)

Is PHP a template language? It is as much as a template language as a chainsaw is a bread knife.

ivanhoe 18. 08. 2010. 08:00

paaa, i jeste i nije... smarty i php (sa skracenom sintaxom) se zapravo jako malo razlikuju, da li pises {foreach ...} ili <? foreach(...): ?> ili recimo {$bla} ili <?=$bla?>. U par navrata sam pretvarao php u smarty templejte, i to moze relativno brzo i lako da se uradi, cak sa obicnim search and replace se zameni veliki deo koda...

Hocu da kazem nije to bas tako drasticna razlika, mada smarty sintaxa je svakako citljivija od "izvorne". Monte je u sustini je pretvorio php u kvazi basic (izbacio zagrade, dodao tacku umesto []) i ima dosta unapred gotovih f-ja koje su zgodne, ali ne bih bas nazvao to chainsaw vs. bread knife... ja koristim smarty godinama vec, ali nije bas da sam hteo da se ubijem kad sam morao da radim direktno u php-u, recimo za Wordpress teme kad radim..

bluesman 18. 08. 2010. 12:25

Mislim da nisi shvatio taj deo chainsaw vs bread knife koji se odnosi na to da je PHP (postao) daleko više od template language. To je odgovor onima koji tvrde da je PHP običan template lang i ništa više od toga. Ako je "bread knifre" jedan pravi template language kao što je Smarty, koji i ne pretenduje na više od toga (šta više, u smarty3 su po defaultu izbacili {php} tag) - PHP je chainsaw u odnosu na to.

ivanhoe 18. 08. 2010. 12:36

ok, ako je to pisac hteo da kaze, onda se slazem :)

ppavlovic 18. 08. 2010. 13:23

Ja sam od Smarty presao na PHP kao templejt jezik. Elem, blues, deder mi reci sta radis kad ti zatreba bilo kakvo racunanje u okviru templejta (posto je {php} tag izbacen) ?

bluesman 18. 08. 2010. 13:28

Na primer kakvo računanje? a + b * c? To sve možeš u smarty da uradiš. Ili treći koren iz cosinus arkus tanhgensa ? :)

sinisake 18. 08. 2010. 16:09

mada smarty sintaxa je svakako citljivija od "izvorne"

Meni nije. :D Ne znam kako je ljudima koji samo znaju html/css. Ne verujem ni da njima olaksava posao.

Aleksandar.Ilic 18. 08. 2010. 17:41

Vec 6-7 godina radim sa smarty-ijem (ako me pamcenje dobro sluzi) i svim html/css implementatorima sa kojima sam radio (a bilo ih je dosta) je bilo lakse da zapamte smarty sintaxu nego php. A cak i kad sam ja pravio templejtove a oni samo ubacivali html/css, daleko manje gresaka su pravili kad rade sa smarty templejtovima nego sa PHP
Ovo je moje licno iskustvo, i ne kazem da je sa svakim tako

dinke 18. 08. 2010. 23:53

Btw smarty ne treba da radi nikakvu app logiku tj. logiku koja nije vezana za templatove, pa cenim da to racunanje u smarty-u i nema previse smisla (iako je moguce stosta). :)

pecili 06. 09. 2010. 01:57

taj dasa definivno ima kliker. sa recimo
Kôd:

$comment[comment].comment|escape|ng_autolink|truncate:390
mozes iz text base izvuci sve kao recimo iz twitter timelinea.

ivanhoe 06. 09. 2010. 02:21

to ti bas nije sjajna ideja, mozes sa truncate lako da preseces html link na pola i da dobijes nevalidan html....

dee 06. 09. 2010. 11:33

Cini mi se da je cijela rasprava krivo postavljena (ne ova na devprotalk nego opcenito 'php - template jezik ili ne'). Jer, i c++ moze bit template jezik. Poanta je, kako mi se cini, u tome kako se shvaca svrha koristenja PHPa (ili bilo kojeg drugog jezika). Ako je svrha npr. aplikacija koja ima svoj skup funkcija, a rezultati kojih se u nekakvom prikazu posalju korisniku onda ne znam o kakvom template jeziku mozemo govorit?
Ako se pak server side logika koristi da bi se radila fadeIn-Out skripta slika na klijentu (vidio sam taj slucaj u praksi :D ) onda mozemo o PHPu govorit i kao client-side skriptnom jeziku.

U tom svjetlu, ostaje vidjet zasto PHP postoji i za sto je sve sposoban. Praksa nas uci da se, kao i svaki jezik, moze koristit i za manipulacije HTMLom. Medjutim, isto tako nas praksa uci da je svodjenje PHPa na to prije izraz nepoznavanja njegovih mogucnosti nego stvarni opis njegove svrhe.

Goran Rakić 09. 09. 2010. 22:28

Batalio sam Smarty pre nekoliko godina u korist PHP-a kao jezika za pisanje šablona, odnosno za pisanje skripta pogleda (engl. view script). Osnovna namera bila mi je da očistim kontroler (u MVC) od svog suvišnog koda. Kontroler upravlja prijemom zahteva i definiše različite callbackove koji spuste pozive u model aplikacije.

U kodu pogleda sada mogu da definišem sav PHP kod za lepljenje na callback-ove kontrolera i da slobodno koristim PHP za upravljanje izlazom i podacima iz kontrolera (bilo da odgovor na zahtev pravi HTML, CSS ili PDF). Ovim imam bolju razdvojenost slojeva aplikacije ali gubim mogućnost da "dizajner menja šablon". Ne znam da li iko pušta dizajnere da menjaju šablon, pitanje da li i HTML valjan umeju da pišu. Veb dizajner u timu pak razumeće i to malo PHP koda. Ako prihvatimo rad sa komponentama (za RIA) onda se slaganje forme prikaza obavlja u PHP kodu, a ovim to lepo stoji u skripti pogleda, gde i treba.

Smarty mi se u jednom trenutku učinio nepotreban bloat i ograničenje. Ipak i dalje bih preporučio programerima da ga koriste kada im odgovara. Ako govorimo isključivo o veb stranama, sintaksa šablona je lepša u Smarty-ju nego kada se piše u PHP-u. Ja bih se ipak odlučio za eksterni pretprocesor, ali ne znam kako bi se u nekim timovima drugi sa tim uklopili. Smarty ima dokumentovanu sintaksu, široko je poznat, i to je značajna prednost.


Nasleđivanje šablona je odličan pristup koji već neko vreme koristim. Okačio sam izvučen mali kodić iz veće biblioteke kao primer kako se to može ubaciti bez Smartyja.

Osobine:
1) Pogled se izvršava u imenskom prostoru metode render klase fw_ViewRenderer
2) Promenljive prenete kao niz se ubacuju u imenski prostor i tako su dostupne iz šablona. Iz pogleda moguće je pristupiti renderer objektu preko $this
4) Renderer dozvoljava šablonu da odredi šablon koji će da nasledi i definiše blokove koje se prenose nasleđenom šablonu. Blokovi se koriste kao izmenjivi delovi roditeljskog šablona, a mogu biti definisani sa begin..end ili mogu biti učitani preko spoljnog šablona (kao što smo radili sa include)
5) Pri izvršavanju pogleda izvršava se prvo šablon-dete, a potom rekurzivno svi roditeljski šabloni kojima se sada blokovi prenose uz šablonske promenljive (omogućeno prepisivanje)
6) Postoji pretprocesor koji ulepšava i validira sintaksu šablona, ali nije neophodan (ovde je čist PHP kod)
7) Preko male touple-like klase pogled može da definiše i skup HTTP zaglavlja. Pogled nije ograničen na HTML, mada sa nasleđivanjem u binarnim šablonima treba paziti sa proredima oko begin..end.

Pogledajte na: http://gitorious.org/grakic-sandbox/...r/trees/master

tmpl/_base.html je apstraktni šablon koji ima prazan blok central_page. U realnom primeru imali bismo header, footer, left_column,... Osnovna razlika u odnosu na include je da base šablon ne povlači ove delove, on samo definiše njihov raspored i okolni statički HTML kod. Tek šablon koji nasledi base će da odredi sadržaj ovih blokova.

Samo nasleđivanje u kontroleru uopšte ne vidimo, tamo se poziva tmpl/index.html a kako on dalje radi nas ne zanima. Index šablon će definisati sadržaj central_page bloka, a mogli smo i da na tom mestu povučemo include (preko set_block(filename, vars); ).

ivanhoe 09. 09. 2010. 23:14

Off Topic: moram da pitam, ako imas "poglede" i "sablone", sto onda nisi i callback preveo ? :)


Ja licno ne volim ovakav pristup. Nazigled je super kad se sve radi negde u pozadini, automatski i "nevidljivo", ali onda kad ti u ruke upadne takav projekat koji je neko drugi pisao, pa treba da pohvatas sta, gde, zasto, ko koga poziva, gde se sta nasledjuje... thanx, but no thanx

Goran Rakić 10. 09. 2010. 00:48

Ne znam šta je nevidljivo, sve piše u kodu.

Misliš li na nasleđivanje šablona? Meni je to toliko superiorno u odnosu na include da se nikada nazad ne bih vratio. Nasleđivanje ti omogućava da prirodno razmišljaš o šablonima, imaš stranicu za baštenske proizvode koja je kao proizvodi samo ima "..." što nije isto kao i stranica za baštenske proizvode se sastoji od zaglavlja, menija, leve kolone, podnožja, i ovoga između.

Jedino što sam naglasio kao "nevidljivo" jeste što u oba slučaja (bilo nasleđivanje, bilo include) ti imaš isti kod u kontroleru koji traži taj i taj šablon, a definicija kako on izgleda je u samom šablonu. To je standardan princip enkapsulacije, ne mislim da protiv toga imaš nešto protiv.

ivanhoe 10. 09. 2010. 03:12

ne mislim nuzno na tvoj kod, jer ga nisam bas pazljivo pogledao, nego generalno, na previse iskomplikovanu arhitekturu.. jedan od osnovnih prednosti MVC po meni je sto bi trebalo da je lakse naci kako da promenis peti link sa leva, bez da provedes 2 nedelje kopajuci po kodu..

nisam puno radio sa nasledjivanjem templejta, ali ono sto jesam (jedan veliki sajt pisan u kohani) bilo mi je jako konfuzno dok nisam naucio gde je sta, za sta su mi trebale nedelje... opet, mozda je to do tog koda, a ne do koncepta, kad budem malo vise radio sa tim (kad izadje novi Smarty recimo), mozda promenim misljenje

jablan 10. 09. 2010. 09:39

Citat:

Originalno napisao ivanhoe (Napišite 89077)
bilo mi je jako konfuzno dok nisam naucio gde je sta, za sta su mi trebale nedelje...

Pa kad pišeš kod, gledaš da tebi bude što zgodnije, a ne nekom drugom, zar ne? :) BTW, pretpostavljam da bi ti trebalo mnogo manje vremena da je taj prethodnik ostavio neku kratku dokumentaciju ili odvojio dan-dva da ti objasni arhitekturu...

Meni se template inheritance čini sasvim ok, logičan i ekonomičan koncept. Ali cenim da si u pravu da je debagiranje otežano, jer nikad nisi na prvi pogled siguran iz kog tačno fajla dolazi HTML koji vidiš na stranici, pa moraš da se "penješ" kroz hijerarhiju dok ga ne nađeš.

Na kraju krajeva, sve je mnogo bolje od kopi-pejsta.

LiquidBrain 10. 09. 2010. 11:36

Citat:

Originalno napisao jablan (Napišite 89080)
Na kraju krajeva, sve je mnogo bolje od kopi-pejsta.

Off Topic: Zato nema copy/paste na iPhone-u :P

ivanhoe 10. 09. 2010. 13:14

Citat:

Originalno napisao jablan (Napišite 89080)
Pa kad pišeš kod, gledaš da tebi bude što zgodnije, a ne nekom drugom, zar ne? :) BTW, pretpostavljam da bi ti trebalo mnogo manje vremena da je taj prethodnik ostavio neku kratku dokumentaciju ili odvojio dan-dva da ti objasni arhitekturu...

Meni se template inheritance čini sasvim ok, logičan i ekonomičan koncept. Ali cenim da si u pravu da je debagiranje otežano, jer nikad nisi na prvi pogled siguran iz kog tačno fajla dolazi HTML koji vidiš na stranici, pa moraš da se "penješ" kroz hijerarhiju dok ga ne nađeš.

Pomagao mi je on, nije to problem, nego upravo ovo sto navodis, tesko je naci deo koda koji ti treba jer moras da trazis po stablu nasledjivanja gde se generise taj komad. Covek je suvise fakultetski iseckao arhitekturu, sa milion klasa koje nasledjuju jedna drugu i dodaju po jednu-dve metode svaka, i onda kontroler ima 10-tak "predaka" u hijerahiji, templejti isto tako, masa stvari se radi "automatski", tako da kad pogledas krajnji fajl nemas pojma odakle se neki komad koda stvorio, i zasto tako radi. I sto je najgore on je imao i logiku automatskog nasledjivanja templejta po imenu i folderima, sto na prvi pogled deluje jako elegantno, ali onda iz konkretnog templejta koji si otvorio ne mozes nikako da vidis odakle on nasledjuje sadrzaj, nego moras da znas logiku po kojoj se templejti ulancavaju. Ova varijanta gde to explicitno pise u templejtu je svakako bolja.

Nebitno, verovatno se samo radi o mind-setupu, meni je logicnije da templejte posmatram kao stranu koja dalje ima boxove u sebi, nego obrnuto kao box koji ima wrappere oko sebe. Pretpostavljam da je to samo stvar navike.

Dragi Tata 10. 09. 2010. 15:02

Citat:

Originalno napisao bluesman (Napišite 87866)
a + b * c?

Off Topic:
Прави програмери то пишу овако:

Kôd:

(+ a (* b c))
(Мало зезам Филипа Милетића ако прати ову дискусију)



Vreme je GMT +2. Trenutno vreme je 14:20.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.