Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Szablon php - jak wyswietlac?
Forum PHP.pl > Forum > PHP
marcini82
Witam!

Postanowilem wykorzystac w projekcie proste szablony php, wykorzystujace uproszczona skladnie. Wszystkie zmienne dla szablonu sa w nim dostepne w tablicy $tpl.
A to przyklad pliku szablonu:
  1. <head>
  2.  <title> <?=$tpl['tytulStrony'];?> </title>
  3.  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  4. </head>
  5. <body>
  6. <h3> <?=$tpl['tytul'];?> </h3>
  7. <? require_once('inny_plik_szablonu.php'); ?>
  8.  
  9. i tak dalej


Wymyslilem sobie klase, ktora pozwala na ustawienie tablicy wartosci przekazywanych do szablonu oraz wyswietlenie szablonu:

  1. <?php
  2.  
  3. class Renderer{
  4.  
  5.  // tu jeszcze troche innego kodu
  6.  
  7. function setTpl($index, $data){
  8. $this->tpl[$index]=$data;
  9. }
  10.  
  11. function execute(){
  12. $tpl=$this->tpl;
  13. require_once('plik_szablonu.php');
  14. }
  15. }
  16.  
  17. ?>


Mniej wiecej dziala, ale brak mi pomyslu na rozwiazanie kwestii sciezki dostepu do plikow.
Wszystkie odwolania do zewnetrznych plikow umieszczone w szablonie (np. pliku CSS, includowanie dodatkowego szablonu) sa przez php interpretowane jako linki z poziomu glownego kontrolera aplikacji (index.php), a nie jako pliki w tym samym katalogu co szablon.

Na przylkad:
w pliku /szablon/default/index.php
mam: include('inny_szablon.php');
No i php zamiast includowac plik /szablon/default/inny_szablon.php probuje znalezc /inny_szablon.php, bo glowny kontroler aplikacji to /index.php.

Jak moge to mozliwie prosto rozwiazac?
Epoxy
Ja mam plik konfiguracyjny ktory przechowuje miedzy innymi sciezki (wzgledem kontrolera) do katalogow z klasami, css, templatesami, obrazkami, js i includuje wszystko ze sciezkami z configa np :

  1. <?php
  2.  
  3.  
  4. include($cfg['path']['classes'] . "database.inc");
  5.  
  6.  
  7. ?>
marcini82
No z include() to jeszcze przejdzie. Tez o tym myslalem.
Ale to dotyczy tez wszystkich innych odwolan np. arkuszy CSS, obrazkow wstawianych za pomoca <img> itp. Wstawianie tam sciezki z configa wymagaloby wpisywania wszedzie znacznikow php, a to juz zbytnio zaciemnia ogolny obraz.
Zastanawiam sie, czy mozna to jakos prosto obejsc, nie piszac przy okazji wlasnego parsera szablonow.

EDIT:
No coz, zdecydowalem sie na takie rozwiazanie.
W $renderer->execute() przed dolaczeniem szablonu definiuje stala, ktora zawiera sciezke do katalogu aktualnie wybranego szablonu. Nastepnie wpisuje <?=STALA;?> w szablonie przed kazdym odnosnikiem do pliku.
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.