Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Smarty + js przekazywanie tablic
Forum PHP.pl > Forum > Po stronie przeglądarki
mis
Hej, mam nadzieje, że dobry dział.
Od paru godzin męcze się z problemem.

Przesyłam do tpl tablice i w js chciałbymwyświetlić wartości z tej tablicy:
gdy robie:
  1. alert('{/literal}{$impreza["miejsce"][2]}{literal}');


Wszystko jest ok, ale gdzy zrobię:
  1. var i = 2;
  2. alert('{/literal}{$impreza["miejsce"]['+i+']}{literal}');


wyświetla mi pustke. Zawsze starałem się sam szukać rozwiazania, ale teraz juz nie mam pomysłów i siły.
mam nadzieje, że ktoś trzeźwym okiem podrzuci pomysł
widmo_91
Nie rozumiem pewnych rzeczy, używasz smartów i odnosisz się do tablicy asocjacyjnej w ten sposób: {$impreza["miejsce"][2]}?
Spróbuj:
  1. var i = 2;
  2. alert({/literal}{$impreza["miejsce"][i]}{literal});


albo

  1. var i = 2;
  2. alert({/literal}{$impreza.miejsce[i]}{literal});
mis
zauważm, że to jest w javascript.

z tym alertem to jest dla testów, który napisałem, ponieważ niechodziło mi wyśweitlanie w pętli.
Chodzi o to, że gdy wpisze na sztywno index w tablicy, jest ok, ale gdy użyje zmiennej(czy to z pętli czy na sztywno), wtedy nie pojawia się nic.
widmo_91
To skąd pochodzi zmienna $impreza["miejsce"] z javascriptu, smartow czy phpa w skrypcie?
mis
z php przekazuje, przepraszam mój błąd.
Ale jeszcze raz mówie, tablica przesyłana jest ok, wyświetlana(na sztywno ze wspisaniem indeksu) też jest prawidłowo (czy to jako alert czy jako tekst w html), ale w js jak dam jako pętla, lub jak w 1 poście var i =2 i jako index dam i, to sie nie wyświetla nic
widmo_91
to spróbuj:

  1. {/literal}
  2. alert({$impreza["miejsce"][i]});
  3. {literal}
mis
jest błąd skadni js, w ogole nie wyświetla nawet alerta.
widmo_91
Właśnie sobie zdałem sprawę, że to co chcesz zrobić jest nie realne bo można przekazać zmienne z phpa do javascriptu a nie odwrotnie!

Przykładowe rozwiazanie:

  1. $smarty->assign("do_javascript", json_encode($impreza));


  1. var impreza = {$do_javascript};
  2. for (i = 0; i < impreza['miejsce'].length; i++) {
  3. alert(impreza["miejsce"][i]);
  4. }
  5.  
  6.  
mis
wydaje mi się, że się mylisz.
Ja nie przekazuje zmiennej, tylkoe chce odczytać zmienną, a to różnica.

Może mało jasno pisze, postaram się bardziej opisać.
w PHP przesyłam tablice do tpl:

  1. $smarty->assign("impreza", $impreza);


w tpl chce na potrzeby testu, wyświetlić za pomocą javascriptu (w alercie) zmienną z pola 3 więc daje :

  1. alert('{/literal}{$impreza["miejsce"][2]}{literal}');

i jest świetnie, wyświetla to co chce, ale chce zamiast indexu na sztywo, dać jako zmienną :

  1. var i = 2;
  2. alert('{/literal}{$impreza["miejsce"]['+i+']}{literal}');


i w tym wypadku nie działa
widmo_91
Bo można przekazać zmienną z phpa do javascriptu:
alert('{/literal}{$impreza["miejsce"][2]}{literal}');

Ale nie można odwrotnie czyli z javascriptu do PHPa:
var i = 2;
alert('{/literal}{$impreza["miejsce"]['+i+']}{literal}');


To co chcesz zrobić jest nie realne.
mis
tylko tunie chce przekazywać, ale się odwołać do tablicy o zadeklarowanym indeksie, ale możliwe, ze masz racje.
tylko teraz msuze to obejść, ale Twój sposób mi się nie sprawdzi
widmo_91
Nie chodzi o przekazywanie a jednak przekazujesz, nieświadomie to nieświadomie ale przekazujesz.

  1. alert('{/literal}{$impreza["miejsce"][2]}{literal}');


W tym przypadku przekazujesz zmienna phpa $impreza["miejsce"][2] do javascriptu więc wszystko jest OK

a w tym:

  1. var i = 2;
  2. alert('{/literal}{$impreza["miejsce"]['+i+']}{literal}');


Próbujesz przekazać zmienną javascriptu i do php a to nie realne bo gdy javascript zacznie sie wykonywać to php już zakończy swoją pracę.

Musisz przekazać zmienną z phpa do javascriptu przykładowe rozwiązanie masz na górze:

  1. $smarty->assign("do_javascript", json_encode($impreza));

  1. var impreza = {$do_javascript};
mis
ok wydawało mi się to 'oczywiste' ze powinien się odwołać przy zadeklrawowanej zmiennej jako index.

wracając do Twojego sposobu.
widziałem gdzieś ten sposób, jednak teraz mam błąd składni przy
var impreza = {$do_javascript};
widmo_91
Nie wiem jak wygląda twój skrypt ale mogę się domyślać, że może pomóc

{/literal}
var impreza = {$do_javascript};
{literal}
mis
nie w tym miejscu wstawiałem literala, teraz ok, dzięki za pomoc.
+
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.