Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [smarty] zamieniaj zmienną na funkcję
Forum PHP.pl > Forum > PHP
nitro18
Chciałbym skorzystać ze smarty. Jednak mam problem.

Kiedy następuje wczytanie szablonu tag {menu} powinien zostać zamieniony przez zawartość funkcji menu()
jednak po zastosowaniu poniższego kodu nie działa. w pliku menu.php są także skrypty php więc otwieranie fread() mi sie nie opłaca.

Proszę o pomoc, z góry dziękuję.

  1. <? 
  2. //szablon
  3. $f=fopen("szablon.htm", "r");
  4. $szablon=fread($f, filesize("szablon.htm"));
  5.  
  6. function menu(){
  7. @include 'menu.php';
  8. }
  9.  
  10. $szablon = eregi_replace("{menu}", menu(), $szablon);
  11.  
  12.  
  13. echo $szablon;
  14. ?>
qqrq
Nie rozumiem - to jest smarty? Z tego co wiem smarty inaczej się używa.
nitro18
wiem, ale ja sobie napisałem w skrócie, żeby nie ciągnąć się obiektowo smile.gif
qqrq
...
Ale Smarty używa się obiektowo. Tak to możesz sobie podpiąć każdy szablon.
nitro18
oj nie kłóćmy się, wiem o co Ci chodzi.

No to inaczej:

jak zamienić {menu} na zawartość funkcji menu()?
phpion
  1. <?php
  2. function a() {
  3. return 'a()';
  4. }
  5.  
  6. function b() {
  7. return 'b()';
  8. }
  9.  
  10. $fun = 'a';
  11. echo $fun();
  12. $fun = 'b';
  13. echo $fun();
  14. ?>

Tylko co to ma wspólnego ze Smarty... worriedsmiley.gif
qqrq
Rozumiem. Szczerze powiem, nie wiem jak to zrobić bezpośrednio (bez ingerencji w kod źródłowy Smarty'ego), ale można inaczej:


Sposób 1:

Załóżmy że masz plik index.php i szablon do tego index.tpl. Teraz tak, do pliku menu.php robisz szablon menu.tpl. I tak:

index.php
  1. <?php
  2. include 'menu.php';
  3. ?>


index.tpl
  1. {include file=menu.tpl}



Sposób 2:

Wszystko co ma się wyświetlać jako menu przypisujesz do jakiejś zmiennej Smarty i wyświetlasz w szablonie:

index.php
  1. <?php
  2. include 'menu.php';
  3. ?>


menu.php
  1. <?php
  2. $smarty->assign('Menu',$moje_menu); // <- Zakładamy, że twój obiekt Smarty nazywa się $smarty
  3. ?>


index.tpl
  1. {$Menu}
krowal
Jakieś głupie podejście macie do tego. Do szablonów nic innego niż treść/tablica/liczba nie przekażesz, więc cokolwiek Twoja funkcja menu() robi to niech to robi tak żeby zwracać wynik w postaci jednej zmiennej np.
  1. <?php
  2. function menu(){
  3. while(jakis warunek){
  4. $text .= jakis tekst;
  5. }
  6. return $text;
  7. }
  8. ?>

W ten sposób utworzysz podczas działania funkcji ciąg który potem umieszczasz w szablonie za pomocą smarty w sposób zależny od typu zmiennej oczywiście (tablice możesz potraktować foreach'em).
  1. <?php
  2. $smarty->assign('menu', $text);
  3. $smarty->display('szablon.tpl');
  4. ?>
nitro18
Postanowiłem że poczytam sobie kurs na temat Smarty an www.gajdaw.pl bo tam includowanie plików jest przedstawione. Ale gdy robię wszystko ok to wyskakuje mi komunikat:

Cytat
Warning: Smarty error: unable to read resource: "index.tpl.php" in C:\serwer\htdocs\testy\smarty\libs\Smarty.class.php on line 1095


wszystkie pliki trzymam w jednym folderze a skrypty odpowiedzialne za smart w folderze libs. Tylko dlaczego nie działa skoro powinno sad.gif
qqrq
krowal => Racja exclamation.gif
nitro18 => Szkoda, że się wcześniej nie zabrałeś się za ten kurs. A co do błędu, to najpierw pokaż kod, a potem pogadamy...
nitro18
już wiem o co mu chodzi... 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.