design4VIP Posted October 1, 2020 Share Posted October 1, 2020 juz trace sily.... chce przeladowac tpl wewnatrz tpl (metoda 'fetch') przez ajaxa... w ogole nie chce mi odczytac fukcji z zawartym szablonem do przeladowania. co bym nie kombinowal zawsze wrzuca mi strone glowna panelu, czyli mam strone glowna w stronie panelu.... . moze prosciej bedzie kodem:kontroler PHP: public function hookDisplayAdminProductsExtra($params) { $data_fetch = $this->getTableTemplate($id_product, $params); $this->context->smarty->assign(array( 'data_fetch' => $data_fetch, 'products' => $this->getProdctsTable() )); return $this->display(__FILE__, '/views/templates/admin/fetch-container.tpl'); } public function getTableTemplate($id_product, $params) { if (!$id_product) { $id_product = $params['id_product']; } $choice = Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'mysqltable` WHERE id_product = '.$id_product); $table = (array) json_decode($choice[0]["value"]); $this->context->smarty->assign(array( 'table' => $table, 'id_product' => $id_product )); $html = $this->fetch($this->local_path.'views/templates/admin/displayadminproductsextra.tpl'); return $html; } TPL kontenera: <div class="mymodule_select"> <label class="control-label col-lg-3" for="id_sizeguide">{l s="Select table from product" mod="mymodule"}</label> <div class="col-lg-3"> <select name="id_sizeguide" id="id_sizeguide" class=""> <option value="0">- {l s="Choose (optional)" mod="mymodule"} -</option> {if isset($products)} {foreach from=$products item=product} <option value="{$product.id_product}">{$product.name}</option> {/foreach} {/if} </select> </div> </div> <div id="fetch-container"> {$data_fetch} </div> AJAX JS: $('#id_sizeguide').change(function(e) { e.preventDefault(); var link = $('#link').val(); var select_id_product = $(this).val(); $.ajax({ type: 'POST', //dataType: "json", data: { select_id_product: select_id_product, ajax: true }, url: link+'fetch-ajax.php', success: function(response) { $('#fetch-container').html(response.html); }, complete: function() { }, error: function(jqXHR, textStatus, errorThrown) { if (textStatus != 'error' || errorThrown != '') { showErrorMessage(textStatus + ': ' + errorThrown); console.log(textStatus, errorThrown); } } }); }); AJAX PHP: require_once(dirname(__FILE__).'/mymodule.php'); $fetchtpl = new fetchtpl(); $id_product = (int)(Tools::getValue("select_id_product")); $html = $fetchtpl->getTableTemplate($id_product); $response = new stdClass(); $response-> $html; die($response); i tu kolejny problem bo bo sam ajax (JS) nie widzi 'response.html' tak jak jest to pokazane teraz w pliku, moge zwrocic tylko 'response' i tu wlasnie wgrywa mi w diva cala strone panelu. czyli sam ajax dziala ale nie dziala pobieranie tpl'a z fukcji getTableTemplate(); gdzie robie blad? Link to comment Share on other sites More sharing options...
atomek Posted October 2, 2020 Share Posted October 2, 2020 Na początek sprawdź czy AJAX.PHP coś zwraca. wg mnie na początku tego pliku warto dodać require_once dirname(__FILE__).'/../../config/config.inc.php'; require_once dirname(__FILE__).'/../../init.php'; poza tym sprawdź: 1. require_once(dirname(__FILE__).'/mymodule.php'); to jest główny kontroler modułu? 2. $fetchtpl = new fetchtpl(); gdzie to masz zdefiniowane? powinno być chyba odwołanie do klasy kontrolera modułu? 3. $response-> $html; to powinno być chyba tak jak poniżej: $response->html = $html; I pewnie jeszcze coś się znajdzie Link to comment Share on other sites More sharing options...
design4VIP Posted October 2, 2020 Author Share Posted October 2, 2020 oczywiscie dwie pierwsze linijki (require) tez mam, nie wrzucalem calosci tylko to co bylo istotne co do 2. to juz chyba zmecznie materialu oczywsicie poprawilem na $fetchtpl = new mymodule(); gdzies z rozpedu pojechalem za daleko 3. niby tak i nie.... to przy = traci sens STD w kazdym razie momo wprowadzonych porpawek rowniez z pkt 3 dla sprawdzenia, dalej dokladnie takie samo zachowanie, zwraca glowna storne panelu. jak sprawdzic co wykonuje PHP uruchomiony z ajaxa? var_dump, print_r, echo nie przynosi rezultatu Link to comment Share on other sites More sharing options...
atomek Posted October 2, 2020 Share Posted October 2, 2020 Punkt 3 powinien być ok, tak jak pisałem obiekt w parametrze die($response) nie przejdzie, przekonwertuj to do postaci json np: die(json_encode($response)); musisz to uwzględnić w skrypcie.js sprawdzić parametry i wynik skryptu możesz za pomocą firebuga (lub podobnego), w zakładce sieć. https://prnt.sc/us0o0c Link to comment Share on other sites More sharing options...
design4VIP Posted October 2, 2020 Author Share Posted October 2, 2020 a widzisz o sieci zapomnialem zazwyczaj trzymam sie inspektowa i konsoli ale tak czy tak, wielkie dzieki za pomoc. wczoraj juz bylem zmeczony i bledow w tym kodzie.... ale najbardozej nakierowal mnie pkt 2... tu to juz dalem ciala, ale tak samo z parametrem "link", po rozbiciu tpla na dwa osobne zapmnialem do drugiego dodac pole hidden z paramtrem ale dziwi mnie, ze w ogole nie wywalal bledu, ze brakuje mu pliku... po porawieniu sciezki pliku zaczyna to juz jakos dzialac. w kazdym razie samo ID zwraca jak nalezy teraz znowu wywala mi na wywolaniu funkcji $html = $vipsizechart->getTableTemplate($id_product); - "error Internal Server Error" jak wywale fukcje z pliku i dam jakiekolwiek "echo" to przelacza pieknie, czyli juz dziala teraz jak nalezy jeszcze raz wielkie dzieki za nakierowanie i zmuszenie do spojrzenia na to jeszcze raz z czystym umyslem. walzcze dalej z ta fukcja szablonu, ale mysle, ze juz blizej jak dalej Link to comment Share on other sites More sharing options...
design4VIP Posted October 2, 2020 Author Share Posted October 2, 2020 pelen sukces ! jeszcze raz dzieki za kazda z podpowiedzi, okazaly sie jak najbardizej przydatne i trafne.... zaczalem przygladac sie kodowi linijka po linijce i sam sie sobie dziwilem co ja wczoraj natworzylem ale przebudowalem cala fukcje pod json utworzylem calkiem nowa fukcje odczytu TPL, ale to juz wymuszenie zmiennymi, takze mniej istotne. w kazdym razie dla potomnych AJAX $('#id_sizeguide').change(function(e) { e.preventDefault(); var link = $('#link').val(); var id_product = $('#id_product').val(); var select_id_product = $(this).val(); $.ajax({ type: 'POST', dataType: "json", data: { select_id_product: select_id_product, id_product: id_product, ajax: true }, url: link+'fetch-ajax.php', success: function(response) { $('#fetch-container').html(response.html); }, complete: function() { }, error: function(jqXHR, textStatus, errorThrown) { if (textStatus != 'error' || errorThrown != '') { showErrorMessage(textStatus + ': ' + errorThrown); console.log(textStatus, errorThrown); } } }, false); }); PHP Ajaxa <?php require_once(dirname(__FILE__).'../../../config/config.inc.php'); require_once(dirname(__FILE__).'../../../init.php'); require_once(dirname(__FILE__).'/mymodule.php'); $mymodule = new mymodule(); $id_product_choice = (int)(Tools::getValue("select_id_product")); $id_product = (int)(Tools::getValue("id_product")); $html = $mymodule->getTemplate($id_product_choice, $id_product); $response = new stdClass(); $response->html = $html; die(json_encode($response)); Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now