Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]szablon z pliku php
sazian
post
Post #1





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


wpadłem na pewien sposób tworzenia szablonów i chciałbym wiedzieć co o tym myślicie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
oczywiście to co tu prezentuję to wersja "robocza" tylko taki zarys (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

plik główny
  1. <?php
  2. class tpl {
  3.    public $strona;
  4.    public function __construct($file,$parm=array()){
  5. foreach($parm as $key =>$value)
  6. $$key=$value;
  7. include('template/'.$file.'.php');
  8. $this->strona= $result;
  9.    }
  10. }
  11. $tpl = new tpl('head',array('tytul'=>'to jest typyl strony z szablonu','tresc'=>'a to jest tresc strony z szablonu'));
  12. echo $tpl->strona;
  13. ?>
szablon (template/head.php)
  1. <?php
  2. $result= <<<HTML
  3. <html>
  4. <head>
  5.  
  6. <title> $tytul </title>
  7. </head>
  8.  
  9.     <body>
  10.   $tresc
  11.     </body>
  12.  
  13. </html>
  14. HTML;
  15.  
  16. ?>
mam nadzieję że wszystko jest jasne
Powód edycji: [erix] przeniosłem
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
l0ud
post
Post #2





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

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


Twój kod nie nada się do niczego (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) - nie wstawisz pętli, warunków itp. Jak chcesz w sposób prosty do bólu oddzielić wygląd, możesz zrealizować to w mniej-więcej taki sposób:

views.php
  1. <?php
  2.  
  3. class view {
  4.  
  5.    private $viewName;
  6.    private $contents = array();
  7.    
  8.    public function __construct($viewName) {
  9.        //można w konstruktorze przekazać też np. instancję klasy języka, konfiguracji (do wykorzystania globalnie w szablonie)
  10.        if (file_exists('sciezkadofolderuszablonow/'.$viewName.'.php') === false)
  11.            throw new Exception('Could not load view, file not exists: '.$viewName);
  12.        $this->viewName = $viewName;
  13.    }
  14.    
  15.    public function __get($name) {
  16.        if (isset($this->contents[$name]))
  17.            return $this->contents[$name];
  18.        else return null;
  19.    }
  20.    
  21.    public function __set($name, $value) {
  22.        $this->contents[$name] = $value;
  23.    }
  24.    
  25.    public function render() {
  26.        if (!include('sciezkadofolderuszablonow/'.$this->viewName.'.php'))
  27.            throw new Exception('Could not load view: '.$this->viewName,3);
  28.    }
  29.    
  30.    public function __toString() {
  31.        ob_start();
  32.        $this->render();
  33.        $output = ob_get_contents();
  34.        ob_end_clean();
  35.        return $output;
  36.    }
  37.    
  38.    //można porobić jakieś ułatwienia
  39.    
  40.    public function img($name) {
  41.        return 'ścieżkadofolderuimg/'.$name;
  42.    }
  43.    
  44.    public function js($name) {
  45.        return 'ścieżkadofolderujs/'.$name.'.js';
  46.    }
  47.    
  48.    public function css($name) {
  49.        return 'ścieżkadofolderucss/'.$name.'.css';
  50.    }
  51. }
  52.  
  53. ?>


przyklad.php
  1. <?php
  2. require('views.php');
  3.  
  4. $szablon_glowny = new view('glowny');
  5. $szablon_glowny->logo = new view('logo');
  6. $szablon_glowny->logo->tekst = 'Tresc w logo itd.';
  7.  
  8. $szablon_glowny->render();
  9. //albo
  10. //echo $szablon_glowny;
  11. ?>


sciezkadofolderuszablonow/glowny.php
  1. To jest szablon glowny. Moze byc tu kod html i kod php (ale odpowiedzialny tylko za wyswietlanie)
  2.  
  3. <?php echo $this->logo; ?>

sciezkadofolderuszablonow/logo.php
  1. To jest szablon z logo. Tekst to: <?php echo $this->tekst; ?>


Takie szablony mają jednak taką wadę, że łatwo w nich namieszać. Koniecznie trzeba przyjąć zasadę aby kod w szablonie był odpowiedzialny tylko za wygląd. Pobieranie jakichkolwiek danych to pomyłka. Skrypt który tworzy obiekt tego szablonu musi zająć się np. przekazaniem mu tablicy z wynikami, które już w szablonie możesz wyświetlić za pomocą pętli.
Go to the top of the page
+Quote Post
sazian
post
Post #3





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


Cytat(l0ud @ 14.04.2009, 19:32:47 ) *
Twój kod nie nada się do niczego (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) - nie wstawisz pętli, warunków itp. Jak chcesz w sposób prosty do bólu oddzielić wygląd, możesz zrealizować to w mniej-więcej taki sposób:


wstawiłem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
  1. <?php
  2. $result= <<<HTML
  3. <html>
  4. <head>
  5.  
  6. <title> $tytul </title>
  7. </head>
  8.  
  9.     <body>
  10.   $tresc
  11. HTML;
  12. for($i=0;$i<10;$i++){
  13.    $result.=<<<HTML
  14.     i=$i<br />
  15. HTML;
  16.    
  17. }
  18.  
  19. $result.=<<<HTML
  20.   
  21.     </body>
  22.  
  23. </html>
  24. HTML;
  25.  
  26.  
  27. ?>

przecież to plik php więc ma pełną funkcjonalność php
co prawda dodawanie fętli czy instrukcji warunkowych jest nieco utrudnione przez konieczność dodawania $result.=
zrobiłem tak poniewarz chciałem mieć możliwość wczytania wyniku do zmiennej

edit:
a mógłby mi ktoś powiedzieć w czym jest lepsze <?php echo $this->tekst; ?> od mojego rozwiązania (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) oczywiście nie chodzi mi o odpowiedzi typu bo to głupi pomysł tylko o jakieś wyjaśnienie dlaczego to głupi pomysł

Ten post edytował sazian 14.04.2009, 19:02:35
Go to the top of the page
+Quote Post

Posty w temacie
- sazian   [PHP]szablon z pliku php   14.04.2009, 16:24:03
- - Moli   Hmmm a po co to ? Strasznie tandetny pomysl, stras...   14.04.2009, 17:31:19
- - Zyx   Ja też wpadłem na pewien pomysł tworzenia szablonó...   14.04.2009, 17:44:48
- - sazian   w założeniach miał to być jak najprostszy "sy...   14.04.2009, 18:05:53
- - l0ud   Twój kod nie nada się do niczego - nie wstawisz p...   14.04.2009, 18:32:47
|- - sazian   Cytat(l0ud @ 14.04.2009, 19:32:47 ) T...   14.04.2009, 19:00:11
- - guitarnet.pl   http://www.massassi.com/php/articles/template_engi...   14.04.2009, 19:08:49
- - l0ud   sazian, zrobiłeś jedną pętlę i już wygląda paskudn...   14.04.2009, 20:03:26
- - sazian   no fakt wygląda paskudnie ale działa teraz gdy t...   14.04.2009, 20:08:37
- - guitarnet.pl   @l0ud kolega guitarnet.pl nie nazywa sie Brian Loz...   14.04.2009, 20:17:46
- - l0ud   Oj, chyba nie zrozumiałeś mojego posta ...   14.04.2009, 20:54:26
- - guitarnet.pl   zrozumialem ze "kolega guitarnet.pl" zap...   14.04.2009, 21:01:27
- - Zyx   Tak, są zastrzeżenia. Prosiłem, byś się przyjrzał ...   15.04.2009, 14:03:22
- - guitarnet.pl   twierdzisz ze 15kB skrypt nie moze zarezerwowac 50...   15.04.2009, 15:49:32
- - Zyx   Bardzo dziwnych twierdzeń się doczyta...   16.04.2009, 09:35:48
- - guitarnet.pl   Cytattak naprawdę jedyne usprawnienie wydajności, ...   16.04.2009, 13:35:05
- - Cysiaczek   Panowie - to nie miejsce na dyskusje. Są od tego t...   16.04.2009, 13:47:46
- - Kildyt   Kombinujecie jak koń pod górkę. IMHO zwykły includ...   16.04.2009, 21:01:15


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

 



RSS Aktualny czas: 24.12.2025 - 13:51