Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [smarty] Jak przekazać zmienną będącą tablicą do funkcji w smarty, tytuł zawiły ale sprawa prosta.. gorzej z rozwiązaniem :)
MariuszT
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 1
Dołączył: 9.06.2003
Skąd: Tomaszów Mazowiecki

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


Tytuł zawiły ale w gruncie rzeczy prosta sprawa tylko nie wiem jak to nazwać. Poniższy przykład jest specjalnie przygotowany aby było łatwiej go zrozumieć. Muszę przekazać wartość tablicy o indeksie id do własnej funkcji/pluginu. Póki robię to tak jak jest w pierwszej linijce index.tpl to wszystko działa. Niestety mam trochę większe potrzeby ale o tym na końcu. Oto przykładowa aplikacja:

index.php
  1. <?php
  2. // tutaj ustawienia smarty, inicjacja klasy itd.
  3.  
  4. $zmienna[0]['id']=1;
  5. $smarty->assign('zmienna', $zmienna);
  6. $smarty->display('index.tpl');
  7. ?>


index.tpl
  1. {test testujemy=$zmienna[0].id}
  2. {test testujemy="$zmienna[0].id"}
  3. {test testujemy="$zmienna[0][id]"}
  4. {test testujemy="$zmienna[0]['id']"}


wynik
Cytat
1
Array.id

Array['id']


Skompilowany plik:
  1. <?php echo smarty_function_test(array('testujemy' => $this->_tpl_vars['zmienna'][0]['id']), $this);?>
  2.  
  3. <?php echo smarty_function_test(array('testujemy' => ($this->_tpl_vars['zmienna'][0]).".id"), $this);?>
  4.  
  5. <?php echo smarty_function_test(array('testujemy' => ($this->_tpl_vars['zmienna'][0][$this->_sections['id']['index']])), $this);?>
  6.  
  7. <?php echo smarty_function_test(array('testujemy' => ($this->_tpl_vars['zmienna'][0])."['id']"), $this);?>


No i kto mi teraz doradzi jak ja mam przekazać wartość zmiennej $zmienna[0]['id'] skoro w rzeczywistości tak używam mojego pluginu:
Cytat
{zapytanie nazwa='zdjecie' select='id, opis' from='nt_strony_zdjecia' where="strona=WARTOSC_NASZEJ_ZMIENNEJ" order='sort' limit='1'}

Jak widać w pliku index.tpl próbowałem różnych sposobów i nic nie wychodzi :/ Widać wyraźnie w skompilowanym pliku, że smarty głupieje :/

Co prawda znalazłem rozwiązanie ale wcale mi się ono nie podoba. Robię coś takiego:
Cytat
{assign var='zdjecie_id' value=$zdjecie[0].id}
{zapytanie nazwa='zdjecie' select='id, opis' from='nt_strony_zdjecia' where="strona=$zdjecie_id" order='sort' limit='1'}

Działa ale to takie... nieeleganckie ;P

Jakieś pomysły na rozwiązanie?

Ten post edytował MariuszT 17.01.2008, 11:35:05
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
MariuszT
post
Post #2





Grupa: Zarejestrowani
Postów: 26
Pomógł: 1
Dołączył: 9.06.2003
Skąd: Tomaszów Mazowiecki

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


Hehe wiem, że rozwiązanie jest niestandardowe ale bardzo praktyczne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Nie chcę im dawać dostępu do żadnego php. Nie mam czasu żeby sprawdzać co oni tam wyprawiają a mogą różne rzeczy robić i potem ja za to będę odpowiadał. Chcę zablokować dostęp do {include_php} i {php}. Chcę aby koleś mógł tylko wybrać jakieś dane z bazy danych (i to też nie wszystkie ale to już zabezpieczyłem). I do tego moje rozwiązanie nadaje sie idealnie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Wiesz, to mimo wszystko tylko cms i jakieś ograniczenia muszą być. I tak możliwości są bardzo duże a ten plugin do smarty to tylko dla niestandardowych rozwiązań, reszta jest obsługiwana przez moduły php np. newsy czy galeria zdjęć.

Swoją drogą, jak już poznałeś moje założenia to zadam jeszcze jedno pytanie. Czy jest coś jeszcze w zabezpieczeniach o czym powinienem pamiętać oprócz wyłączenia {include_php} i {php} ? Tagi <?php ?> są traktowane standardowo czyli po prostu wyświetlane.



EDIT 10.02.2008
Znalazłem przez przypadek rozwiązanie problemu - może komuś się przyda. Nie trzeba używać żadnych sztuczek, wystarczy zmienną wcisnąć między `` (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) U mnie to wygląda tak:

Cytat
{zapytanie nazwa='zdjecie' select='id, opis' from='nt_strony_zdjecia' where="strona=`$zdjecie[0].id`" order='sort' limit='1'}


I smarty prawidłowo rozpoznaje, że to tablica.

Ten post edytował MariuszT 10.02.2008, 20:33:20
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 08:25