Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [smarty] zamieniaj zmienną na funkcję
nitro18
post 17.09.2007, 22:09:45
Post #1





Grupa: Zarejestrowani
Postów: 311
Pomógł: 7
Dołączył: 2.08.2006
Skąd: Bystrzyca Kłodzka/Nysa

Ostrzeżenie: (10%)
X----


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. ?>
Go to the top of the page
+Quote Post
qqrq
post 17.09.2007, 22:14:32
Post #2





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

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


Nie rozumiem - to jest smarty? Z tego co wiem smarty inaczej się używa.


--------------------
Go to the top of the page
+Quote Post
nitro18
post 17.09.2007, 22:18:05
Post #3





Grupa: Zarejestrowani
Postów: 311
Pomógł: 7
Dołączył: 2.08.2006
Skąd: Bystrzyca Kłodzka/Nysa

Ostrzeżenie: (10%)
X----


wiem, ale ja sobie napisałem w skrócie, żeby nie ciągnąć się obiektowo smile.gif
Go to the top of the page
+Quote Post
qqrq
post 18.09.2007, 08:53:56
Post #4





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

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


...
Ale Smarty używa się obiektowo. Tak to możesz sobie podpiąć każdy szablon.


--------------------
Go to the top of the page
+Quote Post
nitro18
post 18.09.2007, 11:17:55
Post #5





Grupa: Zarejestrowani
Postów: 311
Pomógł: 7
Dołączył: 2.08.2006
Skąd: Bystrzyca Kłodzka/Nysa

Ostrzeżenie: (10%)
X----


oj nie kłóćmy się, wiem o co Ci chodzi.

No to inaczej:

jak zamienić {menu} na zawartość funkcji menu()?
Go to the top of the page
+Quote Post
phpion
post 18.09.2007, 11:21:36
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




  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
Go to the top of the page
+Quote Post
qqrq
post 18.09.2007, 12:33:47
Post #7





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

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


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}


--------------------
Go to the top of the page
+Quote Post
krowal
post 18.09.2007, 13:44:04
Post #8





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

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


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. ?>


Ten post edytował krowal 18.09.2007, 13:45:08


--------------------
Nawet świnka może wejść na drzewo kiedy jest chwalona :)
Go to the top of the page
+Quote Post
nitro18
post 18.09.2007, 17:43:26
Post #9





Grupa: Zarejestrowani
Postów: 311
Pomógł: 7
Dołączył: 2.08.2006
Skąd: Bystrzyca Kłodzka/Nysa

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
qqrq
post 18.09.2007, 21:12:05
Post #10





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

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


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...


--------------------
Go to the top of the page
+Quote Post
nitro18
post 19.09.2007, 22:00:02
Post #11





Grupa: Zarejestrowani
Postów: 311
Pomógł: 7
Dołączył: 2.08.2006
Skąd: Bystrzyca Kłodzka/Nysa

Ostrzeżenie: (10%)
X----


już wiem o co mu chodzi... winksmiley.jpg
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: 19.07.2025 - 22:08