Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP5] Framework dla najmłodszych
Forum PHP.pl > Inne > Oceny
hwao
Jako że mi się troche nudziło, a pozatym chce sobie napisać na szybko prostą strone napisałem bardzo prostego frameworka w php.

Główne zalozenia to do pisania prostych stronek blog/ksiega gosci/wyswietlanie roznych danych. Jest napisany tak zeby nie miec burdelu w kodzie i w miare ładnie to rozpisane, czyli nie mieszkac warstwy biznesowej z szablonami.

Zip: http://hwao.strefaphp.net/poligon/framework.zip
Source online: http://hwao.strefaphp.net/subdomains/repos...-php5/index.php
<span style="font-style: italic;">Po lewej <span style="font-weight: bold;">framework-php5</span></span>...

Postanowiłem pokazać, może jakiemus poczatkujacemu programiscie troche rozjasni w głowie, jak zwykłe czekam na pytania - chetnie odpowiem.

Oczywiscie jak coś będe pisał to kod sie bedzie rozbudowywał, wiec bede wrzucał poprawione czesci, jezeli ktos coś dopisze to też może pokazać - chetnie dodam.

Pozdrawiam

Poprawiłem linki, do źródeł
vieri_pl
juz jest ok tongue.gif Mialem ustawione php 4 biggrin.gif


thx hwao za przyklady !
mike
~vieri_pl to jest kod pod php5
A po błędzie widzę, że chyba masz wcześniejszą wersję.
hwao
Dobra dodam jeszcze dziś WebRequest:

  1. <?php
  2.  
  3. /**
  4.  * WebRequest
  5.  * 
  6.  * @author Paweł `hwao` Halicki
  7.  * @version 1.0.0
  8.  */
  9.  
  10. if( !defined( 'SECURITY' ) ) {
  11. die( 'SECURITY' );
  12. }
  13.  
  14. class WebRequest {
  15. /**
  16.  * Obiekt WebRequest
  17.  *
  18.  * @var object WebRequest
  19.  */
  20. static private $WebRequest = null;
  21.  
  22. /**
  23.  * Dane żądania
  24.  *
  25.  * @var array
  26.  */
  27. private $_GET = array();
  28. private $_POST  = array();
  29. private $_COOKIE = array();
  30.  
  31. /**
  32.  * Klucze
  33.  *
  34.  */
  35. const GET = 1;
  36. const POST  = 2;
  37. const COOKIE = 3;
  38.  
  39. /**
  40.  * Czy sa "magniczne znaki" :) czyli zmora kazdego tongue.gif
  41.  */
  42. protected $bMagicQuotes = true;
  43.  
  44. /**
  45.  * Konstruktor
  46.  *
  47.  */
  48. protected function __construct() {
  49. //- Celowo referecja, nie usuwam tych danych chyba ze ktos chce to niech przerobi
  50. $this->_GET = & $_GET;
  51. $this->_POST  = & $_POST;
  52. $this->_COOKIE = & $_COOKIE;
  53.  
  54. // unset( $_GET, $_POST, $_COOKIE );
  55. $this->bMagicQuotes = get_magic_quotes_gpc();
  56. }
  57.  
  58. /**
  59.  * Wyjmowanie interesujacego nas parametru :)
  60.  *
  61.  * @param string $sKey - co nas interesuje
  62.  * @param string/int $mFrom - gdzie szukac get/post/cookie
  63.  * @param bool $bHtml - czy maja byc znaczniki html'a escejpowane
  64.  * @param bool $bDatabase - czy dane beda zapisywane w bazie danych
  65.  * @param string $sSyntax - dodatkowe formatowanie
  66.  * @return string/array
  67.  */
  68. public function getParam( $sKey, $mFrom = self::GET , $bHtml = false, $bDatabase = false, $sSyntax = null ) {
  69. switch( strtolower( $mFrom ) ) {
  70. case self::GET:
  71. case 'get':
  72. case 'g':
  73. return $this->prepareParam( $this->getVars( $this->_GET, $sKey ), $bHtml, $bDatabase, $sSyntax );
  74. break;
  75. case self::POST:
  76. case 'post':
  77. case 'p':
  78. return $this->prepareParam( $this->getVars( $this->_POST, $sKey ), $bHtml, $bDatabase, $sSyntax );
  79. break;
  80. case self::COOKIE:
  81. case 'cookie':
  82. case 'c':
  83. return $this->prepareParam( $this->getVars( $this->_COOKIE, $sKey ), $bHtml, $bDatabase, $sSyntax );
  84. break;
  85. default:
  86. return null;
  87. break;
  88. }
  89. }
  90.  
  91. /**
  92.  * Zwraca wartosc
  93.  *
  94.  * @param array $aArray
  95.  * @param string $sParam
  96.  * @return mix
  97.  */
  98. private function getVars( $aArray, $sParam ) {
  99. return array_key_exists( $sParam, $aArray ) ? $aArray[$sParam] : null;
  100. }
  101.  
  102. /**
  103.  * Przygotowanie danych
  104.  *
  105.  * @param string/array $mParam
  106.  * @package bool $bHtml
  107.  * @param bool $bDatabase
  108.  * @param string $sSyntax
  109.  * @return string/array
  110.  */
  111. private function prepareParam( & $mParam, & $bHtml, & $bDatabase, & $sSyntax ) {
  112. if( is_array( $mParam ) ) {
  113. foreach( $mParam As $sKey => $mValue ) {
  114. $mParam[$sKey] = $this->prepareParam( $mValue, $bHtml, $bDatabase, $sSyntax );
  115. }
  116. return $mParam;
  117. }
  118.  
  119. if( $this->bMagicQuotes == true ) {
  120. $mParam = stripslashes( $mParam );
  121. }
  122.  
  123. if( $bHtml == true ) {
  124. $mParam = htmlentities( $mParam, ENT_COMPAT, 'UTF-8' );
  125. }
  126.  
  127. if( $bDatabase == true ) {
  128. $mParam = mysql_escape_string( $mParam );
  129. }
  130.  
  131. if( !is_null( $sSyntax ) ) {
  132. $mParam = sprintf( $sSyntax, $mParam );
  133. }
  134.  
  135. return $mParam;
  136. }
  137.  
  138. /**
  139.  * Pobranie instancji
  140.  * 
  141.  * @return object WebRequest
  142.  */
  143. static public function Get() {
  144. if( is_null( self::$WebRequest ) ) {
  145. return self::$WebRequest = new WebRequest();
  146. }
  147. return self::$WebRequest;
  148. }
  149. }
  150. ?>


Służy do obslugi tego co klient nam wysyla (zostały jeszcze $_FILES ale to osobny obiekt)...

Uzycie
Żądanie: http://strona.pl/?hwao='cos%20%3Cb%3Eb...#39;%jazda'
Typ żądania : GET

Kod php:
  1. <?php
  2.  
  3. $Request = WebRequest::get();
  4. $getHwao = $Request->getParam( 'hwao', 'Get', true );
  5.  
  6. var_dump( $_GET['hwao'] );
  7. var_dump( $getHwao );
  8.  
  9. ?>

Wyniki:
Kod
'\'cos <b>bold</b>Where `hwao` Like \'%jazda\'' (length=45)
''cos &lt;b&gt;bold&lt;/b&gt;Where `hwao` Like '%jazda'' (length=54)


Warto zapoznac sie z sposobem pobierania zmienych:
  1. <?php
  2. $getHwao = $Request->getParam( 1, 2, 3, 4, 5 );
  3. ?>


Na przykladzie $_GET['hwao']

1 - wymagana - klucz jakiego szukamy czyli unas 'hwao'
2 - gdzie szukamy - domyslnie GET
GET = WebRequest::GET lub string 'get' lub 'g' wielkosc liter obojetna
Analogicznie z Post WebRequest::POST 'post' 'p' i cookie smile.gif
3 - nie wymagany - True/False - czy chcemy zastapic na encje kod html, domyslnie FALSE
4 - nie wymagany - True/False - czy kod bedzie zapisywany w bazie danych (usuwanie znacznikow zagrazajacych naszemu sql smile.gif ) domyslnie FALSE
5 - nie wymagany - String - mozemy chciec jakos ekstra zformatowac zmienna składnia sprintf().

To narazie tyle ide coś zjeść tongue.gif

Całość jest dostepna jako OS wiec róbta co chceta... ps milo by bylo zostawic informacje o autorze..
Bastion
hm, ciekawa sprawa smile.gif musze to przestudiowac
Vomit
Mam pytanie: po co sa puste konstruktory? Jest jakas roznica od tego czy jest pusty konstruktor czy w ogole go nie ma?
ens0re
Może głupie pytanie, ale jestem nie kumaty pewnie: Jak w ogole odpalić ten skrypt? Wyswietla mi sie tylko napis: Index a niżej 'hwao' i nic. Mam php5 itp. A katalogi i scieżki są raczej dobre.
hwao
Cytat(Vomit @ 2006-02-25 19:31:31)
Mam pytanie: po co sa puste konstruktory? Jest jakas roznica od tego czy jest pusty konstruktor czy w ogole go nie ma?

Wiekszego znaczenia to nie ma:
Ale dreklaruje je jako PUBLIC zeby bylo wiadomo jak bedzie tworzo ny obiekt.

Pozatym z doswiadczenia wiem, ze zazwyczaj przydaja sie smile.gif np jak chce dodac WebRequest to w pliku WebController.php
  1. <?php
  2.  
  3. public function __construct() {
  4. //- Zalaczanie dodatkˇw :)
  5. include DIR_FW.'/WebRequest.php';
  6.  
  7. } 
  8. ?>

i wszytko smiga ładnie smile.gif

Jezeli mamy konstruktor PROTECTED/PRIVATE to musimy postawic jak w przypadku konstruktora WebRequest, czyli wymuszam tam ze ma byc tylko jeden obiekt:)


Cytat
Może głupie pytanie, ale jestem nie kumaty pewnie: Jak w ogole odpalić ten skrypt? Wyswietla mi sie tylko napis: Index a niżej 'hwao' i nic. Mam php5 itp. A katalogi i scieżki są raczej dobre.

Wszytko jest dobrze wiec pokoleji plik index.php
  1. <?php
  2. //-- Aplikacja
  3. $Application = new WebController();
  4. $Application->setAction( $_GET['action'], 'index' ); 
  5. ?>

W ostaniej linijce opokazanej tutajjest wybierany model jaki ma zostac uruchomiony, poniewaz system rozpozna ze w $_GET['action'] nic nie ma, badz tez wskazana akcja nie istnieje zostaje odpalona domyslna (czyli 2 parametr tej metody).

Odpala sie model/index.php
Tam w klasie Index masz metode Perform
  1. <?php
  2. public function Perform() {
  3. $this->Assign( 'text', 'hwao' );
  4. return true;
  5. } 
  6. ?>

Ktora poprostu wysyla dane do Szablonu ( $text = 'hwao' ) jako ze zadnego specjalnego wybierania szablonu nie zrobilismy zostaje odpalony plik templates/index.tpl
w ktorym mamy
  1. <h3>Index</h3>
  2. <?php echo $text; ?>

Rezultaty tego widzisz na ekranie

To jest prosty krzyklad jezeli chcilabym tam np wydobyc newsy to np robisz tak
model/news.php
  1. <?php
  2. class News extends Model {
  3. /**
  4.  * Uruchomienie Modelu, analiza danych
  5.  *
  6.  * @return unknown
  7.  */
  8. public function Perform() {
  9. $sSql = 'Select * From `news`';
  10. $rQuery = mysql_query( $sSql );
  11. $aNews = array();
  12. while( $a = mysql_fetch_assoc( $rQuery ) ) {
  13.  $aNews[] = $a;
  14. }
  15. $this->AssignByRef( 'aNews', $aNews );
  16. return true;
  17. }
  18. } 
  19. ?>


Teraz zgodnie z zalozeniami robimy takie cos, nie wybieramy w modelu szablonnu (mozemy to zrobic poprzez danie $this->sTemplate = 'jakis_plik.tpl' wtedy odpalony zostanie templates/jakis_plik.tpl)
Wiec toworzymy plik templates/news.tpl

i w nim np
  1. <?php foreach( $aNews As $iKey => $aVal ) { ?>
  2.  
  3. Autor: <?php echo $aVal['autor']; ?><br />
  4.  
  5. <?php } ?>

i mamy w wyswietlanie newsa smile.gif

Oczywiscie do Widoku mozna podpiac np smarty wtedy szablony beda jeszcze prostrze smile.gif
ens0re
Dzieki za info smile.gif
Vomit
Hm, jaka jest zasadnicza ronizca miedzy polem private a protected?
scanner
Zacznij od: http://pl.php.net/manual/pl/language.oop5.visibility.php
hwao
Cytat(Vomit @ 2006-02-25 23:52:37)
Hm, jaka jest zasadnicza ronizca miedzy polem private a protected?

private/protect "widzi się" (ma sie dostep) tylko w klasie (w przeciwienstwie do public). Rożnica miedzy nimi jest taka ze private widzisz tylko w tej klasie gdzie jest zdeklatowane a klasa dziedziczaca nie ma juz do niej dostepu, w protected klasy dziedziczace maja do niej dostep.

Tak jak napisal Scanner masz wiecej na ten temat w tym linku\ i nie potrzeba znajomosci specjalnej angielskiego, wystarczy przyklad
Vomit
Ok, dzieki. Wyczytałem wszystko czego nie wiedzialem.

PS. Hwao: czemu zastosowales tutaj Singleton?
sf
Cytat(Vomit @ 2006-02-26 11:42:43)
Ok, dzieki. Wyczytałem wszystko czego nie wiedzialem.

PS. Hwao: czemu zastosowales tutaj Singleton?

To chyba oczywiste, że żądanie jest jedno. Więc powinien być jeden obiekt. Jak sobie wyobrażasz stworzenie dwócyh obiektów, które operują na $_GET ? Zwłaszcza jeśli zrobusz unset($_GET) ... to kolejny obiekt do czego się odwoła? Do pustej tablicy? tongue.gif
hwao
Dokładnie dlatego jak powiedział sf smile.gif

Request w php jest jeden (czyli wysyłanie zadania do serwera-najczęściej Apache), nie tak jak w innych językach, typu c++ gdzie aplikacja pracują cały czas.

Dlatego za stosowne uważam użycie Singleton'u w całym systemie jest jedna żądanie wiec i obiekt powinien być jeden, dodatkowym plusem jest łatwość do jego dostępu, lecz i tu się spotyka rożne opinie. Niektórzy uważają że lepiej jest przekazywać Request jaka jakaś właściwości, w jakimś obiekcie, dzięki temu trafia zawsze tam gdzie jest potrzeby do użycia (w praktyce).

Z własnego doświadczenia przypuszczam, że jakbym obiekt był możliwy do utworzenia przez new WebRequest co mniej doświadczeni użytkownicy po prostu by tworzyli za każdym razem nowa instancje obiektu co mija sie z celem, a Singleton wymusza poprawną. smile.gif
Vomit
WebRequest to jest to samo co httpRequest?
aleksander
na to wygląda=] ale hwacz musial sie wygryzc i nazwac to inaczej:P
hwao
Cytat(Vomit @ 2006-02-26 15:34:01)
WebRequest to jest to samo co httpRequest?

Tak "to samo"

Cytat
na to wygląda=] ale hwacz musial sie wygryzc i nazwac to inaczej:P

httpRequest to wiecej liter od WebRequest pozatym lepiej chyba zapamietac WebRequest pozatym -> WebController wiec analogicznie mamy request Web, do konsoli mozna dopisac ConsoleRequest i ConsoleController
Vomit
hwao: moglbys pokazac jakis przykład z akcja a nie tylko z modelem. Bede bardzo wdzieczny.
hwao
Cytat(Vomit @ 2006-02-26 17:18:18)
hwao: moglbys pokazac jakis przykład z akcja a nie tylko z modelem. Bede bardzo wdzieczny.

jak tylko znajde chwile to dopisze obsluge akcji.
Strzałek
O hwao widzę szpanuje swoim cackiem.

Jak będę w domu to oblokam, teraz jestem odcięty od net'a sad.gif

btw: Repository - dokładnie taki sam projekt mam u mnie na kompie - zbarałeś mi pomysł tongue.gif tongue.gif tongue.gif snitch.gif snitch.gif

edited

eeeeee, to nie ten WF co myślałem. Nie doczytałe do końca tongue.gif
eh tongue.gif
TomASS
Dzięki Hwao, mam zamiar zabrać się za frameworki i obcykać z czym to się 'je'. Twój FrameWork, jest (chyba) prościutki do zrozumienia, więc się za niego zabrałem.

Jeśli dobrze skumałem, to działa on mniejwięcej tak:
1. Uruchamiamy plik index.php
2. W nim tworzymy WebController:
  1. <?php
  2.  
  3. $Application = new WebController();
  4.  
  5. ?>

3. Gdy dajemy:
  1. <?php
  2.  
  3. $Application->Execute();
  4.  
  5. ?>

Min. tworzy nam się "model":
  1. <?php
  2.  
  3. $Model = new $this->sAction();
  4.  
  5. ?>

4. w nim "szykuje się" template:
  1. <?php
  2.  
  3. $this->sTemplate = strtolower( get_class( $this ).'.tpl' );
  4.  
  5. ?>

5. Gdy dajemy:
  1. <?php
  2.  
  3. $Application->Display();
  4.  
  5. ?>

To wczytujemy plik tpl i "wypełniamy" go.



Mam kiklka pytań:
1. Co nam daje stala SECURITY:
  1. <?php
  2. if( !defined( 'SECURITY' ) ) {
  3. die( 'SECURITY' );
  4. }
  5. ?>

2. Co to jest w WebControl.:
  1. <?php
  2. public function & Display( $bReturn = false ) 
  3. ?>

Chodzi mi tutaj o:
A: & przed Dispaly
B: $bReturn = false jako paramert

3. Po co jest:
  1. <?php
  2. include $sTemplate;
  3. return ob_get_contents();
  4. ?>

Nie mogło by być same:
  1. <?php
  2. include $sTemplate;
  3. ?>


Wielkie dzięki za roziwanie wątpliwości smile.gif
dr_bonzo
Moze nie jestem hwao ale znam kilka odpowiedzi tongue.gif

Cytat
1. Co nam daje stala SECURITY:

Z tego o pamietam to jest tylko po to zeby nie otwierac pozostalych plikow *.php w przegladarce (SECURITY jest definiowane w index.php, taki old skulowy trick smile.gif), ale jest to niepotrzebne gdy caly skrypt jest uruchamiany $app->execute a w pozostalych *.php nie ma zadnego kodu poza definicjami klas (i ew. stalych). A jak przerzucisz te pozostale *.php do katalogu poza DocumentRoot to tez nie masz problemu.


  1. <?php
  2.  
  3. public function & Display( $bReturn = false ) {
  4. $sTemplate = DIR_TPL.'/'.$this->sTemplate;
  5.  
  6. if( file_exists( $sTemplate ) ) {
  7. if( $bReturn == false ) {
  8. extract( $this->aVars );
  9. include $sTemplate;
  10. }
  11. else {
  12. include $sTemplate;
  13. return ob_get_contents();
  14. }
  15. }
  16.  
  17. ?>

Cytat
A: & przed Dispaly
Oznacza to ze funkcja zwraca referencje do obiektu/zmiennej a nie sama jej wartosc >> szczegoly w manualu.

Cytat
B: $bReturn = false jako paramert

jesli $bReturn === true to funkcja zwroci ci szablon, jesli false to tylko go wyswietli (tak jak w smarty: fetch/display; moglem nazwy pomylic bo z rok go nie uzywalem smile.gif)


A ja sie przyczepie do kodu
  1. <?php
  2. if( $bReturn == false ) {
  3. ...AAA
  4. }
  5. else {
  6. ..BBB
  7. }
  8. ?>

nie prosciej (mniej kodu i bardziej naturalne)
  1. <?php
  2. if( $bReturn ) {
  3. ...BBB
  4. }
  5. else {
  6. ..AAA
  7. }
  8. ?>

?
hwao
Postaram sie to bardziej dopracowac, dodac obsluga akcji i z tego co pamietam to bardzo uboga byla tam obsluga modeli i widoku + brak akcji.

Jak tylko znajde to troche czasu, to napisze i przedstawie tutaj kod.

Co do WF narazie nie udostepniam zrodel.

dr_bonzo dobrze odpowiedzial na pytania.
splatch
  1. <?php
  2. public function & Display( $bReturn = false );
  3. ?>

Ten kod spowoduje wyświetlenie błędu i i tak nie zwróci referencji.. dlaczego? Referencja wskazuje na obszar pamięci zadeklarowany już dla jakiejś zmiennej - czyli działa ona tylko na zmiennych.. i dlatego nie zadziała tutaj:
Funkcja zwraca void (null) jeśli nie ma szablonu.
W przypadku kiedy return = false zwracane jest void (null).
Jeśli funkcja ma zwrócić wartość - jest ob_get_contents() - funkcja.
Tak na prawdę to & nic nie daje, jest hm.. dla picu.
hwao
@splatch w php 5.1 wywala error jak cos ma & a nie zwraca referecji, skad ten znaczek bo ta metoda miala isc pod rozbudowe ale niestety nie starczylo czasu... w nastepnej wersji bedzie tam dodane pare "trick'ów"
Strzałek
Cytat
Dzięki Hwao, mam zamiar zabrać się za frameworki i obcykać z czym to się 'je'. Twój FrameWork, jest (chyba) prościutki do zrozumienia, więc się za niego zabrałem.


Zainteresuj się Cake. To dobry framework mvc.
A to co hwao przedstawił to prosta rzecz do prostych rozwiązań winksmiley.jpg
MagnuM
Prosiłbym o informację czy 'projekt' jest jeszcze rozwijany ? Byłbym zainteresowany ;-)

[scanner] Następnym razem proszę użyć PW.
hwao
Tak jest rozwijany, juz powstała 3 wersja
Turgon
Ja nigdzie nie widzę nowych źródeł.
hwao
Źródeł narazie nia mam czasu udostępnić, tzn o tyle ile udostępnić moge to bez opisania ich nie wiem czy dało by sie co kolwiek zrozumiec smile.gif

Troche bardziej rozbudowany jest niz pierwsza wersja, pisałem na nim sklep internetowy i roznego rodzaju strony.
MagnuM
Ja nalegam... chociażby bez opisywania.
Turgon
O to wrzucaj hwaosz...
tuner
Cytat(Turgon @ 1.08.2006, 18:12:47 ) *
O to wrzucaj hwaosz...
Przyłączam się do prośby Pana Turgona smile.gif Chętnie zobaczę kolejną wersję tego małego frameworka.
hwao
Akurat ftp mi siadl, ale jak tylko powstanie to wrzuce i dam linka.

Swoja droga to kod juz nie jest taki malutki, ale pare projektow na nim powstało. Wrzuce tutaj 3cia wersje z ktorej korzystałem. Aktualnie pracuje nad nowa, juz 4 wersja ale to nadal dopiero dev w fazie rozwoju.

Och, chyba zrobimy inaczej - inny ftp smile.gif

Niestety aktualnie nie mam dostepu do wersji z wszyskimi dodatkami (DataGrid, ect) ale mysle ze do projktow wystarczy tyle.

http://hwao.netstrefa.com.pl/repo/WindForc...mework3.0.0.zip

Kod nie do konca idealny (raczej wlaczyc sie nie wlaczy, poniewaz nie przygotowalme pod to przykladu, ale widac co mniej wiecej jak dziala).


Kod był na początku pisany żeby pokazać początkującym, ale okazało się że jest na tyle dobry że można go użyć do większości projektów i trochę go rozbudowałem.
Turgon
Ciekawe. Przejrzałem źródła i zastanawiam się dlaczego router jest pusty.

Przejżenie go dostarczyło mi inspiracji przy pisaniu swojego FrameWorka. smile.gif .
hwao
Stwierdzilem ze sie nie przyda w tamtym projekcie. Mialem go dopisac ale radzilem sobie bez niego (wiec poco dodawac kolejna bez uzyteczna rzecz:) ).

W aktualnej wersji w Routerze jest tylko metoda odpowiedzialna za pasrowanie request'u (pobieranie info jaki kontroler i akcja) i generowanie linkow (praktycznie nie uzywane, poniewaz nie potrzebnuje - ew, bede pisal filtr podczas komplilacji szablonu).
Turgon
Po co ci przy kompilacji szablonu ?
hwao
Jest tam smarty poniewaz moj autorski system szablonow jest nadal testowany, a podmiana to kwestia paru chwil. smile.gif

W tym projeckie wowalem stosowac system szablonow, w aktualnym nie widze takiej potrzeby
Turgon
Hmmm... Odbiegając troche od tematu, bo sam piszę frameworka i zastanawiam sie nad implementację systemu szablonów. Co o tym myślisz ?
Ja myślę nad klasą abstrakcyjną View pod którą podpinam system szablonów.
I jest jeszcze sprawa kompilacji jego... Jak skrypt dowie się jak go skompilować i kiedy i który szablon. Jakieś pomysły ?
ARJ
@hwao mógłbyś podać jakieś proste wykorzystanie twojego frameworka. coś co by poprostu zaprezentowało co jak działa. proszę o to ponieważ zacząłem pisać własnego frameworka i już na poczatku wysiadłem. przeczytałem atykuł Frameworki dla php i z jego natchnienia napisałem bardzo podobny front controller do tego z artykułu. jednak teraz pojawia się problem ponieważ nie mam logicznie ułożonego działania reszty aplikacji. może twój framework mi wytłumaczy jak to ma działać, tylko sam kod bez przykładu użycia jakoś mi niewiele mówi smile.gif
Prph
Cytat(Turgon @ 2.09.2006, 06:57:54 ) *
Hmmm... Odbiegając troche od tematu, bo sam piszę frameworka i zastanawiam sie nad implementację systemu szablonów. Co o tym myślisz ?
Ja myślę nad klasą abstrakcyjną View pod którą podpinam system szablonów.
I jest jeszcze sprawa kompilacji jego... Jak skrypt dowie się jak go skompilować i kiedy i który szablon. Jakieś pomysły ?


Widok w MVC warto zrobic tak jak mowisz... Zwyczajnie tworzysz klase View, ktora ma odpowiednie metody. Chyba najwazniejsze, to:

1. setTemplate($sTemplate),
2. fetch(),
3. display(),
4. set($sParam, $mValue),
5. get($sParam).

Wazne jest (moim zdaniem), aby widok nie dziedziczyl np. ze smarty bezposrednio. No chyba ze odpowiadaja Ci oryginalne metody takie jak display() ze smarty.

Nie bylbym soba, gdybym nie powiedzial, ze czyste szablony php sa wygodne, najszybsze, a klasa obslugujaca taki szablon zajmuje kilkadziesiat linii kodu.

W zasadzie ukonczylem swoj framework Rapide. Postaram sie zamiescic niebawem kod.

Adrian.
Turgon
Słuszna uwaga. Po prostu chyba zrobie własny prosty i szybki system szablonów w php.
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-2024 Invision Power Services, Inc.