Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Parser szablonów
akurczyk
post
Post #1





Grupa: Zarejestrowani
Postów: 201
Pomógł: 5
Dołączył: 15.07.2008
Skąd: Kłodzko

Ostrzeżenie: (10%)
X----


Napisałem coś takiego:
  1. <?php
  2. $szablon = file_get_contents("szablon.html");
  3. preg_match("#{newsy}(.*?){/newsy}#si", $szablon, $znalezione);
  4. $tablica[0]["tytul"] = "Pierwszy news";
  5. $tablica[0]["tresc"] = "Treść pierwszego newsa";
  6. $tablica[1]["tytul"] = "Drugi news";
  7. $tablica[1]["tresc"] = "Treść drugiego newsa";
  8. $tablica[2]["tytul"] = "Trzeci news";
  9. $tablica[2]["tresc"] = "Treść trzeciego newsa";
  10. foreach($tablica as $wartosc) {
  11.    $temp = str_replace("{tytul}", $wartosc["tytul"], $znalezione[1]);
  12.    $newsy_array[] = str_replace("{tresc}", $wartosc["tresc"], $temp);
  13. }
  14. $newsy = join("", $newsy_array);
  15. $szablon = preg_replace("#{newsy}(.*?){/newsy}#si", $newsy, $szablon);
  16. echo $szablon;
  17. ?>


Szablon:
  1. <title>Newsy</title>
  2. </head>
  3. {newsy}
  4. <h2>{tytul}</h2>
  5. <p>{tresc}</p>
  6. {/newsy}
  7. </body>
  8. </html>


Wydaje mi się że jest to nieoptymalene, i nieprofesjonalnie napisane. Proszę o jakieś sugestje. Co powinienem w tym zmienić??
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%)
-----


Istota działania jest zła. Systemy szablonów które tworzą swój nowy język (jak smarty) to przeszłość. Zrezygnuj z szablonów tego typu, a zastąp to czystym PHP, tylko odpowiednio oddzielonym:

index.php
  1. <?php
  2.  
  3. include('views.php');
  4.  
  5. $tablica[0]["tytul"] = "Pierwszy news";
  6. $tablica[0]["tresc"] = "Treść pierwszego newsa";
  7. $tablica[1]["tytul"] = "Drugi news";
  8. $tablica[1]["tresc"] = "Treść drugiego newsa";
  9. $tablica[2]["tytul"] = "Trzeci news";
  10. $tablica[2]["tresc"] = "Treść trzeciego newsa";
  11.  
  12. $szablon = new view('szablon');
  13.  
  14. $szablon->news = $tablica;
  15.  
  16. $szablon->source = new view('szablon');
  17. $szablon->source->news = $tablica;
  18.  
  19. echo $szablon;
  20.  
  21. ?>


views.php
  1. <?php
  2.  
  3. define('VIEWS_DIR','szablony/');
  4. define('PHP_EXT','.php');
  5.  
  6. class view {
  7.  
  8.    private $viewName;
  9.    private $contents = array();
  10.    
  11.    public function __construct($viewName) {
  12.        if (file_exists(VIEWS_DIR.$viewName.PHP_EXT) === false)
  13.            //obsługa błędu - przykładowa - można zmienić na wyjątek etc.
  14.            exit('Plik szablonu nie istnieje');
  15.        $this->viewName = $viewName;
  16.    }
  17.    
  18.    public function __get($name) {
  19.        if (isset($this->contents[$name]))
  20.            return $this->contents[$name];
  21.        else return null;
  22.    }
  23.    
  24.    public function __set($name, $value) {
  25.        $this->contents[$name] = $value;
  26.    }
  27.    
  28.    public function render() {
  29.        if (!include(VIEWS_DIR.$this->viewName.PHP_EXT))
  30.            //obsługa błędu
  31.            exit('Błąd dołączania szablonu');
  32.    }
  33.    
  34.    public function __toString() {
  35.        ob_start();
  36.        $this->render();
  37.        $output = ob_get_contents();
  38.        ob_end_clean();
  39.        return $output;
  40.    }
  41.    
  42. }
  43.  
  44. ?>


szablony/szablon.php
  1. <title>Newsy</title>
  2. </head>
  3. <?php foreach ($this->news as $news) { ?>
  4. <h2><?php echo $news['tytul']; ?></h2>
  5. <p><?php echo $news['tresc']; ?></p>
  6. <?php } ?>
  7. <hr>
  8. <p>Źródło:</p>
  9. <textarea rows="10" cols="50"><?php echo htmlspecialchars($this->source); ?></textarea>
  10. </body>
  11. </html>


Jest to chyba najprostszy przykład, jak to można zrobić, aby pracowało się wygodnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Szablony można zagnieżdżać (jak jest w przykładzie - zagnieżdżone jest generowanie źródła strony z szablonu i wstawianie go w textarea). W ten sposób możesz stworzyć całe drzewko szablonów reprezentujące stronę. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pamiętaj tylko, aby w szablonie zminimalizować ilość kodu PHP i zajmować się TYLKO wyświetlaniem danych podanych przez skrypt!

Ten post edytował l0ud 21.12.2008, 18:54:58
Go to the top of the page
+Quote Post

Posty w temacie
- akurczyk   Parser szablonów   21.12.2008, 18:19:21
- - Riklaunim   Napisz to w Javie to będzie bardzo profesjonalne ...   21.12.2008, 18:41:25
- - l0ud   Istota działania jest zła. Systemy szabl...   21.12.2008, 18:53:39
|- - Riklaunim   Cytat(l0ud @ 21.12.2008, 20:53:39 ) I...   21.12.2008, 19:07:16
- - akurczyk   A co z optymalnością mojego skryptu??   21.12.2008, 19:18:13
- - Riklaunim   Duży ruch ci raczej nie grozi, więc i trudno mówić...   21.12.2008, 19:28:38
- - l0ud   [PHP] pobierz, plaintext <?phpIMHO obecność jęz...   21.12.2008, 19:33:34
- - akurczyk   Jeszcze jedno: Załużmy że w szablonie mam: Kod...   21.12.2008, 19:44:27
|- - Riklaunim   Cytat(l0ud @ 21.12.2008, 21:33:34 ) W...   21.12.2008, 20:11:46
- - Crozin   [PHP] pobierz, plaintext <?php}?>[PHP] ...   21.12.2008, 20:26:17
- - akurczyk   @Crozin: Fajne rozwiązanie, spróbuję. Wrućmy do mo...   21.12.2008, 21:25:38
|- - Riklaunim   Cytat(akurczyk @ 21.12.2008, 23:25:38...   21.12.2008, 22:28:43
- - Mize   Jeślibyś używał czystego PHP w szablonach to byłob...   21.12.2008, 21:37:18
- - Mize   To co wyżej napisałem to był przykład, i chyba nie...   21.12.2008, 22:38:44
- - l0ud   Riklaunim, nikt nie miał na myśli całkowitego unik...   21.12.2008, 22:43:15
- - Riklaunim   CytatOk, piszesz że szablony są kompilowane do czy...   21.12.2008, 23:00:03
- - akurczyk   Zroiłem tak jak mi radziliście. Fajnie t...   21.12.2008, 23:03:59
- - Crozin   CytatBo jak np. pisałem firmowego CRMa to osoba od...   21.12.2008, 23:06:11
|- - Riklaunim   Cytat(Crozin @ 22.12.2008, 01:06:11 )...   21.12.2008, 23:35:38
- - akurczyk   POMOCY!!   21.12.2008, 23:18:29
- - erix   CytatMam problem, więcej w drugim zapytaniu (dzies...   21.12.2008, 23:31:25
- - akurczyk   Niema żadnego błądu, tylko niewiem co napisać zoba...   21.12.2008, 23:59:00
- - Riklaunim   Coś jakby musisz umieścić zapytania o fora z danej...   22.12.2008, 00:17:54
- - akurczyk   http://www.codemaster2222.yoyo.pl/skrypt.php - nie...   22.12.2008, 10:47:23
- - Riklaunim   Pomyśl trochę. Jeżeli pobiera wszystkie fora to zn...   22.12.2008, 12:35:00
- - akurczyk   Jak to ma działeć to ja wie, przecież jak robiłem ...   22.12.2008, 12:52:56
- - Riklaunim   Po wierszu z $zapytanie2 możesz dać $tab...   22.12.2008, 13:52:17


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: 4.10.2025 - 07:49