Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> "Rekurencyjny" system layout'ów.
mayu11
post 15.04.2012, 11:22:04
Post #1





Grupa: Zarejestrowani
Postów: 99
Pomógł: 9
Dołączył: 9.09.2008

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


Witam. Na początek.. opiszę swój problem, mianowicie - chciałbym zrobić coś takiego:

Plik - index.html
  1. <head>
  2. <title>[TITLE]</title>
  3. </head>
  4. <body>
  5. {BODY}
  6. </body>
  7. </html>


Plik - body.html
  1. {HEADER}
  2. <div id="wrapper">
  3. <div id="menu_top">
  4. [MENU_TOP]
  5. </div>
  6. <div id="content">
  7. [CONTENT]
  8. </div>
  9. <div id="menu_right">
  10. [MENU_RIGHT]
  11. </div>
  12. </div>


Plik - header.html
  1. <div id="title">[TITLE]</div>


Na początek do kodu php chciałbym załadować tylko index.html, a następnie użyć jakąś rekurencyjną funkcję, która podstawi pod wszystkie [] - zmienne, a {} - zawartości plików ".html". I chciałbym by ładowało się to NIEZALEŻNIE od struktury tych plików. Czyli gdy dopiszę do index'u np. "{plik2}" to zostanie on automatycznie załadowany.

Póki co myślałem nad czymś takim:
  1. <?php
  2.  
  3. $D['Content'] = file_get_contents('templates/index.html');
  4.  
  5. while(preg_match('/\{[a-zA-Z0-9]\}/i', $D['Content']))
  6. {
  7. // I tutaj jakoś odwołać się do "preg_replace_callback", czy jakoś tak.
  8. }
  9.  
  10. ?>


Jakieś pomysły?

Jakieś pomysły?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
d3ut3r
post 15.04.2012, 11:58:55
Post #2





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


Za pomocą file_get_contents pobierasz zawartość pliku body.html a później znacznik {BODY} zamieniasz na to co wczytasz z pliku.

czyli np wyszukujesz wszystkie znaczniki ograniczone znakami {} do tego co jest w środku dopisujesz ".html" i masz nazwę pliku, plik wczytujesz i podmieniasz znacznik.


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
sebastian.rozmus
post 15.04.2012, 11:59:25
Post #3





Grupa: Zarejestrowani
Postów: 48
Pomógł: 12
Dołączył: 7.03.2012

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


Najprostsze rozwiązanie to najpierw posklejanie wszystkiego do 1 zmiennej. Jak wspomniałeś możesz to zrobić za pomocą preg_replace_callback - wrzucasz wyrażenie regularne które zbiera Ci wszystkie znaczniki, a jako callback wrzucasz funkcję która zwraca zawartość pliku. Potem zmieniasz w tej zmiennej [var] na zmienne. Możesz użyć tej samej funkcji.

Można się pobawić z funkcją eval, ale to już trzeba zabezpieczyć na 4 spusty.

Jeśli chodzi o sam pomysł, to nie jest on zbyt optymalny. Musiałbyś pomyśleć nad jakimś cachowaniem. Jeśli natomist nie radzisz sobie z rozwiązaniem bez cachowania to mogą zacząć się schody. Od biedy możesz skorzystać ze starego zniesławionego smarty lub innego systemu szablonów. Przedewszystkim zastanów się czy napewno system szablonów jest Ci niezbędny i czy nie niesie samych minusów w Twoim przypadki. Zadaj sobie pytanie jak często będzie zmieniany szablon, czy nie lepiej będzie zrobić to w PHP (pliki *.phtml) ?
Go to the top of the page
+Quote Post
maniana
post 15.04.2012, 21:39:30
Post #4





Grupa: Zarejestrowani
Postów: 207
Pomógł: 44
Dołączył: 18.05.2007

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


  1. function setTags($t) {
  2. global $zmienne;
  3. return 'znalazłem '.$t.' i zawiera ona wartość: '.$zmienne[$t];
  4. }
  5. function replaceTags($txt) { // Wyłapuje ciąg znaków w { i }
  6. return preg_replace("/{([^}]+)}/e", "setTags('\\1')", $txt);
  7. }
  8.  
  9. include ( 'test.tpl' );
  10. $wynik = ob_get_contents();
  11.  
  12. $zmienne = array(
  13. 'template'=>'xXx'
  14. );
  15.  
  16. echo replaceTags($wynik);
test.tpl
  1. <h1>To jest {template}</h1>
To taki przykład dla zamiany zmiennych w {} dla tagów [] piszesz drugą funkcję i za pomocą ob_start i include dołączasz pliki jako zmienna.

Ten post edytował maniana 15.04.2012, 21:42:17
Go to the top of the page
+Quote Post
prachwal
post 16.04.2012, 10:52:39
Post #5





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 13.03.2009
Skąd: lublin

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


ja korzystam z PHPTal-a i jestem zadowolny
http://phptal.org/manual/en/split/metal-use-macro.html
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 Wersja Lo-Fi Aktualny czas: 18.06.2025 - 15:53