Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [klasa] Falcon Template, Parser szablonów
SHiP
post
Post #1





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Chciałbym przedstawić moją najnowszą klasę winksmiley.jpg Parser szablonów... Przyznaję wzorowałem się głównie na chameleonie(chodzi o składnie), phpbb jest totalnie nieprzyjazny a Smarty totalnie zamotane winksmiley.jpg

Klasa obsługuje instrukcje warunkowe, sekce, funkcje, zmienne tablicowe oraz modyfikatory. Oczywiście sekcje i ify można dowolnie wiele razy zagnieżdżać. Wielowymiarowość tablic również działa...

Wszystko działa podobnie jak u Bastiona. Są jednak małe wyjatki, funkcja setvar ma inna skadnie @setvar(nazwa zmiennej, wartosc) Wszelkie zmienne umieszczamy w blokach {zmienna} jednak jeśli mamy doczynienia z funkcjami aby uniknąć zagnieżdżania nawiasów klamrowych należy użyć znaku dolara...

Kod
Normalnie blok zapiszemy {blok}
Ale gdy mamy np. instrukcje warunkową
{@if($blok=='costam')}
asf ss as
{@fi}



Dodałem takze kilka ulepszeń...

Możemy deklarować zmienne tablicowe. np.
Kod
{@setvar('tablica',Array('pierwszy','drugi','bla' => 'trzeci'))}


Dodałem również modyfikatory do funkcji setvar(i tylko do niej!) tak wiec możemy użyć zapisu
Kod
{@setvar('owoc','jablko')}
{@setvar('owoc_hash',$owoc|md5)}

lub po prostu
Kod
{@setvar('owoc_hash','jablko'|md5)}


Umożliwiłem takze wielokrotne modyfikowanie np..

Kod
{napis|strtolower|ucfirst|md5}

Co spowoduje zamiane liter w zmiennej 'napis' na małe, następnie pierwsza litera zostanie zmieniona na wielką, na końcu całość zostanie zhashowana za pomoca md5

DOWNLOAD
(wszystkie wersje zawierają przykłady)
Moje projekty (EDIT: to bedzie dzialalo)

Notka dla FiDa winksmiley.jpg czy mógłbyś przeprowadzić mini testy szybkości? Kompletnie się na tym nie znam winksmiley.jpg

Jest to 1 RC wersja ;] wszelkie pomysły mile widziane.. Parser nie obsluguje jeszcze zmiennych globalnych(kombinuje jak to tam dokleić winksmiley.jpg) oraz funkcji @include() - ale ją dopisze jak wstane smile.gif Teraz czas na sen ';)

Ten post edytował SHiP 25.11.2006, 21:06:07


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
3 Stron V   1 2 3 >  
Start new topic
Odpowiedzi (1 - 19)
Bastion
post
Post #2





Grupa: Zarejestrowani
Postów: 505
Pomógł: 0
Dołączył: 8.01.2005

Ostrzeżenie: (0%)
-----


Ja chcialem przeprowadzic testy wydajnosci ale nie ukonczyl ani jednego testu

- nie obsluguje tablic w warunkach (chyba ma to zwiazek z listowaniem)
- brak include
- nie obsluguje funkcji cycle
- nie obsluguje tablic wielowymiarowych typu $cos['indeks']['indeks2']

tyle na szybko


--------------------
Go to the top of the page
+Quote Post
SHiP
post
Post #3





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(Bastion @ 25.07.2006, 10:24 ) *
Ja chcialem przeprowadzic testy wydajnosci ale nie ukonczyl ani jednego testu

- nie obsluguje tablic w warunkach (chyba ma to zwiazek z listowaniem)
- brak include
- nie obsluguje funkcji cycle
- nie obsluguje tablic wielowymiarowych typu $cos['indeks']['indeks2']

tyle na szybko


Dzięki za zainteresowanie winksmiley.jpg

ad 1. Hmm dziwne ze tego nie zauważyłem...
ad 2. aktualnie nad tym pracuję ;] sprawdzam czy szybciej bedzie zmontować rekurencyjne drzewko obiektow aby sprawdzać ścieżke dołączania plikow czy po prostu stworzyć nowy obiekt parsera ;]
ad 3. A jak to działa? tzn co to jest ;]
ad 4. To chyba wina wyrażenia regularnego ;] (nie dzialają tylko tablice w których występują cyfry i znak '_')

Wieczorem wrzucę nowszą wersje winksmiley.jpg z @include


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(SHiP @ 25.07.2006, 10:53 ) *
ad 3. A jak to działa? tzn co to jest ;]

Smarty :: {cycle}
Go to the top of the page
+Quote Post
SHiP
post
Post #5





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


mike_mech -> dzięki wielkie ;0 juz kumato und czaito winksmiley.jpg nawet mam pomysł jak to napisać...

Co do ad.1 tzn Niedziałających tablic w warunkach ;] U mnie jest wszystko ok.
Przykladowy kod... (moze zapomniałeś o dolarze ;])
Kod
{@setvar('tabliczka',Array('jeden','bla' => 'dwa','trzy' => Array('trzy')))}

{@if($tabliczka[0]=='jeden')} <h4>Numeryczne OK </h4>{@fi}
{@if($tabliczka['bla']=='dwa')} <h4>textowe OK </h4>{@fi}
{@if($tabliczka['trzy'][0]='trzy')} <h4>Mieszane OK </h4>{@fi}


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
Bastion
post
Post #6





Grupa: Zarejestrowani
Postów: 505
Pomógł: 0
Dołączył: 8.01.2005

Ostrzeżenie: (0%)
-----


raczej tak smile.gif

ale bez cycle i includa nie moge zapuscic testu do porownania


--------------------
Go to the top of the page
+Quote Post
SHiP
post
Post #7





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Ok nowa wersja gotowa... DOWNLOAD

Dodałem funkcję @include oraz @cycle

co do @cycle skladnia jest prosta
Kod
{@cycle('nazwa','pierwszyparam',drugiparam','trzeciparam','n param')}
Wywolujemy po przez
{@cycle('nazwa')}

Po przez użycie nazw moge operować kilkoma cyclami na raz winksmiley.jpg

ad 4. Poprawione winksmiley.jpg teraz powinny wszystkie tablice śmigać...

Dodałem również możliwość pracy na tablicy w sekcji bez podawania indexu tj.
Kod
{@section('tablica')}
Kolejna wartość: {tablica}
{/section}


Wszystko jest w przykładzie demo06.php

Obsluga include być może zostanie zmieniona, musze jedynie napisać 2 wersje i sprawdzic która jest szybsza winksmiley.jpg
Parser jeszcze nie sprawdza czy plik został utworzony wiec za kazdym razem parsuje szablon od nowa ;] - jutro to poprawie...

ps. nie polecam usuwać sobie kodu a później pisać go jeszcze raz winksmiley.jpg masakra


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
Bastion
post
Post #8





Grupa: Zarejestrowani
Postów: 505
Pomógł: 0
Dołączył: 8.01.2005

Ostrzeżenie: (0%)
-----


dziwne, dalem {@include('header.html')} i dostaje blad

File header..tpl not found


--------------------
Go to the top of the page
+Quote Post
SHiP
post
Post #9





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


hmm nie przewidziałem że ktoś może inne rozszerzenie dać winksmiley.jpg

Ale już to poprawiłem winksmiley.jpg Funkcja cycle mi się spodobała winksmiley.jpg więc zrobiłem matematyczna counter
Kod
deklaracia licznika
{@counter('nazwa', liczba_startowa, co_ile_skakac, kierunek)}
np.
{@counter('moj',25,3,0)} spowoduje deklaracje licznika ktorego wartosc początkowa
to 25 bedzie przeskakiłał co 3 do dołu ( 0 - down, 1 - up)

Licznik wywołujemy po przez
{@counter('moj')}
Wymagany jest tylko jeden parametr - nazwa;] pozostałe domyslnie przyjmują kolejno 0, 1, 1


Przyda się do numerowania linkow w menu, artykułów itp. smile.gif

Download cheetah 1.2 rc 9kb




Odświerzę troche temat...
Jest już 1 wersja release winksmiley.jpg

http://ehand.muminski.be/classes/cheetah1.0.tar.gz

1. Dodałem modyfikator default
Kod
{zmienna|default('ta zmienna nie zostala zadeklarowana')}


2. Poprawiłem system tworzenia plikow(a raczej katalogow teraz system sam tworzy odpowiednie drzewo jeśli czegoś mu brakuje)
3. Ustawiłem aby skompilowane pliki juz sie nie kompilowały(no zechyba to wymusimy)

Bastion -> i co z tymi testami? znajdziesz troche czasu?


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
Bastion
post
Post #10





Grupa: Zarejestrowani
Postów: 505
Pomógł: 0
Dołączył: 8.01.2005

Ostrzeżenie: (0%)
-----


Przerób te szablony by działały pod cheetah : http://www.vertis.com.pl/cheetah.zip


--------------------
Go to the top of the page
+Quote Post
SHiP
post
Post #11





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


ok sprawa zalatwiona winksmiley.jpg Okazało się ze aktualna wersja nie obsluguje modyfikatorow dla zmiennych z pętli. No ale poprawiłem wszystko winksmiley.jpg Nową werjse można pobrać z http://ehand.muminski.be/classes/cheetah1.1.tar.gz

Szablony które mi podałeś są w katalogu cheetah/ są tam tez 2 pliki: run.php i run2.php ktore kompiluja szablony z przykladowymi danymi

Pozostale przyklady jak zawsze w examples/


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
Bastion
post
Post #12





Grupa: Zarejestrowani
Postów: 505
Pomógł: 0
Dołączył: 8.01.2005

Ostrzeżenie: (0%)
-----


pcte => 151.34 requests/s
chameleon 2.0.0 => 145.54 requests/s
nemesis 1.3.0b => 112.28 requests/s
cheetach 1.1 => 101.91 requests/s


czego brakuje jeszcze cheetach ?

- includowanie względne
- zabezpieczenia przed loop-include
- nie sprawdza czy nastąpiła zmiana w szablonie, za kazdym razem gdy dokonujemy zmiany, trzeba kasowac cache

Ten post edytował Bastion 9.08.2006, 12:18:39


--------------------
Go to the top of the page
+Quote Post
Riklaunim
post
Post #13





Grupa: Zarejestrowani
Postów: 640
Pomógł: 44
Dołączył: 8.02.2004

Ostrzeżenie: (0%)
-----


odnośnie cheetah to już jeden system szablonów o tej nazwie istnieje: http://www.cheetahtemplate.org/ smile.gif


--------------------
Biblioteki: Skrypty, CMS | Kurs PHP | Python
Go to the top of the page
+Quote Post
SHiP
post
Post #14





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Bastion -> loop security niby juz jest, nie działa? winksmiley.jpg
includowanie względne postaram sie zmontowac na dniach. Zmienie także system zapisywania plikow to spowoduje odświerzanie cachu w przypadku modyfikacji ;] No i chyba to lekko przyspieszy parser winksmiley.jpg

Cytat(Riklaunim @ 10.08.2006, 02:34 ) *
odnośnie cheetah to już jeden system szablonów o tej nazwie istnieje: http://www.cheetahtemplate.org/ smile.gif


o LOL no to się lekko zdziwiłem... no ale tamten jest w pythonie napisany ;] Sam nie wiem, zmieniać nazwe? o.O


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
eai
post
Post #15





Grupa: Zarejestrowani
Postów: 367
Pomógł: 10
Dołączył: 20.05.2005

Ostrzeżenie: (0%)
-----


Kod
{@setvar('tablica',Array('pierwszy','drugi','bla' =>Array('pierwszy','drugi','bla' =>Array('pierwszy','drugi','bla' => 'trzeci'))))}


Nie testowałem ale mam pytanie czy coś takiego twój system wykona poprawnie?
Następnie czy jest możliwość zrobienia w szablonie ala array_walk zmiennej {tablica}questionmark.gif Chodzi o wypisanie wszystkich wartosci z tablicy wielowymiarowej.

pozdro
Go to the top of the page
+Quote Post
SHiP
post
Post #16





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(eai @ 10.08.2006, 14:36 ) *
Kod
{@setvar('tablica',Array('pierwszy','drugi','bla' =>Array('pierwszy','drugi','bla' =>Array('pierwszy','drugi','bla' => 'trzeci'))))}


Nie testowałem ale mam pytanie czy coś takiego twój system wykona poprawnie?

jak najbardziej winksmiley.jpg

Cytat(eai @ 10.08.2006, 14:36 ) *
Następnie czy jest możliwość zrobienia w szablonie ala array_walk zmiennej {tablica}questionmark.gif Chodzi o wypisanie wszystkich wartosci z tablicy wielowymiarowej.


Tu już będze problem ;] Można dodać kod php. Sam w sobie cheetah nie ma udostepnionych takich funkcji...
Przykładowy szablon:
Kod
{@setvar('tablica',Array('pierwszy','drugi','bla' =>Array('pierwszy','drugi','bla' =>Array('pierwszy','drugi','bla' => 'trzeci'))))}
<pre>
<?php
print_r($this -> vars['tablica']);
?>
</pre>


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
kwiateusz
post
Post #17


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




prawdę mowiąc podoba mi się ta klasa, tylko moj pspad szaleje z kolorowaniem bo w srodku metod pojawiaja sie <? ?> i w return'ach kod php w '' co dla mnie troche dziwnie wygląda winksmiley.jpg
Go to the top of the page
+Quote Post
SHiP
post
Post #18





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Nowa wersja juz jest winksmiley.jpg 1.7
Pobierz

Jeśli chodzi o istotne zmiany:
- przemyślałem sprawe i zmieniłem nazwe klasy z Cheetah na Falcon
- zmiana sposobu zamkniecia sekcji z {/section} na {@end}
- dodanie komentarzy w formacie unixowym {#jakis komentarz}
- wydzielenie klasy kompilatora do oddzielnego pliku
- poprawilem kod odpowiedzialny za parsowanie zmiennych

Całosc powinna dzialać szybciej ;] u mnie na Apache benchmarku gdy wczesniej osiągałem 128Hz teraz podskoczylo to do 160-180Hz(zalezy od zuzycia cpu przez inny soft), przy trybie niewymuszania kompilacji ponad 320Hz Było by miło gdyby Bastion zrobił porównanie winksmiley.jpg Przynajmniej Nemesisa musze wyprzedzić biggrin.gif

Poza tym.
Cytat(Bastion @ 9.08.2006, 13:16 ) *
- zabezpieczenia przed loop-include
- nie sprawdza czy nastąpiła zmiana w szablonie, za kazdym razem gdy dokonujemy zmiany, trzeba kasowac cache

Juz jest

Cytat(Bastion @ 9.08.2006, 13:16 ) *
pcte => 151.34 requests/s

A co to jest pcte? Widze ze coś szybkiego winksmiley.jpg

Cytat(kwiateusz @ 11.08.2006, 18:01 ) *
prawdę mowiąc podoba mi się ta klasa, tylko moj pspad szaleje z kolorowaniem bo w srodku metod pojawiaja sie <? ?> i w return'ach kod php w '' co dla mnie troche dziwnie wygląda winksmiley.jpg

To juz chyba wina edytora ;] Ja pracuje w kate i u mnie jest wszystko w jak najlepszym porządku.

EDIT: jeszcze jedno pytanie do Bastiona winksmiley.jpg jak stoi moja klasa w porównaniu do Smarty? Chodzi o szybkość oczywiście ;]



Jest już wersja 1.9.4
Lista zmian:
- dodałem includowanie względne
- dodałem protekcje znaczników xml
- zmienilem silnik odnajdujący bloki(wzrost szybkosci winksmiley.jpg )
- poprawilem ochronę przed loop-include

Download: http://srodek.info/files/
Notka zewnętrzna: http://srodek.info/blog/11/Falcon-194

Ten post edytował SHiP 13.08.2006, 19:35:54


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
Turgon
post
Post #19





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

Ostrzeżenie: (0%)
-----


Kod przejrzałem oględnie, ale klasa podoba mi się i zaimplementuje ją w mojej aplikacji. Implementuje i dostaje takie coś:
Cytat
Fatal error: Call to a member function parse() on a non-object in /var/www/CMS/lib/core/classes/falcon.class.php on line 102


Ten post edytował Turgon 24.01.2007, 21:46:29


--------------------
Jah Music Is On My Mind !
Go to the top of the page
+Quote Post
SHiP
post
Post #20





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


hmm.. wygląda na to, że nie został stworzony obiekt kompilatora. Napewno użyłeś loadFile()? Załadowałes jakiś plik? Najlepiej pokaż lijinki w których implementujesz moją klase ;]


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 03:54