Jump to content

[1.7] przeladowanie tpl wewnatrz tpl przez ajax


design4VIP

Recommended Posts

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.... .
obraz.thumb.png.2e624e874ca4bc3be9d4ba634c7e99c2.png

 


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?

 

obraz.png

Link to comment
Share on other sites

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

oczywiscie dwie pierwsze linijki (require) tez mam, nie wrzucalem calosci tylko to co bylo istotne

 

co do 2. to juz chyba zmecznie materialu :D oczywsicie poprawilem na $fetchtpl = new mymodule(); gdzies z rozpedu pojechalem za daleko :D

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

a widzisz :D o sieci zapomnialem :D 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 :D 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 :D 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 :D

Link to comment
Share on other sites

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 :D   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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...