Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Smarty] Poprawne includowanie
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
Keenic
Jak mam includowac plik tpl tak aby czytal on zmienne z pliku, ktory mu je przekazuje?
Mam plik menu.php i menu.tpl i jak includuje menu.tpl to nie wyswietlaja sie zmienne wynaczone w menu.php. Natomiast gdy includuje plik menu.php to wyskakuje mi blad. Pliki tpl mam w folderze wewnatrz templates.
prgTW
menu.php
  1. <?php
  2. $smarty->assign('x', 'wartosc')
  3. ?>


menu.tpl
  1. to jest {$x}
Keenic
Chyba nie zrozumiales o co mi chodzi. Ja chce includowac plik menu.tpl tak aby mial on wartosci zmiennych z menu.php
prgTW
Jak chcesz "inkludować" pliki szablonów do logiki działania aplikacji!? Pliki szablonów definiują wygląd przecież. Chcesz zainkludować do PHP plik szablonu tak żeby był on przeparsowany przez parser PHP czy jak,bo nie rozumiem zdania "Jak mam includowac plik tpl tak aby czytal on zmienne z pliku, ktory mu je przekazuje?"

includowanie to dołączenie kodu znajdującego się w pliku zewnętrzym i poddanie go parsowaniu przecież

Chcesz, żeby szablon menu.tpl widział wszystkie zmienne zadeklarowane w pliku menu.php (bo ja to tak rozumiem)?
Keenic
No moze torche napmieszalem. Wiec tak:
Mam plik index.php i index.tpl. Wiadomo, wszystko ladnie sie tam wyswietla. Chce teraz do index.tpl dodac plik menu.tpl tak aby byly przekazyne do neigo zmienne z menu.php.
Mam nadzieje, ze wyjasnilem.
prgTW
"zmienne z menu.php."
jakie zmienne!

przeciez zmienne smartom przekazujesz przez ->assign()

index.php:
$smart->assign('x', 'wartosc');

1.tpl:
to jest {include file="2.tpl"}

2.tpl:
wartosc {$x}
Keenic
Postaram sie jeszcze bardziej wytlumaczyc choc nie wiem czy mi to wyjdzie.
Chce do pliku index.tpl dolaczyc plik menu.tpl wraz z tym co powinien ten plik wyswietlac.
Gdy daje w index.tpl
  1. {inlude file="sciezkadopliku/menu.tpl"}

to wyswietla mi sie tylko zawartosc pliku menu.tpl bez tego co powinno wyswietlac po przekazaniu przez menu.php
prgTW
  1. index.tpl:
  2. {include file="sciezkadopliku/menu.tpl" wyswietl="to wyswietli menu.tpl"}
  3.  
  4. menu.tpl:
  5. {$wyswietl}


ale przeciez tym co ma sie wyswietlac steruje PHP a nie szablon, szablon ma tylko zdefiniowac JAK to "cos" ma sie wyswietlic, poczytaj o MVC i wzorcach projektowych
Keenic
Wiem, ze tak mozna, ale ja chce aby menu.tpl wyswietlil zmienne, ktore przekazuje mu plik menu.php
prgTW
Moment, bo kompletnie nie kumam ocb. Jakie masz pliki (nazwy podaj i tych się trzymajmy tylko)? Napisz po kolei jak chcesz żeby zadziałał skrypt (w stylu: Plik menu.php przekazuje zmienną X plikowi 1.tpl, plik 1.tpl dołącza 2.tpl, plik 2.tpl ma pokazać zmienną X) - wtedy do czegoś dojdziemy smile.gif
Keenic
Dobra.

Mam 3 pliki, index.tpl, menu.tpl i menu.php. Chce dolaczyc plik menu.tpl do pliku index.tpl, ale w taki sposob aby wyswietlal on to co powinien gdyby otworzylo sie go przez plik menu.php.
prgTW
"Mam 3 pliki, index.tpl, menu.tpl i menu.php"
Mimo to wnioskuje że masz jeszcze index.php który normalnie odpala wszystko, a Ty chcesz żeby przez wywołanie menu.php a nie index.php wyświetliło się to samo tak?

menu.php:
header('Location: index.php');
die();
Keenic
Nie, chce aby przez wywolanie index.php wyswietlal mi sie inedex.tpl z zaincludowanym menu.tpl, ktory wyswietla dane z menu.php
prgTW
index.php:
include 'menu.php';
$smarty->display('index.tpl');

menu.php:
$smarty->assign('cos', 'jakies cos');

index.tpl:
{include file="menu.tpl"}

menu.tpl:
pokaze sobie {$cos}

niech menu.php tylko przydziela smartowi odpowiednie rzeczy a niech zawsze plikiem wywolujacym bedzie index.php
Keenic
Zrobilem tak i wyskakuje mi taki blad
Fatal error: Cannot redeclare class smarty in C:\Program Files\WebServ\httpd-users\smarty\simple-page\libs\Smarty.class.php on line 65
prgTW
plik klasy smarty dolaczaj tylko raz (include_once, require_once)
Keenic
Dziala, dzieki za pomoc.
prgTW
spoko (zesmy sie dogadali) winksmiley.jpg
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.