|
[ kazil @ 14.01.2008. 12:15 ] @
| napravio sam neki templating klasu. cilj je vise vezbanje oop-a nego da napravim neku klasu reda smartija. svestan sam da ima mali milion ovakvih klasa i da ce ih biti jos toliko. kod nije najbolji po performansama, ali za pocetak je ok.
koristio sam par puta smarti, ali mi se ucinio preglomaznim, istina, koristio sam ga za manje projekte, ali opet... cilj jednog template sistema je da razdvoji program i dizajn. ok, kod smartija ima .php i .tpl fajl. ali u tpl fajlu ima if-ova, foreach-ova i ostalih programerskih drangulija.
kod ovog, u tpl fajlove se smesta samo "{#" i "#}" koji oznacavaju pocetak i kraj mesta gde se ubacuje promenljiva. izmedju moze ici bilo sta, ne uzima se u obzir.
u php skriptu se naravno napravi nova instanca, u tpl_file_array se ubaci niz tpl fajlova koje zelimo da prikazemo. u vars_to_insert ubacimo niz promenljivih koje treba ubaciti u tpl fajl(ove).
promenljive ubacujem na sledeci nacin: u tpl fajlu nadjem prvi {# #} blok, pa ubacim u njega prvu promenljivu iz niza vars_to_insert, pa nadjem drugi {# #} blok, pa u njega drugu promenljivu iz niza i tako dalje. malo je gadno resenja al... e da. nigde u skriptu nema reg-exp-a.
aj primer, mozda nisam najvestiji na recima :D
Code:
index.php
<?php
require_once('yatc.php');
$y = new YATC();
$y->tpl_file_array=array('tpl/head.tpl','tpl/index.tpl');
$y->vars_to_insert = array("Pozdravna poruka","Robert","Basic",date('d.m.Y'));
$y->show();
?>
Code:
head.tpl:
<html><head><title>{# naslov #}</title></head>
index.tpl:
<body><p>Zdravo {# ime #} {# prezime #}.
Danas je {# datum #}, kako si danas?</p></body></html>
pokretanjem index.php se dobija:
Code:
<html><head><title>Pozdravna poruka</title></head><body><p>Zdravo Robert Basic.
Danas je 14.01.2008, kako si danas?</p></body></html>
Najvise racuna treba voditi da se broj mesta za promenljive i broj promenljivih slazu i da promenljive u niz ubacejmo onim redom kojim treba da se ispisuju.
Mislim da je bolje da se u php skriptu, recimo izvuku podaci iz baze, formatiraju se sa html-om, to sve stavi u jednu ili vise promenljivih i onda se ta promenljiva prosledi tpl fajlu, jer je lakse programeru da podatke ubaci u html tagove, nego da dizajner ili programer petljaju sa foreach-cudima u tpl fajlu. dizajner, recimo, u tpl fajlu, u komentaru napise kako je smislio da se ispisuju neki podaci, programer otvori tpl fajl i na osnovu tog komentara formatira podatke.
*bicu van grada 1 dan, tako da cu kasniti sa eventualnim odgovorima :) |
[ w3bl0rd @ 14.01.2008. 14:03 ] @
to je tako onda isto ko i ništa.. neko može reći onda da se varijable u html-u označavaju sa <?=$imevraijable?> i na istome si i puno brže je... tu nemaš ničega nutra kako ćeš riješavati loopove koji su neophodni?
[ kazil @ 15.01.2008. 13:51 ] @
loopove resim u php skriptu, resenje loopa smestim u promenljivu i to posaljem u tpl. znam da nije lepo resenje, al mislim da je do odredjene velicine jos sasvim dobro.
inace, ako se stavi loop u dizajn, kako je onda razdvojen programski deo i dizajn? razdvojen je samo delimicno. a po meni je to gore nego da uopste nije razdvojeno, jer onda imam recimo 2x loop. prvi put loop da ubacim vrednosti u niz, drugi put da iscitam iz niza. meni to neodgovara. sa mesanjem dizajna i programa imam jednom loop, kako vadim vrednost odma i stavljam na dobro mesto. sa ovim mojim 'resenjem' isto imam jedan loop, kada upisem u promenljivu, a u tpl samo ispisem vrednost promenljive... priznajem, nije bas najbolje resenje, mozda je totalna glupost, al meni je ovo palo na pamet, napravio sam kako god, i hteo sam da prikazem i da popricamo o ovome... but, nevermind (the bullocks)...
[ dakipro @ 15.01.2008. 14:29 ] @
Citat: kazil: inace, ako se stavi loop u dizajn, kako je onda razdvojen programski deo i dizajn?...
nije ideja odvojiti dizajn od koda (jer su veoma blisko vezani po definiciji php-a). Ideja je odvojiti upravljacku logiku od prezentacione. Ako sam dobro razumeo, ti ovim primerom ne koristis sve pogodnosti oop (primer za loop)? Jer onda se gubi na poenti ako prilikom svakog vadjenja iz baze crtas html kod koji ti u tom trenutku odgovara. Ti onda za listanje kategorija imas x funckija, gde je x broj razlicitih prikaza na stranici (kad u adminu listas kategorije u ul/li, kad u publicu listas u ul/li, kad listas kategorije za list-box, kad ih listas za select-box, kad ih listas kao Tag Cloud itd...) a sve to za jedne iste kategorije iz baze.Ili sam ja pogresno razumeo kad kazes "...kako vadim vrednost odma i stavljam na dobro mesto."?
A mnogo je lakse petlje praviti u dizajnu, iz nekoliko razloga (dizajnerskih recimo):
aktivna (trenutno prikazana) kategorija ima drugi stil ili id koji dizajner treba da napravi/promeni/renamuje (lakse mu je odmah na licu mesta da promeni, nego da juri po php kodu na kom ja radim nesto drugo)
elementi selectbox-a (checkboxa) imaju posebne stilove (isti razlog)
listanje slika (galerija) - dizajner moze da podesi stil slike direktno iz templejta (gde se i odvija prezentaciona logika), js programer moze da menja id-jeve slika iz templejta (id html elementa u templejtu nije vezan za php kod)
Sve ovo je veoma otezano, gotovo nemoguce (ili bar neracionalno) ako se radi iz php koda. mogu da zamislim reakciju dizajnera/html/js programera kad bi mu rekao u kom mu se .php fajlu na kojoj liniji "crta" jedan od 3 menija, lista nekih kategorija, breadcrumb i sta mu vec treba.
Tako da je, bar po meni i jos dosta ljudi sa kojima radim, upotreba 2 loopa itekako opravdana 
[ kazil @ 15.01.2008. 14:53 ] @
e sa ovakvim odgovorom vec mogu da zivim :) prihvatam tvoje argumente i slazem se. priznajem, nisam sagledao problem bas iz svih uglova, jelda? :) ocigledno je ovo bila dobra ideja do jednog trenutka (ovog :D). hmm... da nastavim da razvijam ovo imajuci u vidu ovo sto si rekao, najverovatnije bih zavrsio na nekom smarty-like sistemu, a kako takvih vec ima podosta, nije potreban jos jedan :D odo opet da smislim nesto super revolucionarno koje ce potrajati do neke nove teme na es-u :D
cheers! :)
p.s.: sorry for the time wasting :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|