Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [klasa] Falcon Template
Forum PHP.pl > Inne > Oceny
SHiP
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 ';)
Bastion
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
SHiP
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
mike
Cytat(SHiP @ 25.07.2006, 10:53 ) *
ad 3. A jak to działa? tzn co to jest ;]

Smarty :: {cycle}
SHiP
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}
Bastion
raczej tak smile.gif

ale bez cycle i includa nie moge zapuscic testu do porownania
SHiP
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
Bastion
dziwne, dalem {@include('header.html')} i dostaje blad

File header..tpl not found
SHiP
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?
Bastion
Przerób te szablony by działały pod cheetah : http://www.vertis.com.pl/cheetah.zip
SHiP
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/
Bastion
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
Riklaunim
odnośnie cheetah to już jeden system szablonów o tej nazwie istnieje: http://www.cheetahtemplate.org/ smile.gif
SHiP
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
eai
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
SHiP
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>
kwiateusz
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
SHiP
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
Turgon
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
SHiP
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 ;]
Turgon
Pliki są na pewno includnięte ;] Ponieważ mam loadera, który mapuje wszystkie katalogi i includuje. To kod implementacji:
  1. <?php
  2. class TurTemplate{
  3.  
  4. public $templatesDir = './templates/raw/';
  5. public $compiledTemplatesDir = './templates/compiled/';
  6.  
  7. private $_oFalcon;
  8. private $vars;
  9.  
  10. public function __construct(){
  11. $this->_oFalcon = new Falcon();
  12. $this->_oFalcon->templates_tpl_dir = $this->templatesDir;
  13. $this->_oFalcon->templates_php_dir = $this->compiledTemplatesDir;
  14. }
  15.  
  16. public function __set($name,$var){
  17. $this->vars[$name] = $var;
  18. }
  19.  
  20. public function __get($name){
  21. return $this->vars[$name];
  22. }
  23.  
  24. public function setTemplate($name){
  25. $this->_oFalcon->loadFile($name);
  26. }
  27.  
  28. public function render(){
  29. $this->_oFalcon->vars = $this->vars;
  30. return $this->_oFalcon->parse();
  31. }
  32. }
  33. ?>
Bastion
Przyznam się, że próbowałem uruchomić ten system szablonów, ale napotkałem problem.
Otóż - zmieniając katalogi szablonów i kompilacji , sama klasa Falcon jakby przyjmuje parametry
templates_php_dir oraz templates_tpl_dir. Niestety parametry te nie są przekazywane do
klasy kompilatora co skutkuję błędem :

Cytat
Warning: file_get_contents(./templates_tpl/tpl_1.html) [function.file-get-contents]: failed to open stream: No such file or directory in /home/html/bench/tpl_engines/falcon/falcon_compiler.class.php on line 89

Warning: file_put_contents(./templates_php/falcon_f96f7c81c65c24af700aef0443bddefd.php) [function.file-put-contents]: failed to open stream: No such file or directory in /home/html/bench/tpl_engines/falcon/falcon_compiler.class.php on line 379
SHiP
@Turgon, @Bastion: dzięki za komentarze, rzeczywiście kompilator mial bledne ścieżki, teraz wszystko powinno działać bez problemu smile.gif

Pobierz nową wersje winksmiley.jpg http://srodek.info/files/falcon-1.9.6.tar.gz
Turgon
Dobra mam kilka uwag. Otóż klasa Falcon wymaga dania display, by otrzymać gotowy szablon, a ja np. chce tylko sparsowany do zmiennej, bo oddaje go innej klasie do obróbki.
MalCom
Mi sie zawsze marzyl szybki i wydajny parser, bez zbednych dodatkow. Tylko z tym co najbardziej potrzebne, czyli zmienne i bloki tongue.gif
Bastion


Apache Benchmark : -c 900 -n 300

Maszyna P4 2.8GHz HT + 1,5GB Ram

Szablon testowy :

Cytat
{@inc("header.html")}

<table border="1" cellspacing="0" cellpadding="1">
{@list(newsy)}
{@cycle(cls,"par,odd")}
<tr class="{cls}">
<td width="15%">ID: {newsy['id']}</td>
<td width="*">
{@if(newsy['autor'])}
{newsy['autor']|strtoupper} ({newsy['mail']})
{@else}
anonim
{@fi}
</td>
</tr>
<tr class="{cls}">
<td colspan="2">
<h4>{newsy['tytul']|ucfirst}</h4>{newsy['tresc']}
</td>
</tr>
<tr class="{cls}">
<td>{newsy['data']|date("Y-m-d H:i:s")}</td>
<td>{@if(newsy['komentarze'])}[<a href="?news_id={newsy['id']}">{newsy['komentarze']} komentarze</a>]{@else}Brak komentarzy{@fi}</td>
</tr>
{@end}
</table>

{@inc("footer.html")}


Cytat
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
<head>
<title>{title}</title>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
<meta name="keywords" content="{keywords}">
<style type="text/css">
body {
background-color: #F0F5FA;
font-family: Tahoma;
font-size: 13px;
}

img {
border: none;
}

form {
display: inline;
}

h3 {
font-size: 1.3em;
font-family: Verdana;
font-weight: normal;
}

tr.par {
background-color: #ccc;
}

tr.odd {
background-color: #ddd;
}

/* divek centrujacy */
div.center>* {
margin-left: auto;
margin-right: auto;
}

div.center {
text-align: center;
}

/* linki */
a {
color: black;
text-decoration: none;
}

a.small {
font-size: smaller;
}

/* linki w tabeli */
tr.odd a, tr.par a {
color: #333;
}

/* linki w menu */
div#menu a, div#menu a:active, div.separator {
display: block;
background-color: #808080;
font-weight: bold;
border-bottom: 1px solid #A9A9A9;
padding: 3px 0 3px 0.7em;
}

div#menu a.submenu {
background-color: #bbb;
padding: 2px 0 2px 0.7em;
}

div#menu a:hover {
background-color: #999;
}
</style>
</head>
<body>


Cytat
<h3>{footer}</h3>

{footer|strtolower}

</body>
</html>
SHiP
@Bastion; Dzięki za wyniki testu smile.gif. Nie jest źle, przynajmniej OPT i Smarty wyprzedziłem winksmiley.jpg. Myślę, że dałoby radę jeszcze przyspieszyć falcona... Cała funkcja include jest do wymiany.. ale to kiedyś tam w przyszłości winksmiley.jpg

@Turgon: Wiem że to kilka minut roboty ale puki co zajety jestem biblioteką na art.php.pl winksmiley.jpg W lutym umieszczę nową wersję Falcona winksmiley.jpg Jesli chcesz to pod koniec funkcji parse() w kompilatorze masz juz gotową zmienną $phpcode przechowujacą kod. ewentualnie przerób display() za pomocą funkcji ob_start" title="Zobacz w manualu php" target="_manual, ob_get_clean" title="Zobacz w manualu php" target="_manual
Sh4dow
Jak juz robic e testy porownawcze w wydajnosci to moze by tak mozliwosci wszystkich tych systemów przedstawic ? Szczerze mowiec nie znam ich wszystkich wiec ten test i tak mi nic nie mowi.
Za opis bedzie wdzieczny smile.gif
Turgon
Takie pytanie na marginesie. Co przygotowujesz, że tak jesteś zajęty?
Bastion
Sh4dow : bolesna prawda jest taka, że wyniki jakie są tu prezentowane -nie-do-konca- sa prawdziwe
i wiarygodne, ze wzgledu na wiele czynnikow takich jak

- rozmiar,
- mozliwosci relatywnie wykorzystanych w projekcie docelowym
- sposob testowania ( dysk, pamiec, cache, cache apacha, typ serwera )
- budowa szablonu
- metda jego generowania

Prawdopodobnie z ZyXem opracujemy jakis test, ktory bedzie blizej wiarygodny niz dalej.
SHiP
Myślę że jeśli rdzen jest dobrze napisany to pozostale opcje dzialają na zasadzie modułow - zwalniają skrypt tylko gdy są wykorzystywane...

Co do możliwości Falcona:
  • Zwykłe zmienne
  • zmienne tablicowe
  • instrukcje warunkowe
  • obsługa funkcji: @setVar(deklaracja zmiennych), @include(dołaczanie pliku(wzglednie i bezwzglednie)), @cycle(cyklowanie tablicy), @counter()
  • ochrona przed loop include
  • sekcje, w tym obsluga tablic indexowanych numerycznie ( {section($zmienna)} {zmienna} {/section} )
  • modyfikatory np |strtoupper |date() |default("fsdf")
  • mozliwosc uzycia multimodyfikatorow tj. {zmienna|pierwszy|drugi|trzeci}
  • dołaczanie plikow w locie np. @include($zmienna.'.html'); (uwaga w fazie testow i na 90% bedą pokazywać się błedy)
To chyba wszystko, reszta(jak np. cachowanie) jest chyba oczywista...
Bastion
Dodam małe info, że Chameleon-Dev-2.2 wspiera pamięć współdzieloną SHM (Shmop Extension)
Wtedy wynik jest deczko inny

Testing Chameleon 2.2.0-dev (SHM Mode) => 354.89 requests/s

Wada - rozszerzenie shmop nie wszedzie jest sad.gif
Turgon
Zaczynam mozolne pisanie skryptu i piszę sobie szablonik, a tu zonk:
  1. {@section('news')}
  2. <h3>{news['title']}</h3>
  3. {news['text']}
  4. {/section}

Pisze, że sekcja nie zamknięta ;/ ....
SHiP
Od wersji 1.8 ileś winksmiley.jpg {/section} zostało zamienione przez {@end}
  1. {@section('news')}
  2. <h3>{news['title']}</h3>
  3. {news['text']}
  4. {@end}
Turgon
To zrób przynajmniej jakąś aktualną dokumentację smile.gif Bo często napotykam na tego typu problemy. Z resztą Falcon został zmodyfikowany przeze mnie, żeby używałem Wyjątków, które następnie przechwytuje klasa TurTemplate i daje odpowiedni ekran błędu.
SHiP
Cytat
To zrób przynajmniej jakąś aktualną dokumentację


Dodam to do harmonogramu winksmiley.jpg. Postaram się coś napisać na dniach.
Turgon
Mam kolejne problemy z falconem:
  1. {info}
  2. {@if(list)}
  3. <tr>
  4. <td>Id strony</td><td>Tytuł</td><td>Link do edycji</td>
  5. </tr>
  6. {@section('list')}
  7. <tr>
  8. <td>{list['id']}</td><td>{list['title']}</td><td><a href="index.php?m=Page&a=Edit&id={list['id']}">Edytuj</a></td>
  9. </tr>
  10. {@end}
  11. </table>
  12. {@else}
  13. <form method="POST" action="index.php?m=Page&a=Edit&id={id}">
  14. <strong>Tytuł: </strong> <br /> <input type="text" name="title" value="{page['title']}" /> <br />
  15. <strong>Tekst: </strong> <br /> <textarea cols="70" rows="30" name="text">{page['text']}</textarea>
  16. <input type="submit" value="Zapisz" />
  17. </form>
  18. {@fi}


PHP pluje, że źle formułuje ifa i źle... Mi zależy żeby zrobił isset ;]
SHiP
Kod
{@if(isset($list))}


Nie ma protekcji przed php wiec można śmialo korzystac z odwolan do jego funkcji.

PS: jednak ta dokumentacja odejdzie na dalszy plan. Mam strasznie dużo pracy i zdecydowanie za mało czasu winksmiley.jpg
Turgon
No to kolego, będziesz musiał znosić mnie i moje problemy winksmiley.jpg

Znalazłem kolejny błąd.
Otóż system wykrzacza się, kiedy dwa razy użyje taką samą zmienną np. dwa razy w kodzie pojawi się {title}, to w drugim miejscu jest pustka.
SHiP
Cytat(Turgon @ 7.04.2007, 18:17:06 ) *
Znalazłem kolejny błąd.
Otóż system wykrzacza się, kiedy dwa razy użyje taką samą zmienną np. dwa razy w kodzie pojawi się {title}, to w drugim miejscu jest pustka.


Niemozliwe ;p musiałeś coś przekręcić...
Turgon
Jednak pokręciłem. Można dodać do tego stałe szablonowe ? Bardzo by mi się przydało.
eai
Brakuje mi weryfikacji zmiennych użytych w szablonie tpl
W sekcjach przy wpisaniu blednych zmiennych lub indeksów, powoduje nie wyswietlenia sie niczego. A powinno w tym miejscu być np <!-- Taka zmienna nie istnieje -->
SHiP
Cytat(eai @ 12.04.2007, 07:47:40 ) *
Brakuje mi weryfikacji zmiennych użytych w szablonie tpl
W sekcjach przy wpisaniu blednych zmiennych lub indeksów, powoduje nie wyswietlenia sie niczego. A powinno w tym miejscu być np <!-- Taka zmienna nie istnieje -->


Dzięki modyfikatorowi default mozemy ustawić domyślną wartość zmiennej

Kod
{zmienna|default("Uwaga ta zmienna nie została zadeklarowana")}
eai
W sekcjach tez??
{@section('tabliczka')}
<p style="color:{@cycle('colors')}">{tabliczka|default("Uwaga")}</p>
{@end}
SHiP
Hmm... dziwne ale jest błąd z tablicami indexowanymi numerycznie winksmiley.jpg dzięki w wolnym czasie postaram się to poprawić smile.gif

Przyklad kiedy bedzie dzialalo default w sekcjach
Kod
{@section('tabliczka')}
{tabliczka['ble']|default("zonk")}
{@end}


w php przekazujemy tablice
  1. <?php
  2. $tabliczka = Array(Array('ble' => 'jeden'), Array('bla' => 'dwa'),Array('ble' => 'trzy'));
  3. ?>


Jako wynik otrzymamy "jeden zonk trzy"
Kamson
Widzę że temat jakoś przymiera ... ale korzystam z Falcona i bardzo podoba mi sie jego prostota ... pracuje właśnie nad pewnym projektem i bardzo przydała by się pewna funkcja wcześniej opisywana
    dołaczanie plikow w locie np. @include($zmienna.'.html'); (uwaga w fazie testow i na 90% bedą pokazywać się błedy)

mam u siebie taki kod

  1. <div class="prawy">
  2. {@setvar('pBoxy',Array('box1, 'box2', 'box3'))}
  3. {@section('pBoxy')}
  4. <div class="prawy_box">
  5. <h3>{pBoxy}</h3>
  6. <p>
  7. {@include($pBoxy)}
  8. </p>
  9. </div>
  10. {@end}
  11. </div>


niestety kończy się błędem...

czy Falcon będzie jeszcze rozwijany?
SHiP
Oczywiście, że będzie, narazie jednak skupiam się na moim edytorze wysywig i falcon jakos odszedl na drugi plan. W moich szablonach po prostu przekazuje zwyklą zmienną do funkcji @include którą montuję linijke wczesniej. Błędy zazwyczaj wyswietlają sie przy bardziej złożonych parametrach
Kamson
Mógł byś mi dokładniej wytłumaczyć jak przekazujesz do @include wartość zmiennej .. chodzi o to by to co w includuje też przeszło przez kompilator Falcona , jak przy zwykłym @include('cos .tpl')


pozdrawiam
SHiP
Jest nowa wersja Falcona z numerkiem 1.9.9 Powoli zblizam sie do 2.0 i rozbudowanej obslugi obiektow winksmiley.jpg

Pobrać mozna jak zwykle z http://srodek.info/files

Changelog:
- dodalem wstepna obsluge widgetow, translacji oraz obiektow
- mozliwosc odwolywania sie do zmiennych jak do obiektow np. {zmienna -> index}
- poprawiona obsluga funkcji include (dzięki Kamson)- poprawione odnajdowanie zmiennych
- brak kominikatow NOTICE podczas odwolan do nieistniejacych zmiennych
- poprawiona obsluga modyfikatora default w zmiennych sekcyjnych (dzięki eai)
- zmiana licencji na GNU GPL v.3

Uwaga
  1. <?php$falconObj -> vars = Array('tablica z danymi');?>
juz nie zadziala
Nowa wersja
  1. <?php$falconObj -> assignData(Array('tablica z danymi'));?>


Niestety z powodu uzycia nowego systemu deklaracji i odczytu zmiennych parser stracił kilka procent na szybkosci...
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.