Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [skrypt] Prosty parser szablonu i debugger
Forum PHP.pl > Inne > Oceny
ActivePlayer
no ok, a jakis for ? foreach? jak wyswietlic dane w petli ?
Bastion
nie rozumiem ? smile.gif
ActivePlayer
np tak:
  1. <?php
  2.  
  3. $newsy = array('1','2','3');
  4. $szablon->addVar('newsy', $newsy);
  5.  
  6. ?>

a template
Kod
{foreach newsy as sth}
news {sth}<br />
{/foreach}

i wynik
Kod
news 1
news 2
news 3
Bastion
aarambo.gif ciekawy pomysl - trzeba dodac smile.gif
Diablos
A ify?

BTW. Funkcje matematyczne, taki bajerek, ale watpie zeby ktos z tego korzystal.
Bastion
Ify tez beda smile.gif
ActivePlayer
Bastion, bez pętli to raczej nie ma szans na przetrwanie. do tego fajnie gdyby dalo sie zdefiniowac lewy i prawy 'zamykacz' na swoje. do tego jeszcze jedno pytanie. jak odwolac sie do np:
  1. <?php
  2.  
  3. $asd[0] = 'mama';
  4. $asd[1] = 'tata';
  5.  
  6. ?>

robie assign do szablonu, i chce odwolac sie do $asd[0]; w jaki sposob to robie? tak ?
Kod
{asd[0]} ?

btw. chyba wole smarty smile.gif
vieri_pl
hmmm nie ma wielu przydatnych funckji... ja jednak również wolę smarty smile.gif
Bastion
@ActivePlayer : dodano obsluge tablic :

http://www.jarzebski.pl/001/test_chameleon.php
http://www.jarzebski.pl/001/test.tpl

Kod
<php
    require_once('debugger.inc.php');
    require_once('chameleon.inc.php');

    $template = new Chameleon();
    $template->loadTemplate('test.tpl');

    $template->setVar('zmiennaA', 10);
    $template->setVar('zmiennaB', 40);

    $el[0] = 'mama';
    $el[1] = 'tata';

    $template->setVar('elements', $el);

    print  $template->parseTemplate();
?>


odwoluje sie tak : {elements[0]}

jesli tablica istnieje a klucz tylko nie to na czerwono sygnalizuje klucz.

Teraz czas na ify i petle tongue.gif aarambo.gif

----------------------------

@vieri: a moglbys rozwinac smile.gif ?

----------------------------

@diablos : Ja widze, np :

Kod
<table width="{image_width+20}" height="{image_height+20}">
<tr>
  <td align="center" valign="middle">
   {image}
  </td>
</tr>
</table>
vieri_pl
1.

Jest ekstremalnie szybki.
2.

Jest efektywny odkąd parser php przejął "brudną robotę".
3.

Nie parsuje szablonu za każdym razem, tylko raz kompiluje.
4.

Rekompiluje tylko te szablony które się zmieniły.
5.

Język szablonów jest ekstremalnie elastyczny ponieważ możesz tworzyć własne funkcje oraz własne modyfikatory zmiennych.
6.

Konfiguralne znaczniki wyrażeń szablonów, możesz używać {}, {{}}, <!—{}--!>, itd.
7.

Konstrukcje if/elseif/else/endif są przekazywane do parsera php, więc wyrażenie {if...} może być proste lub kompleksowe – jak sobie życzysz.
8.

Nieograniczone zagnieżdżanie sekcji, if-ów itd.
9.

Jeśli to potrzebne można osadzić kod php w plikach szablonów, jednak jest to czynność nie polecana.
10.

Wbudowane keszowanie.
11.

Mozliwa własna konfiguracja źródeł szablonów.
12.

Architektura oparta o wtyczki.
13.

Architektura pozwalająca wykorzystywać własne rozszeżenia.

I wszystko jasne...
Bastion
mejbi, ale po co angazowac "krowe" smarty do prostszych rozwiazn.

---

Dodałem cache (zachowywanie na dysku mapy tagów), i oto benchmark
z porównaniem ze smarty :

TPL : http://www.jarzebski.pl/001/smarty_vs_chameleon/template.tpl ( 10kB )

BENCH : http://www.jarzebski.pl/001/smarty_vs_cham...n/benchmark.php
BENCH : http://www.jarzebski.pl/001/smarty_vs_cham...nchmark.php.txt
sf
Cytat(Bastion @ 2006-02-05 17:26:04)
mejbi, ale po co angazowac "krowe" smarty do prostszych rozwiazn.

Jeśli aplikacja ma się rozwijąć to lepiej wykorzystać narzędzie, które umożliwia taki rozwój bo potem się okaże, że nie ma tego i tego.. i trzeba zmienić narzędzie... szkoda czasu.

Twoje obecne rozwiązanie jest dobre, ale na eksperymenty, a nie do rozwiązania produkcyjnego.
Bastion
Zgadzam sie, ja nie mowilem ze to finalna wersja - do osiagniecia minimalnej funkcjonalnosci jeszcze daleka droga , dlatego go tutaj zapodalem, by zorientowac sie jakie funkcje i wymagania sa stawiane takim rozwiazaniom. Za wszystkie uwagi nie mniej bardzo dziekuje.
Diablos
Bastion, dla ciekawosci porownaj sprawdz jeszcze Smarty Light winksmiley.jpg

Oczywiste jest, ze cos co ma mniej funkcji, jest mniejsze i posiada mniej kodu bedzie szybsze.
Kinool
smarty light sa fajne ale nieste projekt zostal wstrzymany sad.gif no i na PHP5 trzeba samemu przepisac
Bastion
FastTemplate : 500 iteracji (20 zmiennych) = 4.2869s
FastTemplate : 500 iteracji (10 zmiennych) = 3.7401s
FastTemplate : 500 iteracji (5 zmiennych) = 2.1285s
FastTemplate : 500 powtórzeń (20 zmiennych) = 4.2090s

Smarty : 500 iteracji (20 zmiennych) = 0.3376s
Smarty : 500 iteracji (10 zmiennych) = 0.3078s
Smarty : 500 iteracji (5 zmiennych) = 0.3006s
Smarty : 500 powtórzeń (20 zmiennych) = 0.2569s

Smarty-Light : 500 iteracji (20 zmiennych) = 0.2478s
Smarty-Light : 500 iteracji (10 zmiennych) = 0.2247s
Smarty-Light : 500 iteracji (5 zmiennych) = 0.2082s
Smarty-Light : 500 powtórzeń (20 zmiennych) = 0.1846s

Chameleon : 500 iteracji (20 zmiennych) = 0.2193s
Chameleon : 500 iteracji (10 zmiennych) = 0.2057s
Chameleon : 500 iteracji (5 zmiennych) = 0.1957s
Chameleon : 500 powtórzeń (20 zmiennych) = 0.0997s

XTemplate : 500 iteracji (20 zmiennych) = 1.3620s
XTemplate : 500 iteracji (10 zmiennych) = 1.3862s
XTemplate : 500 iteracji (5 zmiennych) = 1.3691s
XTemplate : 500 powtórzeń (20 zmiennych) = 0.0166s

phemplate : 500 iteracji (20 zmiennych) = 0.1823s
phemplate : 500 iteracji (10 zmiennych) = 0.1787s
phemplate : 500 iteracji (5 zmiennych) = 0.1796s
phemplate : 500 powtórzeń (20 zmiennych) = 0.1062s

PHPlib : 500 iteracji (20 zmiennych) = 0.4847s
PHPlib : 500 iteracji (10 zmiennych) = 0.3124s
PHPlib : 500 iteracji (5 zmiennych) = 0.2196s
PHPlib : 500 powtórzeń (20 zmiennych) = 0.3501s
Levabul
Te pomiary zostały wykonane raz czy są może to średnie czasy ? Bo np. dzięki cachowaniu SMARTY przy kolejnym odczytaniu strony dziła o wiele szybciej.

ps. A gdzie porównanie do OPT (http://opt.openpb.net/)?
hwao
Bastion jezeli Ty masz w sumie tylko wyswietlanie zmiennych to popatrz sam smile.gif
Roznice czasow sa tak nie wielkie, ze nie zauwazalne a w smarty masz wszytko czego Ci trzeba.
Bastion
@lavabul - tak wyniki sa srednie, uwzgledniajac dobrodziejstwa cache Smarty.

@hwao, moze i smarty ma wszystko co mi trzeba biggrin.gif ale mam dziwna przypadlosc smile.gif ze wole miec "swoj pot" na stronie . Faktycznie porównanie dotyczy tylko zmiennyh, ale w przeciwienstwie do smarty nie uzywam kompilacji do php a uzywam mapy tagow, dodajac w przyszlosci do tej mapy parametry czy jest to zmienna, czy funkcja, lub petla nie spowolni to bardzo calosci i miejmy nadzieje zwrost objetosci klasy nie spowolni logarytmicznie wydajnosci.

Pozatym mysle ze juz bedzie co ugryzc jesli Chameleon bedzie potrafil operowac na zmiennych zwyklych i tablicowych (juz potrafi) , bedzie cachowal zapetlnoe przetwarzania (tez potrafi) oraz zapisywam mapy tagow na dysku (tez potrafi), obsluzy petle i ify dowolnej glebokosci no i moze jakies proste filtry.

Tak naprawde owszem - czemu nie, moglbym skorzystac ze smarty / light - ale jestem dzikim pasjonatem tongue.gif

W obecnym stadium Chameleon posiada predkosc zblizona do Smarty-Light przy iteracjach z ponownym zaladowaniem szablonu oraz zaladowaniem zmiennych, ale biorac pod uwage cykliczne przetwarzanie jednego szablonu z zachowaniem mapy tagow w pamieci jest juz 2x szybsze.
Czyli generujac np. 40 newsow na stronie (40 petli na tym samym szablonie) zrobi to 2x szybciej niz Smarty-Light, lub prawie 3x szbciej w przeciwienstwie so zwyklego Smarty.

Za pare dni, po ostrych optymalizacjach i zaimplementowaniu podstawowych dzialn na TPL ponownie przedstawie ( jesli mozna tongue.gif ) efekty pracy .Osobiscie uwazam ze Smarty jest bardzo dobre, ale juz dawno zatracil podstawowe ideologie szablonow (w moim mniemaniu) . Tworzenie
szablonu powinno byc bardzo proste, tak aby uzytkownik koncowy korzystajac z jakiegos CMS'a badz skryptow nie potrafiacy za bardzo php mogl sam zrobic sobie szablonik - nie marwtiac sie przy tym ze trzeba jednak pamietac o regulach ktore narzuca smarty.
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.