Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zasada działania systemu szablonu
Forum PHP.pl > Forum > Przedszkole
pelikan
Witam. Jestem ciekaw na jakiej zasadzie działają proste systemy szbalonów? Tzn jak sie dzieje, że w pliku gdzie jest html mamy {cos} a php zamiast tego {cos} wstawi jakas zmienna?
kszychu
str_replace('{cos}', $cos);
Oczywiście w baaaaardzo wielkim skrócie.
pelikan
tzn: mam plik php w ktorym mam skrypt. w drugim pliku hmtl mam tylko "szablon" i {cos}. skryp t php czyta ten plik html i poprostu zamienia ciag {cos} na jakas tam wartosc?
Dex1987
ja w moim systemie zrobilem sobie klasie ktora wczytuje plik tpl (czy jaki sobie chcesz) za pomoca funkcji preg_match zanduje w tekscie odpowiednie fragmeny kodu i zamienia je na zdeklarowane w w/w funkcji, a nastepnie kod zostaje zapisany do katalogu cache i odpalony
pelikan
dzięki:) zrozumiałem to do momentu o katalogu cahce i odpalony smile.gif możesz objasnić?smile.gif
Dex1987
tu masz moj systemik mysle ze sobie poradzisz z odpaleniem, jak cos to pw
TomASS
Rzeczywiście fajnie by było gdybyś jednak:
Cytat
katalogu cahce i odpalony  możesz objasnić?

smile.gif sam jestem 'noga' w szablonach i też chciałbym wiedzieć smile.gif

A nie można np. zastąpić odpowiednie znaki i wyświetlić zawartość np. bufora?
Dex1987
  1. <?php
  2.  
  3. var $TemplatesDir = 'templates/default/scripts';
  4. var $CacheDir  = 'cache/templates/default/scripts';
  5.  
  6. ?>


Tu deklarujesz nazwe katalogu z szablonami ($TemplatesDir) oraz nazwe katalogu cache ($CacheDir). Pamietajcie zeby nie dawac ostatniego '/'.

Funkcja VaribleAssign przypisuje wartosci do zmiennych. Nastepnie funkcja preg_replace" title="Zobacz w manualu php" target="_manual (sory wyzej napisalem preg_match, moj blad) zmienia np. {$varible} na <?php echo $this -> Varible['varible']; ?> i jesli w pliku ktory ma wyswietlac szablon wstawiles:
  1. <?php
  2.  
  3. $tpl -> VaribleAssign ('varible', 'tu jakas wartosc'); 
  4.  
  5. ?>

to system doda taka wartosc do zmiennej $this -> Varible['varible'];. Nastepnie wszystko jest zapisywane do pliku w katalogu cache, pozniej za pomoca include zostaje wyswietlony sparsowany plik. Mysle ze zrozumieliscie.

Pozdrawiam dex.
TomASS
Super smile.gif O to mi chodziło smile.gif
Tylko jeszcze bym poprosiło o rozwinięcie tego:
Cytat
Nastepnie wszystko jest zapisywane do pliku w katalogu cache, pozniej za pomoca include zostaje wyswietlony sparsowany plik.

Jakoś nie mogę sobie tego wyobrazić sadsmiley02.gif Dzięki smile.gif
Dex1987
poprostu caly kod jest zapisany do jednej zmiennej nastepnie wklejony do pliku po czym plik jest zapisywany w katalogu "cache", a nastepnie na podstawie nazwy ($this -> TemplatesName) includowany jest odpowiedni plik z tego wlasnie katalogu

  1. <?php
  2.  
  3. include ('cache/'. $this -> TemplateName . '.php');
  4.  
  5. ?>
Master Miko
ja np. systemie templete daje zamiast pojedyńczej wymiany, całą tablice do wymiany np:

  1. <?php
  2.  
  3. $input = array('/{lol}'/,'/{lmao}/');
  4. $output = array("Tu jest lol","Tu jest lmao");
  5.  
  6. ?>


Czy to lepszy sposób, czy lepiej każdy tag zamieniać pojedyńczo questionmark.gif?
devnul
generalnie to jest chyba lepszy sposób (bo szybszy), przynajmniej logixznie rzecz biorąc powinien byc szybszy od przetwarzania większej ilości danych w pętli.
Dex1987
szczerze to nie wiem, nigdy nie robilem testow bo ten systemik stworzylem tylko poto by ulatwic sobie prace, kiedys go rozbuduje, poprawie i dorobie wiecej funkcji ale narazie wystarcza mi to co mam
qbejs
Odświeżam topic bo mam pyanie,

Mianowicie, opracowuje swój prosty system szablonów i mam takie pytanie. Ów system szablonów będzie integralną częścią CMS'a, w nim będzie mechanizm obsługi modułów. Jak zrobić żeby system szablonów zorientował jakie są aktualnie moduły w systemie oraz jaki będzie ich symbol w sys. szablonów....macie jakiś sprawdzony sposób questionmark.gif
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-2025 Invision Power Services, Inc.