Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Smarty
Forum PHP.pl > Forum > PHP
Karenin
Zaczalem czytac o Smarty i sie zastanawiam czy to jest wogole potrzebne. Na pierwszy rzut oka to tylko komplikuje zycie. Po co mam sie meczyc z templatami jak moge dac zamiast <title>{title}</title> <title><? echo $title; ?></title> Czy to sie Wam przydaje? Zastanawiam sie nad jego uzywaniem. Przekonajcie mnie smile.gif
BzikOS
Co prawda nie używam Smarty, tylko własnego systemu szablonów, ale idea jest ta sama - oddzielenie kodu php od html, a co za tym idzie czytelność.

A co do "komplikowania sobie życia" - spróbuj zrobić coś większego bez szablonów smile.gif
HaRy
ja smarts'ow unzywam z wielkim powodzeniem ...

zaczalem zupelnie przypadkowo, gdyz potrzebowalwem systemu szablono, a mialem za malo czasu, by pisac swoj system ...

no i juz tak zostalem z nimi smile.gif

poklecam kazdemu, kto robi wieksze projekty, masowe ... bez szablonow wtedy ni rusz smile.gif
spenalzo
Robię teraz trochę skomplikowany sklep i wcale nie korzystam z szablonów - zamiast tego daję np.:
[php:1:97ae8a881b]<?php Pokaz_Kategorie(1); ?>[/php:1:97ae8a881b]
I działa bardzo ładnie. W wypadku gdy potrzebuję zmienić design czy skórkę podaję w funkcji odpowiednią zmienną zapisaną w sesji (dotyczącą aktualnej skóry), co potem przekłąda się na kolory itd. itp. Poza tym oparcie wyświetlania na funkcjach umożliwia większa modułowość strony - klient dostanie tylko to co kupił (docelowo ma mieć możliwość wyboru modułów jakie chce mieć), i nic poza tym.
Na razie nie widzę uzasadnionej potrzeby wykorzysyywania szablonów, więc ich nie stosuję.
BzikOS
Cytat
W wypadku gdy potrzebuję zmienić design czy skórkę podaję w funkcji odpowiednią zmienną zapisaną w sesji (dotyczącą aktualnej skóry), co potem przekłąda się na kolory itd. itp. Poza tym oparcie wyświetlania na funkcjach umożliwia większa modułowość strony - klient dostanie tylko to co kupił (docelowo ma mieć możliwość wyboru modułów jakie chce mieć), i nic poza tym.  
Na razie nie widzę uzasadnionej potrzeby wykorzysyywania szablonów, więc ich nie stosuję.

Uzasadniona potrzeba: praca zespołowa - ktoś pisze kod, ktoś inny robi grafę. W przypadku potrzeby zmiany grafiki na stonie, nie trzeba zaprzątać takimi pierdołami głowy programiście smile.gif
kurtz
Cytat
Zaczalem czytac o Smarty i sie zastanawiam czy to jest wogole potrzebne. Na pierwszy rzut oka to tylko komplikuje zycie. Po co mam sie meczyc z templatami jak moge dac zamiast <title>{title}</title> <title><? echo $title; ?></title> Czy to sie Wam przydaje? Zastanawiam sie nad jego uzywaniem. Przekonajcie mnie :)
1) rozdzielenei logiki od prezentacji - osobno mamy html osobno pliki html
2) przejrystosc kodu - nie ma mieszanimi echo forow i whili z pritami ;)
3) mozliwosc cachowania danych - czesciowego, calkowitego, warunkowego - aspekt wydajnosciowy
4) mozliwosc latwego wykorzystnia tych samych danych do zaprezentowania w roznej formie (np tylko 10 slow newsa i caly news)
5) analogicnzie w druga strone - mozliwosc wykrozystnaia tego samego podszablonu w innym miejscu
6) przenisienie warunkowosci i zachowan na poziom smarty - mozesz na poziomie tempaltow robic ify, while etc oraz wywolywac obiekty {$page->showNews(10)}
7) osobno mozna modyfikwoac jedna czesc osobno druga ;)
8) mozliwosc tworzenia swoistych modulow poprzez include_php i dolaczenie lub nie pewnej funkcjonalnosci do samego serwisu.


uf tyle. jak cos wymysle moze dopisze.
pozdrawiam
rzseattle
zwykłe szablony nie spelniaja moich żadnych podstawowych wymagan np. jezeli cala strona roznila sie tylko dwoma linijkami to trza bylo robic nowy *.tpl, tak samo bylo z petlami *.tpl zeby zaczac *.tpl dla petli i nastepny *.tpl aby zkonczyc (nie mylic z header body footer) - od tego wszystkiego az bolu glowy dostawalem.

No ale kiedy odkrylem SMARTY to mozna powiedziec WOW, tak mi sie spodobal ze az zmienilem juz skonczony projekt i nie zamiezam zaczynac nic innego bez szablonow. Mysle ze kazdy powinien sie przekonac o funkcjonalnosci np {section} {/section} . To wszystko daje mi przejzystosc i mozliwosc zmian w kazdej chwili bez zastanawiania sie nad tym - "po cholere ja kieddys uzylem tej zmiennej". W kazdym *.tpl mam "index" zmiennych do dyspozycji (skojazonych z szablonem ale niekoniecznie wykorzystywanych) i w oparciu o niego moge duzo zmienic w jednej chwili. To daje bardzo duza elastycznosc.

Tak wiec bardzo polecam.

A co do grafikow to hmm.. z doswiadczenia wiem ze jak taki zobaczy if-a to choroby dostaje, a jednak elastycznosc SMARTY-ego jest okupiona tym ze trza manuala znac co nie zawsze jest mile widziane wprzez graf.. moze ja mam tylko takiego pecha.
kurtz
Cytat
Czy to sie Wam przydaje? Zastanawiam sie nad jego uzywaniem. Przekonajcie mnie :)


z lekkim opiznieniem ale przypomnialem sopbie o dossc obszernym wytlumaczeniu "po co smarty" dostepnym w internecie.

http://smarty.php.net/whyuse.php

pozdrawiam
Bora
troche sobie poczttałem o smartach.
Sam korzystam z innego prostrzego systemu.
Przeglądałem stronke http://smarty.php.net i w ich linkach jakos nie znalazłem strony dobrej graficznie.
Wszystkie są bardzo podobne czy to jest przypadek??

podajcie jak znacie jakaś dobrze wykonaną stronke używającą smarty.
DeyV
No nie wiem, czy można powiedzieć, ze jest to stonka dobra graficznie, (w końcu nie wypada sie chwalić winksmiley.jpg ) ale proszę... www.japanserwis.pl
A tak na poważnie - SMARTY w żaden sposób nie ogranicza twórców. To tak jak by powiedzieć, że stony robione w php są prostrze niż te tylko w HTML... Absurd...
Puciek
W życiu nie używałem smarty (tylko raz jako test) i nie przydaj mi sie to tongue.gif
Bora
widocznie te linki byly akurat słabe.
Smarty są dobre ale wole skorzystać z sytstemu webcity prodstrzego.
Po małej modyfikacji może działąć chyba tyle samo co smarty smile.gif
DeyV
Jeśli bedziesz miał chwilę = poczytaj
:arrow: http://smarty.php.net/manual/en/what.is.smarty.php i
:arrow: http://smarty.php.net/whyuse.php

W tej chwili żaden inny system template nie oferuje tego poziomu...

_________________
Niby 800 to nie dużo, ale ...
kurtz
Cytat
W życiu nie używałem smarty (tylko raz jako test) i nie przydaj mi sie to :P
usunac ta wiadomosc?
kurtz
Cytat
Po małej modyfikacji może działąć chyba tyle samo co smarty :)
prosze podaj linka do tego webcity systemu. korzystam z smarty juz dosc dlugo i wydaje mi sie mylisz.


pozdrawiam
Bora
[php:1:b5a2c0f30a]<?php
<?
class template
{
var $unparsed = array(0 => "");
var $parsed = "";
var $blocks = array("default" => "");

function load($plik)
{
$this -> unparsed = @file($plik.".tpl");
}

function parse()
{
$this -> parsed = "";
$cnt = count($this -> unparsed);
for($i = 0; $i <= $cnt; $i++)
{
$tekst = $this -> unparsed[$i];
$found = array();
if(preg_match_all("#{(.+?)}#is", $tekst, $found))
{
foreach($found[0] as $block)
{
$block = str_replace("{", "", $block);
$block = str_replace("}", "", $block);
$tekst = str_replace("{".$block."}", $this -> blocks[$block], $tekst);
}
}
$this -> parsed .= $tekst;
}
}
}
?>
?>[/php:1:b5a2c0f30a]

chyba to też ten sam
http://forum.php.pl/viewtopic.php?t=2971&h...ht=pregmatchall


jednak mi osobiście sie bardziej podoba ten parser który znalazlem na forum:

[php:1:b5a2c0f30a]<?php
function parse1($file, $blocks = array()){
if(file_exists($file)){
$f = fopen($file, 'r');
$unparsed = fread($f, filesize($file));
fclose($f);
}
else{
die('Plik "'.$file.'" nie istnieje!');
}

if(preg_match_all('#{(.+?)}#is', $unparsed, $found)){
$parsed = $unparsed;
foreach($found[1] as $block){
$parsed = str_replace('{'.$block.'}', $blocks[$block], $parsed);
}
}

return $parsed;
}
?>[/php:1:b5a2c0f30a]

http://forum.php.pl/viewtopic.php?t=2658

Jest on szybszy od tego z webcity i od smartów.
Zresztą smarty są bardzo wolne.
Sam napisałem parser który potrafi zrobić includowanie obsługuje subsekcje i jest o wiele szybszy od smartów
mazy
całkowicie zgadzam się z przedmówcą ! smile.gif
ps. niech ktoś mi powie jak SMARTY ogramicza webmastera...
dragossani
Dla zainteresowanych: porównanie wydajności.

Przy skomplikowanych stronach i włączonym akceleratorze, Smarty jest bezkonkurencyjny jeśli chodzi o wydajność. Dodam, że w takich właśnie warunkach pracować będzie przyszły serwis php.pl.
Bora
ja porównywałem dokładnie smarty z tym na webcity i poprzedni przykład

szablon był taki (ze strony smartów)
Kod
<html>

<head>

<title>User Info</title>

</head>

<body>



User Information:<p>

  

Name: {$name}<br>

Address: {$address}<br>



</body>

</html>


jest to szablon z zródeł smartów.

W pętli 1000 wyniki były:
Smarty : 18.81292 sekund
Webcity : 9.10678 sekund
"Moje" : 8.51534 sekund
kwiateek
Bora ale gdzie masz takie sytuacje zblizone do Twojego testu. Wydaje mi sie ze test jest bez sensu.
Bora
we wszystkich 3 parserach odpaliłem ten sam szablon wiec można było porównywać
HaRy
hmm ... na smartach robilem www.poznajswiat.com.pl .... fotogaleria w www.chojnice.pl ... www.hary.rnet.pl ... i musze przyznac, ze nie mam juz problemu z webmasterem ... daje mu tylko szbloniki i nie przyjmuje sie juz niczym ... wszystko ma jasne i czytelne ... i to jest piekne w Smartach smile.gif
kurtz
Cytat
ja porównywałem dokładnie smarty z tym na webcity i poprzedni przykład
ok - po pierwsze siadz i pomysl czy do tego bedziesz uzywal szablonow - tzn do podstaweinia 2 ciagow znakow. jesli tak to proponuej [php:1:59d34fe012]strtr( array("name"=>"Ziutek", "address"=>"kozia wolka"), $plik );[/php:1:59d34fe012] zbenchamrkuj jak chcesz ;p

inaczej rzecz biorac - jesli potrzebujesz tylko zamienic fragment tekstu to po co uzywac zaawansowany system szablonow. smarty nie zostaly stworzone po to by podstawic 2 ciagi znakow ale by w latwy sposb radzic sobie z duzymi strukturami - odpuszczajc sobie nawet na moment kwestie wydajnosci: chyba nie sadzisz ze uwierze by twoj system mial te same mozliwosci.

Cytat
W pętli 1000 wyniki były:
Smarty : 18.81292 sekund
Webcity : 9.10678 sekund
"Moje" : 8.51534 sekund
i jak rozumiem jestes juz expertem od smarty i pamietales o wlaczeniu cacheowaniu, nie sprawdzaniu powtornie kompilacji... bla bla


w ogole sugeruje nie wypowaidac sie na temat smartow poki nie zrobilo sie wiekszego serwisu (tzn nie guestbook) i nie musialo sie jego 10 razy w ciagu miesiaca poprawiac. na podstawie pierwszego wrazenia mozna by np uznac ze prolog jest bez sensu, a algor 66 sluzy jedynie my jako zajmowcz czasu.


pozdrawiam
Bora
Skoro mnie krytykujesz w takim razie zoabcz to:

[php:1:01ca64839e]<?php
class template
{
var $file;
var $inc = array("default" => "");
var $blocks = array("default" => "");
var $moduls = array("default" => "");
function load($file){
$file = "templates/".$file.".tpl";
if(file_exists($file)){
$plik = fopen($file, 'r');
$unparsed = fread($plik, filesize($file));
fclose($plik);
}else{
die("brak pliku $file");
}
// wylapuje moduły
preg_match_all( "#[INCLUDE:(.+?)]#is", $unparsed, $include);
$unparsed = preg_replace("#[INCLUDE:(.+?)]#is","{INCLUDE:$1}", $unparsed);
$unparsed = str_replace("n", "|ent|", $unparsed);
preg_match_all( '/[MODUL.*](.+)[/MODUL.*]/Uise', $unparsed, $znalezione);
// zamienia moduły na ich odpowiedniki
$unparsed = preg_replace('/[MODUL:(.*?)](.*?)[/MODUL:(.*?)]/i','{MODUL:$1}', $unparsed);
$unparsed = str_replace("|ent|", "n", $unparsed);
$znalezione[0] = str_replace("|ent|", "n", $znalezione[0]);
$znalezione[1] = str_replace("|ent|", "n", $znalezione[1]);
$mod = array();
foreach ($znalezione[0] as $i_parser){
preg_match("/[MODUL:(.*?)]/i",$i_parser, $znal);
$pref = $znal[1];
$m = preg_replace('/[MODUL:(.*?)]/i','', $i_parser);
$m = preg_replace('/[/MODUL:(.*?)]/i','', $m);
$mod["$pref"]=$m;
}
foreach ($include[0] as $i_parser){
preg_match("/[INCLUDE:(.*?)]/i",$i_parser, $znal);
$in = preg_replace("#[INCLUDE:(.+?)]#is","$1", $i_parser);
$pref = $znal[1];
$prefix = $znal[1];
$pref = "templates/".$pref.".tpl";
if(file_exists($pref)){
$plik = fopen($pref, 'r');
$inc[$prefix] = fread($plik, filesize($pref));
fclose($plik);
}else{
die("brak pliku $file");
}
}
$this -> moduls = $znalezione[1];
$this -> mods = $mod;
$this -> unparsed = $unparsed;
$this -> inc = $inc;
return $this -> moduls;
return $this -> inc;
return $this -> mods;
return $this -> unparsed;
}
function parse($unparsed,$blocks = array()){
if(preg_match_all('#{(.+?)}#is', $unparsed, $found)){
$parsed = $unparsed;
foreach($found[1] as $block){
$parsed = str_replace('{'.$block.'}', $blocks[$block], $parsed);
}
}
return $parsed;
}
}
class modul
{
var $file;
var $mod;
var $blocks = array("default" => "");
var $moduls = array("default" => "");
function parse($unparsed,$blocks = array()){
if(preg_match_all('#{(.+?)}#is', $unparsed, $found)){
$parsed = $unparsed;
foreach($found[1] as $block){
$parsed = str_replace('{'.$block.'}', $blocks[$block], $parsed);
}
}
return $parsed;
}
}
?>[/php:1:01ca64839e]

szablon wygląda tak:

Kod
[INCLUDE:header]



<table align="center" width="60%" style="border:1px solid #000000">



<!--- [MODUL:z] gorna czesc-->

<tr>

<td class="forum1">{z:czas}</td>

<td class="forum1">{z:cos}</td>

<td class="forum2">{z:ile}

</td>

</tr>

<!--- [/MODUL:z] gorna czesc-->



<!--- [MODUL:ass] dolna czesc-->

<tr>

<td class="forum1">{ass:czas}</td>

<td class="forum1">{ass:cos}</td>

<td class="forum2">{ass:ile}

</td>

</tr>

<!--- [/MODUL:ass] dolna czesc-->







</table>



<br><br><br>



[INCLUDE:footer]


Nie uznaje siebie za eksperta w smartach bo nawet ich nie używałem.
Jedynie wziąłem sie za pisanie właśnego parsera.

przy okazji mam prozbe jeżeli ktoś potrzafi poprawić mój kod wyrażeniami regularnymi bo niestety z tym mam problem.

I słowa krytyki czy taki system jest dobry.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.