Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP][smarty]javascript w smartach ze zmienną z php
Forum PHP.pl > Forum > Przedszkole
NickOver
W pliku z php'em generuje mi się zmienna. Teraz chciałbym ją umieścić w javascript'cie który znajduje się w smartach.
Ktoś wie jak to zrobić?
trueblue
Zapoznaj się z tagiem {literal} oraz jego zamknięciem, {/literal}
NickOver
Napisałem o zmiennej a nie o umieszczeniu całego skryptu.
trueblue
No, i?

Kod
{literal}
<script type="text/javascript">
var a={/literal}{$zmienna_z_php_przypisana_do_smarty}{literal};
</script>
{/literal}
NickOver
  1. {if $a}
  2. {literal}
  3. <script type="text/javascript">
  4. var a={/literal}{$a}{literal};
  5. alert(a);
  6. </script>
  7. {/literal}
  8. {/if}

Do warunku wchodzi, ale nic się nie pokazuje.
trueblue
Sprawdź co zawiera $a.
Kod
{if $a}
{$a|@var_dump}
{literal}

nospor
No jesli a jest tekstem to tak ma byc:
var a={/literal}'{$a}'{literal};
Pyton_000
Wystarczy tak:
Kod
{if $a}
<script type="text/javascript">
var a='{$a}';
alert(a);
</script>
{/if}


i oczywiście w PHP:
Kod
$smarty->assign('a', 'cos');
nospor
Tak, w tym przypadku LITERAL faktycznie nie ma zadnego sensu
Pyton_000
Jeżeli Smarty3 to literal prawie wcale nie jest potrzebne bo pozbyli się uciążliwości { i } jako początku wyrażenia.
nospor
Hehe, ja pozbylem sie smartiego na poziomie smarty2 wink.gif
Pyton_000
Nie wiesz co Cię ominęło haha.gif
NickOver
Zgupiałem.
Z funkcji wychodzi tablica $results potem:
  1. $response = "";
  2. foreach ($results as $result)
  3. {
  4. $response = "$response \n $result";
  5. }
  6. var_dump($response);
  7. if (!empty($response))
  8. {
  9. $smarty->assign($response);
  10. }

Dump'uje ją w smartach. Pokazuje mi jej treść.
Kod smarty:
  1. {$response|var_dump}
  2. {if $response}
  3. {literal}
  4. <script type="text/javascript">
  5. var response='{$response}';
  6. alert(response);
  7. {/literal}
  8. {/if}


I wywala mi błędy:
string(56) " W naszej bazie danych nie istanieje taki adres e-mail"
Notice: Undefined index: response in /opt/lampp/htdocs/dir/includes/core/smarty/templates_c/e143f2b3e1988a2ae7e64e04bfca62094eb29e2a.file.index.tpl.php on line 35

Notice: Trying to get property of non-object in /opt/lampp/htdocs/dir/includes/core/smarty/templates_c/e143f2b3e1988a2ae7e64e04bfca62094eb29e2a.file.index.tpl.php on line 35
NULL
Notice: Undefined index: response in /opt/lampp/htdocs/dir/includes/core/smarty/templates_c/e143f2b3e1988a2ae7e64e04bfca62094eb29e2a.file.index.tpl.php on line 37

Notice: Trying to get property of non-object in /opt/lampp/htdocs/dir/includes/core/smarty/templates_c/e143f2b3e1988a2ae7e64e04bfca62094eb29e2a.file.index.tpl.php on line 37
nospor
Wywal te {literal}
trueblue
  1. $smarty->assign('response',$response);
NickOver
Cytat(nospor @ 20.11.2014, 19:13:29 ) *
Wywal te {literal}

Nospor, właśnie w Ciebie zwątpiłem sad.gif

Cytat
$smarty->assign('response',$response);

Niestety zamiast treści alert wyświetla mi "$response"
trueblue
Jeśli wszystko masz w {literal}, to przecież nie podstawi zmiennej.
Przykład podałem Ci dużo wyżej, pozostali koledzy dwa inne.
NickOver
  1. {if $response}
  2. {literal}
  3. <script type="text/javascript">
  4. var response={/literal}{$response}{literal};
  5. alert(response);
  6. {/literal}
  7. {/if}

Taki kod nie wyswietla nic.
  1. {if $response}
  2. {literal}
  3. <script type="text/javascript">
  4. var response='{/literal}{$response}{literal}';
  5. alert(response);
  6. {/literal}
  7. {/if}

Taki też.
trueblue
Jeśli to string, to ma być druga wersja.
Sprawdź co widać w źródle strony.
NickOver
Ok. Okazało się że przyczyną błędu było /n w generowaniu informacji która ma pokazać się w alercie, więc od razu nasuwa mi się pytanie. Co dać aby js uważał to za następną linie ale w php generowało się to normalnie?
trueblue
Kod
{$response|regex_replace:"/\n/":"\\n"}
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.