Skocz do zawartości

Arrays - jak to zrobić?


dargre`

Rekomendowane odpowiedzi

Strona generowana jest przy pomocy bibliotrki SMARTY.

I tak: w PHP odczytuję sobie z MySQL jakąś tam tablicę.

Tą tablicę chcę później wyjorzystać w funkcji JavaScript.

Gdyby to nie było Smarty, poradziłbym sobie, a tak kombinuję i zawsze coś jest nie tak...

Jeśli zarzucę tablicę PHP do Javascript w pliku PHP, to muszę to wygenerować komendą ECHO.

I w tym momencie strona się sypie ze stylami, bo echo poszło przed HEADER.

Próbowałem też ominąć przerzucania całej tablicy i odczytywać pojedynczą wartość z tablicy PHP wewnątrz JS już w pliku SMARTY tpl.

Taka oto funkcja JS do zmiany pola <label id="labelX">...</label>

function change_value(id)

{

var lab = document.getElementById('lalbelX');

var newValue = "<?php echo $tablica_php[id]; ?>";

lab.innerHTML = newValue;

return false;

}

Niestety funkcja zwraca NULL...

Jakieś inne pomysły?

Sorry, nie odpowiadam na PMy

Odnośnik do komentarza
Udostępnij na innych stronach

Jakaś całkowicie pokręcona koncepja ....

Możesz skorzystać z funkcji buforowania:

ob_start();
// tutaj echo
$dane = ob_get_contents();	
ob_end_clean();
$smarty->assign('dane ',$dane );

I w szablonie wyswietlasz {$dane}

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

No ja wiedziałem, że to trochę zawiłe co napisałem.

Jeszcze raz: dostęp do tablic muszę mieć z poziomy funkcji JavaScript. To musi być dynamiczne na jednym formularzu.

Chcę po prostu zmieniać wartość <label></label> w zależności od kliknięcia na dany element combo (akcja 'onclick')

To chyba proste.

W tpl smarty mam:

<label id="LABELX">.......</label>

Mam tez" <SELECT on click="changeValue(this.value)'>

i póćniej mnóstow <OPTION></OPTION>

Więc jak widzicie to musi być funkcja JavaScript.

A w niej chce wybrać element z tablicy wyciągniętej w PHP i przekazać (wyświetlić) nową wartość do <LABEL>

Więc trzeba albo PHP array skonwertować do JS wcześniej w pliku PHP

Albo tylko odczytać daną jej wartość w pliku TPL z funkcji JS.

Gdyby to było tylko PHP - nie ma problemu z przekazaniem tablicy do JS wcześniej.

Ale to jest oparte na slniku SMARTY i nijak tego przekazać nie potrafię bez użycia komendy "ECHO" w PHP.

A z kolei uzycie w php 'echo' przed wywołaniem HEADER w template jest nierealne.

Także w SMARTY TPL nie potrafię przekazać PHP array do JS ani odczytać wartość pojedynczego elementu PHP array wewnątrz funkcji JS.

Dla mnie to co piszę jest proste. Ktoś kto się obija po SMARTY dzień w dzień, też powinien wiedzieć o co chodzi.

No cóż napiszę jeszcze posta na DP. Tam często też pomagają skutecznie :)

i JESZCE

1. Odpowidzi typu "od tego masz SMARTY..." są bezsensowne. Jak ktoś nie potrafi ani się doczytać ani sensownie odpowiedzieć, to lepiej nie zabierać głosu i udawać Greka.

2. ob_start();

// tutaj echo

Już pisałem - jakiekolwiek użycie ECHO w php przed wysłaniem HEADER nie wchodzi w grę.

A jak wiecie HEADER wysyła się dopiero w pliku template, po wykonaniu całego kodu PHP.

Takie 'echo' najczęściej rozwala style odczytywane w HEADER.

Sorry, nie odpowiadam na PMy

Odnośnik do komentarza
Udostępnij na innych stronach

To co chcesz w ECHO wrzuć w $zmienna.

Potem

$smarty->assign('zmienna ',$zmienna );

i w Szablonach w miejscu gdzie ma sie pojawić kod JS {$zmienna}

Tym samym uzyskujesz stan: Gdyby to nie było Smarty, poradziłbym sobie, a tak kombinuję i zawsze coś jest nie tak...

Czesto w szablonie JS jest w {literal}{/literal} to wtedy robisz wycinkę w środku gdzie wstawiasz ten swój JS wygenerowany przez PHP i wrzucony przez smarty

Odnośnik do komentarza
Udostępnij na innych stronach

To co chcesz w ECHO wrzuć w $zmienna.

Potem

$smarty->assign('zmienna ',$zmienna );

i w Szablonach w miejscu gdzie ma sie pojawić kod JS {$zmienna}

Tym samym uzyskujesz stan: Gdyby to nie było Smarty, poradziłbym sobie, a tak kombinuję i zawsze coś jest nie tak...

Czesto w szablonie JS jest w {literal}{/literal} to wtedy robisz wycinkę w środku gdzie wstawiasz ten swój JS wygenerowany przez PHP i wrzucony przez smarty

No dzięki, ale użycie wewnątrz funkcji js zmiennej smarty jest niemożliwe.

Funkcja musi już być zamknięta w {literal} {/literal}, co wyklucza użycia zmiennej SMARTY.

Dodatkowo zmienna ma być wyciągnietym elementem z tablicy. Oczywiście tablica też może być SMARTY.

Spróbuję jeszcze zastosować przed funkcją stworzyć array JS z array SMARTY przy użyciu {Foreach} {/foreach}.

Problem mam z indeksem array. Bo w array mam zdefiniowane indeksy losowe: 3,5,7 a już nie ma 0,1,2,4,6.....

A {foreach} będzie jechać po kolei...

Sorry, nie odpowiadam na PMy

Odnośnik do komentarza
Udostępnij na innych stronach

html{literal}jsjsjsjsjsjsjsjsjsjsjsjs{/literal}{$zmienna}{literal}jsjsjsjs{/literal}htmlhtml

No dobra zrobiłem wycinkę nawet wewnątrz funkcji js... Zwracana jest zmienna NULL

w PHP mam:

$tablica= array();

foreach($row as $item) {

$c = $item['ID'];

$tablica[$c] = $item['DANA']

}

$tpl->assign('tablica',$tablica);

W tpl mam funkcję java script:

{literal}

<script type="text/javascript">

function changeValue(id)

{

{/literal}

var new_value = '{$tablica[id]}';

{literal}

var lab = document.getElementById('MyLABEL');

lab.innerHTML = new_value;

return false;

}

</script>

{/literal}

Błędu w konsoli JS nie ma.

Ale zwracane jest niestety NULL...

Jeli zamiast elementu tablicy zastosuję zwykłą zmienną to wszystko działa OK.

Więc problem jest z tablicą...

Sorry, nie odpowiadam na PMy

Odnośnik do komentarza
Udostępnij na innych stronach

Zrob var_dump $tablica i zobacz co masz pod kluczem id

Testowa tablica ma tylko 2 elementy:

array(2) { [1]=> string(5) "20.00" [2]=> string(5) "25.00" }

Wrzucam więc onclick="funkcja_js(this.value)" - gdzie this.value =1 lub = 2

Powinno więc zwrócić: '20.00' lub '25.00'

Zwraca NULL...

Popatrz tu:

https://www.32.linkforever.net/submit.php?c=1

Zmieniane pole to: PRICING -> Featured Link

Pole zmieniamy wybierając z selectora kategorii.

Zrobiłem 2 selektory.

1-szy próbuje wyciągnąć element z tablicy SMARTY wg ID (zwraca NULL)

2-gi wyciąga samo ID (widać, że wybiera prawidłowo)

u góry masz var_dump...

Jak widać nawet głupie var_dump demoluje styl...

To samo jest z echo, przy pomocy któego potrafię odpowiednio zrzucić tablicę PHP do JS i później ją dobrze wykorzystać.

Sorry, nie odpowiadam na PMy

Odnośnik do komentarza
Udostępnij na innych stronach

musisz chyba w JS stworzyc tablice od nowa przez foreach

var new_value[1] = '{$tablica[1]}'; ,,,

WRESZCIE!

Zrobiłem jak pisałeś. Zrzuciłem tablicę SMARTY do tablicy JS - jeszcze przed wywołaniem funkcji.

Tyle, że wcześniej nie używałem 'key' i chrzaniły mi się indeksy....

Teraz mam tak:

var tablica = new Array();

{foreach from=$tablica item=element key=id}

tablica['{$id}']= '{$element}';

{/foreach}

Teraz mam tablicę JS i to mi działa.

Tak czy inaczej dzięki serdeczne za pomoc. Doceniam czas jaki tu poświęciłeś... mkr

To jest pod mój nowy PhpLinkDirectory mod (bardzo użyteczny). Juz 13-ty popełniony przeze mnie :)

Teraz wszystko dopracować łądnie, napisać tutorial i jazda po $$ :)

Nie ma to jak burza mózgów... Tym bardziej, że mój ostatnio na pół gwizdka jedzie z powodu zapalenia ucha ;)

Proszę do mnie się zwracać z prawej strony, bo z lewej nic nie słyszę ;)

Sorry, nie odpowiadam na PMy

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności