Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Surowe szablony, zapraszam do dyskusji
R4D3K
post
Post #1





Grupa: Zarejestrowani
Postów: 144
Pomógł: 12
Dołączył: 16.03.2007

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


Witam, chciałbym wszystkich zainteresowanych koderów zaprosić do dyskusji oraz uchylenia rąbka swojego fachu. Otóż odkąd zacząłem programować według wzorca MVC zacząłem myśleć o systemie szablonów. Na początku stworzyłem własną klasę, bazująca na wyrażeniach regularnych pcre, która parsowała dokument html w poszukiwaniu zmiennych,bloków itp i je podmieniała. Później wpadłem na odkrywczy fakt że po co odkrywać koło na nowo i zacząłem stosować smarty, w między czasie liznąłem trochę OPT. Jednak pewnego pięknego dnia natrafiłem na artykuł Pana W.Gajdy:
http://www.internetmaker.pl/artykul/2920,1...rezentacji.html
, otworzyłem swoje szablony i rzeczywiście okazało się, że powrót do "czystego PHP" to jest to !
Tylko według tej koncepcji znacznie uprościłem swój kod:
  1. <?php
  2. class main {
  3.    protected $model;
  4.    protected $zalogowany;
  5.    protected $leftcolumn;
  6.    protected $rightcolumn;
  7.    protected $cache_time=3600;
  8.    private $przykladowy_tekst;
  9.  
  10.    public function __construct() {
  11.  
  12.    }
  13.  
  14.    public function cache($template) {
  15.        if ((file_exists('./template_c/'.$template))&&(fileatime('./template_c/'.$template)>(time()-$this->cache_time))) {
  16.            $page=file_get_contents('./template_c/'.$template);
  17.        }
  18.        else {
  19.            ob_start();
  20.            include('./template/'.$template);
  21.            $page=ob_get_contents();
  22.            file_put_contents('./template_c/'.$template, $page);
  23.            ob_clean();
  24.        }
  25.        return $page;
  26.    }
  27.  
  28.    public function action() {
  29.        $this->przykladowy_tekst='Witaj świecie !';
  30.        echo $this->cache('main.php');
  31.    }
  32. }
  33. ?>

i właśnie tutaj stanąłem, bo nie wiem jak i czy wogle dalej dobrze myślę...otóż:
1.) jak tutaj zrobić dynamicznie ładowaną treść ? dać w sekcji <?php include($x); ?> i w zależności od danego żądania odpowiednio nadawać wartość $x ?
2.) Czy obsługę tak prostego systemu szablonów pisać w osobnej klasie i przesyłać dane metodą assign jak w smartym ? czy lepiej od razu zrobić to w kontrolerze 1-2 metody które ładują szablon cachują i tyle,a sam system szablonów to po prostu zapisane pliki .php z kodem HTML i wstawkami jak w tym artykule ?

Prosiłbym o jakiś przykładowy kod jeśli ktoś zechce się z nim podzielić

Ten post edytował R4D3K 13.07.2009, 21:37:58
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Zyx
post
Post #2





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Logika systemu szablonów osobno, szablony osobno. Popatrz sobie na Zend_View w ZF-ie, jak jest to rozwiązane.

A przy okazji polecam jeszcze taki tekst: http://www.zyxist.com/pokaz.php/uzyteczne_systemy_szablonow . Jakiś czas temu musiałem wrócić do szablonów PHP w jednym projekcie i to była masakra, szczególnie gdy przyszło budować formularze. Prawda jest taka, że 90% systemów szablonów po prostu reimplementuje PHP i powiela jak kalkę wszystkie jego wady i zalety, jednak nie znaczy to, że tak musi być zawsze, bo PHP nie ma monopolu na "jedyność słuszność".


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
aart3k
post
Post #3





Grupa: Zarejestrowani
Postów: 72
Pomógł: 10
Dołączył: 2.02.2008
Skąd: Kraków

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


To ja tylko opowiem jak to jest w ZF.
Kontroler posiada takie pole co się zowie "view"
Wszystkie dane do view przekazuje się bezpośrednio jako pola tego wg schematu
$this->view->jakiesdane = "dane";

Potem dopiero Zend_View wg. określonego adaptera wywołuje skrypty phtml, które są właśnie esencją "powrotu do czystego php". Takie podejście jest w miarę OK, tylko wkurza nadmiarowość literek, ale można sobie przecież napisać funkcję ułatwiającą życie we własnym rozszerzeniu kontrolera winksmiley.jpg
Go to the top of the page
+Quote Post
R4D3K
post
Post #4





Grupa: Zarejestrowani
Postów: 144
Pomógł: 12
Dołączył: 16.03.2007

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


Za Twoja namową Zyx poczytałem na temat Zend_View, i mniej więcej wiem jak to tam wygląda, jednak mam pytanie dotyczące Zend_Layout, otóż jak udało mi się dowiedzieć klasa ta służy do stworzenia kontenera strony www, czyli nagłówek+stopka:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4. <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  5. <title><?php echo $this->escape($this->title); ?></title>
  6. <link rel="stylesheet" type="text/css" media="screen"
  7. href="<?php echo $this->baseUrl;?>/public/styles/style.css" />
  8. </head>
  9.  
  10. <div id="content">
  11. <?php echo $this->layout()->content; ?>
  12. </div>
  13. </body>
  14.  
  15. </html>

dzięki takiemu rozwiązaniu do każdego naszego szablonu nie musimy już includować nagłówka i stopki itp. I moje pytanie jak to jest zaimplementowane (podejrzewam że zapewni dzięki metodom magicznym typu __call, ale mogę się mylić) , czy ktoś mogłbym mi słownie najlepiej kodem) pokazać jak ta metoda działa ?
Skoro szablon poprostu jest includowany (wtedy działa konstrukacja typu echo $view->zmienna), to czy tutaj jest to też zastępowane przez proste include ? czy wczytuje ten content i jakoś sprytnie podczas renderu jest to wklejane ?

Ten post edytował R4D3K 14.07.2009, 15:49:20
Go to the top of the page
+Quote Post

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 - 09:05