Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Custom template engine

[es] :: PHP :: Smarty template engine :: Custom template engine

[ Pregleda: 6313 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Milos911
Serbia

Član broj: 219127
Poruke: 1230
*.telenor.co.yu.



+303 Profil

icon Custom template engine03.09.2009. u 14:38 - pre 177 meseci
Nasao sam na internetu ovajtemplate engine pa me zanima sta mislite da li bi mogao da mi posluzi za jedan manji projekat? Ne bih za sada da koristim komplikovane stvari kao sto je smarty(on ce doci na red kad pocnem da koristim oo) i ovaj mi se cini kao dobar izbor za pocetak? Sta vi mislite? Ako ovaj nije dobar mozete li da mi preporucite neki koji jeste, a nije mnogo komplikovan?
I ako budem koristio ovaj sistem, da li moze da mi zezne upotrebu nekih funkcija i slicnih stvari? Napr get i post,konekcija na bazu, include i slicno?
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: Custom template engine03.09.2009. u 19:22 - pre 177 meseci
Ja kol'ko vidim, to je neki tutorijal za pravljenje nekog svog template engine-a... A kad si već spomenuo Smarty, ne znam zašto ne bi probao sa njim. Smarty jeste OOP, al' opet ne vidim zašto bi ti to toliko smetalo, bez obzira što još uvek nisi ušao u te "vode".

Dovoljno je da Smarty instanciraš samo jednom, obično u nekom bootstrap skriptu, ovako:
Code:

$smarty = new Smarty();
$smarty->template_dir = 'putanja/do/templejtova/';
$smarty->compile_dir  = 'putanja/do/templates_c/';

I onda tu instancu možeš da koristiš kao globalnu promenljivu u skriptovima koji učitavaju taj tvoj bootstrap skript:
Code:

global $smarty;

//Neki kod...

$smarty->assign('foo', 'test');

//Neki kod...

//I na kraju:
$smarty->display('nekiTemplejt.tpl');

Još bolja varijanta je da imaš neku klasu koja implementira Registry pattern, pa da tako prenosiš promenljive. I to je to, ništa specijalno. Probaj...
 
Odgovor na temu

Milos911
Serbia

Član broj: 219127
Poruke: 1230
*.telenor.co.yu.



+303 Profil

icon Re: Custom template engine03.09.2009. u 19:31 - pre 177 meseci
Citao sam dosta o doticnom i svi kazu da je previse masivan i spor. A stvarno ne bih sad da se zatrpavam optimizacijom. Jos plus pokusavao sam par puta da naucim kako da ga koristim ali nigde nisam nasao neki dovoljno razumljiv tutorial. Evo naprimer u tvojoj poruci skoro nista nisam razumeo. Sve od
Citat:
Nikola Poša
Code:

$smarty->compile_dir  = 'putanja/do/templates_c/';

I onda tu instancu možeš da koristiš kao globalnu promenljivu u skriptovima koji učitavaju taj tvoj bootstrap skript:
Code:

global $smarty;

//Neki kod...

$smarty->assign('foo', 'test');

//Neki kod...

//I na kraju:
$smarty->display('nekiTemplejt.tpl');

Još bolja varijanta je da imaš neku klasu koja implementira Registry pattern, pa da tako prenosiš promenljive. I to je to, ništa specijalno. Probaj...

Ipak ako mislis da mi je to najbolja opcija pokusacu da ga ucim?
 
Odgovor na temu

Skaarj
Novi Sad

Član broj: 21463
Poruke: 365
77.46.229.*



+3 Profil

icon Re: Custom template engine03.09.2009. u 19:46 - pre 177 meseci
Smarty moze da se koristi za sve nivoe kompleksnosti projekata. Lak je za ucenje i za rad, ne znam zasto bi se bavio nekim custom resenjima.
 
Odgovor na temu

ColdKeyboard
Sasa Karanovic
Hardware and Firmware Engineer
Toronto, Canada

Član broj: 31924
Poruke: 868
*.dynamic.sbb.rs.

Jabber: ColdKeyboard
Sajt: www.SasaKaranovic.com


+11 Profil

icon Re: Custom template engine03.09.2009. u 19:50 - pre 177 meseci
Sigurno ti je najlakse da koristis Smarty, ako nista mnogo lakse nego da ti pises svoj template engine.

A ako ti ne trebaju neke naprednije funkcije od smarty-a, googlaj za Smarty Lite, on je dosta 'laksi' ali su zato izbacene neke naprednije funkcije.


A smarty ti je vrlo jednostavan, recimo hoces da ispises neku promjenjiljivu $var u svom html-u

Code:
include('libs/Smarty.class.php');

$smarty = new Smarty;

// Ovdje neki kod koji ce nesto raditi sa tim tvojim $var

$smarty->assign('mojapromjenjljiva', $var); // sada u index.html kada stavis {$mojapromjenjljiva} on ce zamjeniti sa $var

$smarty->display('index.html'); // prikazuje tvoj HTML fajl koji treba da obradi template engine


A u index.html ubacis bilo gdje
{$mojapromjenjljiva} i on ce je zamjeniti sa vrednoscu $var iz php fajla


Vrlo je jednostavno a i na stranici od smarty-a imas nekoliko primjera koje bi trebao pogledati.

 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: Custom template engine03.09.2009. u 20:52 - pre 177 meseci
Citat:
Milos911: Jos plus pokusavao sam par puta da naucim kako da ga koristim ali nigde nisam nasao neki dovoljno razumljiv tutorial. Evo naprimer u tvojoj poruci skoro nista nisam razumeo.

Aha, ok, ja sam mislio da si ti imao iskustva sa nekim template engine-om, pa se samo dvoumiš dal' da ideš sa Smarty-jem. Možda sam te najpre zbunio sa ovim pojmom bootstrap fajl? Boostrap bi bio neki zajednički skript za tvoje ostale skriptove u aplikaciji. Pritom nemoj ovaj bootstrap o kome sad pričam nije isto što i boostrap u nekom framework-u, npr. ZF-u, itd. On predstavlja ulaznu tačku pri svakom zahtevu u tvojoj aplikaciji. Recimo, imaš stranice index.php, foo.php, bar.php, i svaka od njih će učitavati taj tvoj boostrap fajl. U njemu se obično nalaze sledeće stvari: definisanje osnovnih putanja, set-ovanje include path-a i eventualtno inicijalizacija nekih komponenti koje se koriste u većini stranica. Jedna od tih komponenti bi bila upravo Smarty. Da ne bi u svakoj tvom skriptu morao da instanciraš Smarty, ti to samo jednom uradiš u bootstrap-u, nešto onako kako sam i napisao, i posle tu promenljivu $smarty (ili kako god da je ti nazoveš) možeš da koristiš u tvojim skriptovima (index.php, foo.php, bar.php).

A sad šta je ideja Smarty-ja i uopšte template engine... Grubo gledano, cilj je da nigde u svojim skriptovima nemaš echo, odnosno da PHP koristiš za onu pravu, business logiku, a da se za ispis brine neko drugi. A taj "neko drugi" su template-i. Svaki tvoj skript (stranica) bi trebao da ima odgovarajući templejt. U templejtu bi trebao da se nalazi samo (x)HTML kod, sa naravno ispisom promenljiva koje dolaze iz PHP-a na određenim mestima. Evo jedan primer celog postupka:

index.php
Code:

include_once('putanja/do/bootstrap.php'); //Ucitavanje bootstrap-a
    
global $smarty; //Instanca Smarty-ja.

//Ovde sad recimo dohvataš nešto iz baze...
$podaci = $nekiModel->dohvatiNekePodatke();

//I na kraju rezultat "daš" Smarty-ju:
$smarty->assign('podaci', $podaci);

$smarty->display('index.tpl');

I to je kraj PHP koda. Ova poslednja linija koda prikazuje templejt, i u nju možeš da shvatiš kao izlazak iz PHP i ulazak u display logiku, odnosno u ovo što sledi:

index.tpl
Code:

<html>
    <body>
         {foreach from=$podaci item=podatak}
             {$podatak.ime} {$podatak.prezime} <br />
         {/foreach} 
    </body>
</html>

Ovaj templejt radi jedan običan ispis tih podataka iz baze u petlji. Jednostavno, umesto da si to isto uradio u index.php, ti razdvajaš te dve stvari (logiku i prikaz), i taj ispis radiš na drugom mestu, u templejt skriptu. E sad, taj Smarty-jev pseudo kod (mislim na sve to unutar vitičastih zagrada) je nešto na šta ćeš morati da se navikneš, ali lako se uči. Uglavnom, bitno je da shvatiš da kad si angažovao (assign() metod) neku promenljivu Smarty-ju, ona je dostupna u templejtu koji prikazuješ (display() metod), u ovom slučaju to je ta promenljiva $podaci. Naravno, tvoji templejt fajlovi nikad ne bi trebalo da izgledaju tako, sa sve <html> i <body> tag-ovima, već bi sve što je zajedničko i što se ponavlja trebao da rasporediš u recimo header.tpl i footer.tpl, a onda bi njih samo učitavao u templejte svake stranice: index.tpl, foo.tpl, bar.tpl, a u tim templejtima bi bio samo onaj sadržaj karakterisitčan za te stranice (index.php, foo.php, bar.php). U ovom primeru, taj index.tpl bi izgledao ovako:
Code:

{include file = "putanja/do/header.tpl"}

         {foreach from=$podaci item=podatak}
             {$podatak.ime} {$podatak.prezime} <br />
         {/foreach} 

{include file = "putanja/do/footer.tpl"}

Eto, nadam se da te nisam zbunio svim ovim, al' bitno je da za početak shvatiš ideju cele te priče o template engine-ima i uopšte razdvajanju slojeva, razdvajanju business od prezentacione logike, i onda ćeš videti koliko je to u stvari dobra i korisna stvar.
 
Odgovor na temu

Milos911
Serbia

Član broj: 219127
Poruke: 1230
*.telenor.co.yu.



+303 Profil

icon Re: Custom template engine05.09.2009. u 00:28 - pre 177 meseci
Citat:
A ako ti ne trebaju neke naprednije funkcije od smarty-a, googlaj za Smarty Lite, on je dosta 'laksi' ali su zato izbacene neke naprednije funkcije.

Guglao i nasao smarty lite ali da li je ne znam da li je to to jer pise da je kompatibilan sa smartijem pa mi je cudno. A i ako je to custom mod onda cu ipak koristiti ovaj "nomalni" smarty je ko zna da li se na onom redovno radi update...

Citat:
AMožda sam te najpre zbunio sa ovim pojmom bootstrap fajl?
Citat:
Da :)
.....
Razumeo i napravio :)
Code:

<?php

// put full path to Smarty.class.php
require('E:\smarty\libs\Smarty.class.php');
$smarty = new Smarty();

$smarty->template_dir = 'E:\Sajt\htdocs\moje_skripte\test\styles\templates\widgetlike';
$smarty->compile_dir = 'E:\smarty\templates_c';
$smarty->cache_dir = 'E:\smarty\cache';
$smarty->config_dir = 'E:\Sajt\htdocs\moje_skripte\test\styles\configs';


//ovo stavim na dno svake php strane ili posle poslednjeg echo
$smarty->display('index.tpl');

?>


Citat:
A sad šta je ideja Smarty-ja i uopšte template engine... Eto, nadam se da te nisam zbunio svim ovim, al' bitno je da za početak shvatiš ideju cele te priče o template engine-ima i uopšte razdvajanju slojeva, razdvajanju business od prezentacione logike, i onda ćeš videti koliko je to u stvari dobra i korisna stvar.

Ovo sam razumeo mnogo pre otvaranja teme :). Template engine koristim da ne bih mesao html sa php-om(zbog preglednosti koda), da bih olaksao posao onome ko programira html jer onda on nema potrebe da prolazi kroz php kod i razmislja sta je sta, kao sto ni ja ne moram kroz html i zbog jos par sitnica :)

Ostalo sve procitano i primljeno k' znanju :)
Hvala vam mnogo na trudu i objasnjenjim. Ali stvarno ne ono hvala reda-radi:)

Sad prvi problem:) Zasto mi css ne radi u html(tpl) fajlu? Ok, provalio sam da je verovatno zato sto u njemu koristimo {} pa dolazi u konflikt sa smartijevim pseudo kodom. Guglao sam i izguglao {literal}{/literal} ali ovo iz nekog razloga ne radi. Pokusao sam da stavim i oko inkludovanja css-a u html-u i oko {} u samom css-u. Ali nece. Menjao sam putanju css-a tako da krece od bootstrap fajla. Ni to nije pomoglo. Nasao sam i ono resenja da promenim smartijev delimiter(ne znam kako se cita) ali mi se to ne radi jer onda skoro nikad necu koristiti {}. Pa sam hteo da se konsultujem sa vama pre nego sto primenim ovaj sistem. Sta mislite da je najbolje?
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: Custom template engine05.09.2009. u 10:39 - pre 177 meseci
Ako embed-uješ JS ili CSS kod u neki .tpl fajl, onda je {literal} rešenje:
Code:
<style type = "text/css">
{literal}
.test {
    border: 1px solid;
}
{/literal}
</style>

Alternativa tome bi bila korišćenje {ldelim} i {rdelim} tag-ova, koji su zamena za te vitičaste zagrade, ovako:
Code:
<style type = "text/css">
.test {ldelim}
    border: 1px solid;
{rdelim}
</style>

Ja inače skoro uvek CSS i JS kodove učitavam (include-ujem) kao zaseban fajl, i tad ne treba da se koristi ništa od ovog gore pomenutog, iz prostog razloga što ta sintaksa include-ovanja ne stvara koliziju sa Smarty-jem (nema vitičastih zagrada ):
Code:
<link href = "putanja/do/style.css" rel="stylesheet" type="text/css" />

Možda tebi problem prave putanje? Ako ideš sa relativnim, onda se putanja gleda u odnosu na skript (recimo index.php) koji prikazuje (display()) taj templejt koji učitava CSS ili JS fajlove...
 
Odgovor na temu

Milos911
Serbia

Član broj: 219127
Poruke: 1230
*.telenor.co.yu.



+303 Profil

icon Re: Custom template engine07.09.2009. u 13:59 - pre 177 meseci
Citat:
Možda tebi problem prave putanje? Ako ideš sa relativnim, onda se putanja gleda u odnosu na skript (recimo index.php) koji prikazuje (display()) taj templejt koji učitava CSS ili JS fajlove...

Citat:
Menjao sam putanju css-a tako da krece od bootstrap fajla.

Menjao jedno 500x i svaki put pogresno pisao putanju :) Sredio sam i taj problem :) Hvala jos jednom.
 
Odgovor na temu

Milos911
Serbia

Član broj: 219127
Poruke: 1230
*.telenor.co.yu.



+303 Profil

icon Re: Custom template engine08.09.2009. u 01:39 - pre 177 meseci
Jos jedno pitanje i necu vas vise smarati :)
Izludeh pokusavajuci da prebacim sledeci while loop u smarty foreach
Code:
    $queryT = mysql_query("SELECT * FROM artist WHERE LEFT(artist, 1) ='$a'");
    if (!mysql_affected_rows()== 0)
        {
        //ispisujemo sve izvodjace sa izabranim imenom
        while ($arrayT = mysql_fetch_assoc($queryT))
            {
            $smarty->assign('artist',$arrayT);
            $mid    = $arrayT['0'];
            $artist = $arrayT['artist'];
            echo "<a href=\"album.php?mid=$mid\">$artist</a>"."<br/>";
            
            }
        };

Help :)
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Član broj: 31848
Poruke: 1792
91.148.85.*

Sajt: norway.dakipro.com


+190 Profil

icon Re: Custom template engine08.09.2009. u 07:45 - pre 177 meseci
napamet ovako nesto
Code:

$queryT = mysql_query("SELECT * FROM artist WHERE LEFT(artist, 1) ='$a'");
$arrayT = array();
if (mysql_affected_rows()>0){
           $arrayT = mysql_fetch_assoc($queryT));
}
$smarty->assign('artists',$arrayT);

template
Code:

{foreach from=$artists item=artist}
    <a href="{$artist.0}">{$artist.artist}</a>
{/foreach}

ili mozda je if gore nepotreban, details...
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-3.sezampro.yu.



+33 Profil

icon Re: Custom template engine08.09.2009. u 10:13 - pre 177 meseci
Ja samo mislim da bi taj deo u PHP-u (umesto tog if-a) trebao da ide ovako:
Code:
while($row = mysql_fetch_assoc($queryT)) {
   $arrayT[] = $row;
}

... pošto je ideja da se dohvate svi redovi, a ne samo jedan...

I onda ide taj foreach koji je Dalibor predložio...
 
Odgovor na temu

[es] :: PHP :: Smarty template engine :: Custom template engine

[ Pregleda: 6313 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.