dargre` Opublikowano 21 Czerwca 2007 Udostępnij Opublikowano 21 Czerwca 2007 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 Więcej opcji udostępniania...
Bełdzio Opublikowano 21 Czerwca 2007 Udostępnij Opublikowano 21 Czerwca 2007 od tego masz smarki zeby nie korzystać w kodzie z echo, to tyle z reszty bez kodu nie da się nic ciekawego powiedzieć Let's Rock! - Agencja interaktywna dla wymagających O tworzeniu (bezpiecznych) aplikacji internetowych Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mion Opublikowano 21 Czerwca 2007 Udostępnij Opublikowano 21 Czerwca 2007 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 Więcej opcji udostępniania...
dargre` Opublikowano 22 Czerwca 2007 Autor Udostępnij Opublikowano 22 Czerwca 2007 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 Więcej opcji udostępniania...
dargre` Opublikowano 22 Czerwca 2007 Autor Udostępnij Opublikowano 22 Czerwca 2007 Sorry ' duplicate mi się trafił... Sorry, nie odpowiadam na PMy Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mkr Opublikowano 22 Czerwca 2007 Udostępnij Opublikowano 22 Czerwca 2007 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 Monitorowanie Google - Monitoring Mobilny Monitoring regionalny!Proxy dla systemów Monitoringu w wyszukiwarkach Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dargre` Opublikowano 22 Czerwca 2007 Autor Udostępnij Opublikowano 22 Czerwca 2007 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 Więcej opcji udostępniania...
mkr Opublikowano 22 Czerwca 2007 Udostępnij Opublikowano 22 Czerwca 2007 html{literal}jsjsjsjsjsjsjsjsjsjsjsjs{/literal}{$zmienna}{literal}jsjsjsjs{/literal}htmlhtml Monitorowanie Google - Monitoring Mobilny Monitoring regionalny!Proxy dla systemów Monitoringu w wyszukiwarkach Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dargre` Opublikowano 22 Czerwca 2007 Autor Udostępnij Opublikowano 22 Czerwca 2007 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 Więcej opcji udostępniania...
mkr Opublikowano 22 Czerwca 2007 Udostępnij Opublikowano 22 Czerwca 2007 Zrob var_dump $tablica i zobacz co masz pod kluczem id Monitorowanie Google - Monitoring Mobilny Monitoring regionalny!Proxy dla systemów Monitoringu w wyszukiwarkach Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dargre` Opublikowano 22 Czerwca 2007 Autor Udostępnij Opublikowano 22 Czerwca 2007 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 Więcej opcji udostępniania...
mkr Opublikowano 22 Czerwca 2007 Udostępnij Opublikowano 22 Czerwca 2007 musisz chyba w JS stworzyc tablice od nowa przez foreach var new_value[1] = '{$tablica[1]}'; ,,, Monitorowanie Google - Monitoring Mobilny Monitoring regionalny!Proxy dla systemów Monitoringu w wyszukiwarkach Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dargre` Opublikowano 22 Czerwca 2007 Autor Udostępnij Opublikowano 22 Czerwca 2007 musisz chyba w JS stworzyc tablice od nowa przez foreachvar 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 Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Zarchiwizowany
Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.