Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [smarty] funkcje w smarty
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
pawel.b
witam

mam w php funkcje którą rejestruje w smarty funkcja przyjmuje 3 parametry i zwraca tablice
Kod
function make_seed()
{
     list($usec,$sec) = explode(" ", microtime());
     return ((float)$sec+(float)$usec) * 100000;
}
mt_srand(make_seed());

function randomArray($params, &$smarty)
{
     $tmp = array();
     while(count($tmp) < $params['counter'])
     {
         $rand = mt_rand($params['from'],$params['to']);
         if(! in_array($rand,$tmp))
             $tmp[] = $rand;
     }
     return $tmp;
}

$smarty->register_function('randomArray','randomArray');

w szablonie mam tak
Kod
{capture name=returned_array}
    {randomArray counter=5 from=0 to=30}
{/capture}
{assign var=randArr value=$smarty.capture.returned_arry}
{$randArr[0]}

i oczywiście nie działa
pomożecie smile.gif

dzięki za pomoc
nospor
nawet nie raczyles zajrzec do dokumentacji by zobaczyc jak sie to robi......
http://www.smarty.net/manual/en/plugins.php
http://www.smarty.net/manual/en/plugins.functions.php

popraw bbcode

edit:
no dobra, widze ze zrobiles to przy pomocy tego:
http://www.smarty.net/manual/en/api.register.function.php

wlacz sobie wyswietlanie bledow to moze jakis blad zobaczysz smile.gif
pawel.b
problemem nie jest rejestracja funkcji w smarty tylko przypisywanie jej wyniku do zmiennej w szablonie smarty. twierdze że tak jest ponieważ inne funkcje mi działają a rejestruje je identyczne.
nospor
to nie mogles od razu napisac w czym problem?

widze pewną niescisclosc miedzy slowem:
returned_array
a:
returned_arry

bbcode dla php to [php] a nie [code]
Zyx
Funkcje w Smartym nie są tym samym, co w PHP (w ogóle nawet nie wiem, czemu nazwali to w ten sposób). Ten system szablonów automatycznie wyświetla to, co zwrócą, jako tekst wynikowy. Skoro Twoja "funkcja" zwraca tablicę, to sam sobie odpowiedz, dlaczego nie działa, wiedząc że

  1. <?php
  2. ?>


produkuje tekst "Array" smile.gif. Zamiast zwracać wartość, powinieneś wykorzystać dostarczany obiekt $smarty i przypisać wynik do jakiejś zmiennej metodą assign(). A tak ogólnie to jeśli nie jesteś na jakimś zaawansowanym etapie prac, gorąco polecam zmienić system szablonów na jakiś bardziej rozgarnięty smile.gif.
pawel.b
smile.gif racja
ale dalej nie działa tak jak chce

Kod
{$smarty.capture.returned_array} // wypisuje Array
{$smarty.capture.returned_array[0]} // nie wypisuje nic
{$smarty.capture.returned_array[1]} // wypisuje A
{$smarty.capture.returned_array[1]} // wypisuje r


niestety zmiana silnika szablonych odpada
pomóżcie jak uzyskać efekt o który pisze wyżej czyli wygenerować x losowych liczb z danego zakresu (a,cool.gif
nospor
no ale zyx ci juz odpowiedzial:
Cytat
produkuje tekst "Array"


Cytat
Zamiast zwracać wartość, powinieneś wykorzystać dostarczany obiekt $smarty i przypisać wynik do jakiejś zmiennej metodą assign()
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-2024 Invision Power Services, Inc.