DevProTalk

Forumi IT profesionalaca
web development, web design, e-business, SEO


Idite nazad   DevProTalk > Web development i web aplikacije > PHP
Želite da se reklamirate ekskluzivno na ovoj poziciji? Javite se

PHP PHP aplikacije, Smarty, PEAR

Odgovori
 
Alati teme Način prikaza
Staro 10. 04. 2007.   #1
krcko
A suicide bomber!
Certified
 
Avatar krcko
 
Datum učlanjenja: 05.08.2005
Lokacija: Beograd
Poruke: 63
Hvala: 1
2 "Hvala" u 2 poruka
krcko is on a distinguished road
Pošaljite poruku preko MSN za krcko Pošaljite poruku preko Skype™ za krcko
Default CMS w/ Smarty, problem...

pozdrav ljudi,

napravio sam veliku gresku, uzeo sam za maturski da radim sajt moje skole i to u obliku cms-a (da bi njima, jelte bilo lakse da menjaju sadrzaj). sad kada sam video koliko tu stvarno ima posla vidim da sam se opako zeznuo, al sta mogu, moram da uradim do kraja...

na samom pocetku sam naisao na problem, evo sta me muci:

imam tabelu TBL_PAGES gde mi se nalaze sve stranice, izmedju ostalih polja, u toj tabeli se nalaze i polja 'template' i 'content'.
'template' sadrzi naziv smarty sablona, a u 'content' se nalazi sadrzaj stranice koji moze (i uglavnom ce to biti slucaj) da sadrzi smarty kod. e sad, meni nije problem da taj sadrzaj provucem kroz smarty i jednostavno uradim assign('content', $result) i to trenutno radim, ovako:
Kôd:
$this->_compile_source('content' . $page['id'], $page['content'], $compiled);

ob_start();
$this->_eval('?>' . $compiled);
$result = ob_get_contents();
ob_end_clean();

$this->assign('content', $result);
ali problem sa ovim (kod sam preuzeo iz {eval} funkcije) je sto se $page['content'] kompajlira svaki put (iako se vrednost 'content' polja nije promenila)...

da li postoji mogucnost (i kako?) da se kompajlirani $page['content'] ubaci u kompajliranu verziju sablona stranice?

e sad, ja mislim da bi tu bilo problema, jer ce vecina stranica koristiti jedan isti template a sve ce imati razlicit sadrzaj, ne znam da li moze nekako da se za svaki $smarty->display() napravi poseban kompajlirani fajl (iako ce biti vise poziva sa istim templateom, al razlicitim sadrzajem)


sta mi je ciniti?
__________________
jQuery addict!
krcko je offline   Odgovorite uz citat
Staro 10. 04. 2007.   #2
krcko
A suicide bomber!
Certified
 
Avatar krcko
 
Datum učlanjenja: 05.08.2005
Lokacija: Beograd
Poruke: 63
Hvala: 1
2 "Hvala" u 2 poruka
krcko is on a distinguished road
Pošaljite poruku preko MSN za krcko Pošaljite poruku preko Skype™ za krcko
Default

evo sad sam malo procesljao smarty manual i upoznao se sa resource-ima

resio sam problem na sledeci nacin:
- prilikom kreiranja novog Page objekta (koji mi extenduje Smarty) registrujem novi resource 'content:'
- kada treba da prikazem stranu procitam njen 'content' i stavim ga u promenljivu ($this->content)
- pozovem display('content:' . $page['id'])
- a iz content_source funckije kao source vratim $this->content

problem mi je ovaj timestamp... sta da radim sa njim?
da li da dodam 'lastchanged' polje u tabelu ili mi to nije potrebno? (mislim da ovaj timestamp ima veze sa kesiranjem, a mozda i sa kompajliranjem, nisam bash siguran a mrzi me da nocas kopam po smartijevom kodu...)
__________________
jQuery addict!
krcko je offline   Odgovorite uz citat
Staro 10. 04. 2007.   #3
Mr.Paja
profesionalac
Professional
 
Avatar Mr.Paja
 
Datum učlanjenja: 22.06.2005
Poruke: 279
Hvala: 14
30 "Hvala" u 19 poruka
Mr.Paja is on a distinguished road
Default

Glupo pitanje, zar ti nije lakše da uzmeš neki postojeći open source CMS, mislim ukoliko ti nije zadatak da baš ti kreiras CMS. Pregled CMS-ova sa on-line demo-ima možeš naći ovde

p.s. Naravno ovo je predlog ako ti treba brzo rešenje, za tvoje dobro je da prođeš step-by-step kreiranje CMS-a, mnogo više ćeš naučiti ....
Mr.Paja je offline   Odgovorite uz citat
Staro 10. 04. 2007.   #4
ivanhoe
Ivan Dilber
Sir Write-a-Lot
 
Avatar ivanhoe
 
Datum učlanjenja: 18.10.2005
Lokacija: Bgd
Poruke: 5.320
Hvala: 104
2.344 "Hvala" u 583 poruka
ivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svima
Pošaljite poruku preko Skype™ za ivanhoe
Default

smarty ima ugradjeno keshiranje outputa, to ti resava problem za strane koje imaju manje vise statican sadrzaj
__________________
Leadership is the art of getting people to want to do what you know must be done.
ivanhoe je offline   Odgovorite uz citat
Staro 10. 04. 2007.   #5
bluesman
Goran Pilipović
Sir Write-a-Lot
 
Avatar bluesman
 
Datum učlanjenja: 18.05.2005
Lokacija: Beograd
Poruke: 5.450
Hvala: 288
1.247 "Hvala" u 446 poruka
bluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušati
Pošaljite ICQ poruku za bluesman
Default

Citat:
Originalno napisao krcko
evo sad sam malo procesljao smarty manual i upoznao se sa resource-ima

resio sam problem na sledeci nacin:
- prilikom kreiranja novog Page objekta (koji mi extenduje Smarty) registrujem novi resource 'content:'
- kada treba da prikazem stranu procitam njen 'content' i stavim ga u promenljivu ($this->content)
- pozovem display('content:' . $page['id'])
- a iz content_source funckije kao source vratim $this->content

problem mi je ovaj timestamp... sta da radim sa njim?
da li da dodam 'lastchanged' polje u tabelu ili mi to nije potrebno? (mislim da ovaj timestamp ima veze sa kesiranjem, a mozda i sa kompajliranjem, nisam bash siguran a mrzi me da nocas kopam po smartijevom kodu...)
Timestamp je obicno timestamp polje koje oznacava kada je promenjen template. Na osnovu toga smarty provaljuje da li treba ponovo da ga kompajlira ili ne.

Kod "default" sistema sa fajlovima, ako je ukljuceno $smarty->compile_check on za svaki include-ova template proverava datum i vreme poslednje izmene fajla, ako je novije od kompajliranog template - on ga kompajlira ponovo.

Kada koristis DB redources, on ne moze da provali datum izmene fajla, zato ti je potreban timestamp. Sve sto ti treba da uradis je da kad god izmenis sadrzaj template (uradis UPDATE u bazi) - da promenis i taj timestamp na UNIX_TIMESTAMP() ili NOW(). To je ako si definisao polje kao unisgned int, ali ako si definisao polje kao TIMESTAMP (procitaj mysql manual) onda je to sve automatski.

Znaci da bi koristio database kao resource moras da napravis 4 funkcije:

PHP kôd:
function get_template ($tpl_name, &$tpl_source, &$tpl_timestamp)
{
    
$tpl_source "ovde citas iz baze sadrzaj recorda kome je tpl_name = $tpl_name, kako god hoces.... mozes i iz nekog custom CMS, joomla, whatever";

    return 
true;
}

function 
get_timestamp ($tpl_name, &$tpl_timestamp, &$smarty_obj)
{
    
$tpl_timestamp "ovde vracas samo timestamp recorda odozgo";

    return 
true;
}

function 
get_secure ($tpl_name, &$smarty_obj)
{
// all templates are secure
    
return true;
}

function 
get_trusted ($tpl_name, &$smarty_obj)
{
// this is actually not used in template
    
return true;

To generalno znaci da u tim funkcijama mozes da ubacis bilo koje funkcije bilo kog CMS-a koji ce da ti cita templates iz tvoje tabele u "izvornom" obliku

onda pozove:
PHP kôd:
$smarty->register_resource('db'
    array (
        
'get_template',
        
'get_timestamp',
        
'get_secure',
        
'get_trusted'
        
)
    ); 
i ucitas template sa

PHP kôd:
$smarty->display ('db:template_name'$cache_id); 
I smarty sam odradi compile, cache... sta god....

To isto znaci da istovremeno mozes da imas oba sistema, pa recimo cuvas header i footer u odvojenim fajlovima na disku:

PHP kôd:
$smarty->display ('header.tpl');
 
$smarty->display ('db:sadrzaj.tpl');
$smarty->display ('footer.tpl'); 
I generisace ti celu stranu kako treba, header i footer je procitao sa diska, a 'sadrzaj.tpl' iz baze.

Poslednja izmena od bluesman : 10. 04. 2007. u 14:35.
bluesman je offline   Odgovorite uz citat
Staro 10. 04. 2007.   #6
krcko
A suicide bomber!
Certified
 
Avatar krcko
 
Datum učlanjenja: 05.08.2005
Lokacija: Beograd
Poruke: 63
Hvala: 1
2 "Hvala" u 2 poruka
krcko is on a distinguished road
Pošaljite poruku preko MSN za krcko Pošaljite poruku preko Skype™ za krcko
Default

@Mr.Paja:
pa mogao sam i da uzmem neki open source cms (cms made simple npr) jer me je profesor samo bledo pogledao kada sam rekao da cu da radim cms u php-u (stvarno je sramota ko sve predaje informatiku kod nas, ali to je za drugu temu...) i znam da niko zivi nece da gleda kod koji sam uradio (sem eventualno grupe djaka koje bih ja okupio da rade na odrzavanju sajta kad ja odem iz skole). ali (kao sto si rekao) za "moje dobro" je bolje da sam uradim cms (ne treba mi neki ultra-mega-giga cms sa tonom modula, vec najjednostavniji moguci)...

@ivanhoe:
znam za keshiranje ali sam hteo i da mi cuva kompajlirani kod (sto bi, po mom misljenju, trebalo da jos malo ubrza prikaz strane)

@bluesman:
hvala na odgovoru, mada sam to sam skontao danas kada sam pogledao malo bolje o cemu se radi (sinoc oko 4 am me bash mrzelo da kopam po smartiju ), i logicno je da se timestamp za to koristi mada meni to nocas nije bilo tako logicno (bio sam pospan, rekoh vec ) tj mislio sam da to ima veze sa kesiranjem...


hvala svima na odgovorima
__________________
jQuery addict!
krcko je offline   Odgovorite uz citat
Odgovori


Alati teme
Način prikaza

Pravila pisanja
Možete ne započinjati nove teme
Možete ne slati odgovore
Možete ne slati priloge
Možete ne izmeniti svoje poruke
vB kôd je Uključen
Smajliji su Uključen
[IMG] kod je Uključen
HTML kôd je Isključen
Pogledajte forum

Slične teme
Tema Početna poruka teme Forum Odgovori Poslednja poruka
Smarty 3 bluesman PHP 26 01. 01. 2010. 21:03
smarty - assign_by_ref ivanhoe PHP 2 14. 10. 2009. 22:46
Problem smarty i poseban lang fajl sa latinicnim prevodom i nasim slovima? MojNalog Sva početnička pitanja 7 06. 06. 2008. 15:13
(Smarty) Problem - kategorije, forumi Kenny PHP 3 16. 01. 2007. 21:13
Smarty problem na OSX, browser otvara blank stranu mungos PHP 8 04. 07. 2005. 13:56


Vreme je GMT +2. Trenutno vreme je 15:06.


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.