Jump to content

Getting no product list in Module


Recommended Posts

Hi, i have a problem concerning a module called PM_advancedpack, we've contacted the creator but they do not give support for older prestashop versions.
The problem we have with the module is as follows, when creating a new productpack, you have to choose what products you want into the pack, and there is where it goes wrong.

We cannot choose the products, when i click on CHOOSE button, nothing happens.
There is file called ajax.php that should be getting the products from the database.

And there is a file AdminAdvancedPack.php that is getting the results from ajax.php and should be displaying them (no, no TPL involved).
But all we are getting is a empty product list, were should i start looking ?
This is the ajax.php file



if (isset($_GET['ajaxProduct']))

	$currentIndex = 'index.php?tab=AdminCatalog';
	$jsonArray = array();

	$products = Db::getInstance()->ExecuteS('
	SELECT p.`id_product`, pl.`name`, pl.`link_rewrite`, p.`reference`, i.`id_image`
	FROM `'._DB_PREFIX_.'product` p
	NATURAL LEFT JOIN `'._DB_PREFIX_.'product_lang` pl
	LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
	WHERE pl.`id_lang` = '.intval(Tools::getValue('id_lang')).'');

	foreach ($products AS $accessory) {
		$curQty = Product::getQuantity($accessory['id_product']);
		if(_PS_VERSION_ < '1.4.3')
		$jsonArray[] = array("value"=>intval($accessory['id_product']).'-'.$accessory['name'].'-'.$accessory['reference'].' (stock : '.$curQty.')|'.$accessory['id_image'].'¤'.AdvancedPackClass::isProductPackPage($accessory['id_product']),"text"=>intval($accessory['id_product']).' - '.$accessory['name'].' - '.$accessory['reference'].' (stock : '.$curQty.')');
			$jsonArray[] = array("value"=>intval($accessory['id_product']).'-'.$accessory['name'].'-'.$accessory['reference'].' (stock : '.$curQty.')|'.$link->getImageLink($accessory['link_rewrite'], Product::defineProductImage($accessory, Tools::getValue('id_lang')),'small').'¤'.AdvancedPackClass::isProductPackPage($accessory['id_product']),"text"=>intval($accessory['id_product']).' - '.$accessory['name'].' - '.$accessory['reference'].' (stock : '.$curQty.')');
	echo json_encode($jsonArray);
if (isset($_GET['ajaxImage'],$_GET['id_product']))
	$id_product = intval($_GET['id_product']);
	$id_image = intval($_GET['id_image']);
	$images = Image::getImages(intval($cookie->id_lang), $id_product);
	$imagesTotal = Image::getImagesTotal($id_product);
	if (sizeof($images)) {
		echo '<select name="imgs_product[]" onchange="changeProductImg(this);">';
		foreach ($images AS $k => $image) {

			echo'<option value="'.intval($image['id_image']).'" '.($id_image == $image['id_image']?'selected=selected':'').'>'.$image['legend'].'</option>';
		echo '</select>';
Link to comment
Share on other sites

I expect the problem is in the SQL string.




The string is spread over multiple lines. (i.e. there's a newline inside the string) Javascript doesn't like that. Either make it all on one line, like:


    $products = Db::getInstance()->ExecuteS(' SELECT p.`id_product`, pl.`name`, pl.`link_rewrite`, p.`reference`, i.`id_image` FROM `'._DB_PREFIX_.'product` p NATURAL LEFT JOIN `'._DB_PREFIX_.'product_lang` pl LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1) WHERE pl.`id_lang` = '.intval(Tools::getValue('id_lang')).'');



or end every line with a  \



    $products = Db::getInstance()->ExecuteS(' \
    SELECT p.`id_product`, pl.`name`, pl.`link_rewrite`, p.`reference`, i.`id_image`
    FROM `'._DB_PREFIX_.'product` p \
    NATURAL LEFT JOIN `'._DB_PREFIX_.'product_lang` pl \
    LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1) \
    WHERE pl.`id_lang` = '.intval(Tools::getValue('id_lang')).'');

Hope this does the trick,
Link to comment
Share on other sites

Hi, thank you for your answer, i've tried that but unfortunately, still no difference, i will post, the piece of code from the php file that loads the ajax.php


					<div class="clear"> </div>
							<script type="text/javascript">
								var formProduct;
								var accessories = new Array();
								function showReducOptions(e) {
									if($(e).val() && $(e).val()!=3) {
									}else {
								var filled = false;
								function fillAccessories()
									if(filled) return;
										function(j) {
											filled = true;
											for (var i = 0; i < j.length; i++)
												accessories[i] = new Array(j[i].value, j[i].text);

											formProductSelection = document.layers ? document.forms.discount : document.discount;
											formProductSelection.selectProductSelection.length = accessories.length + 1;
											for (i = 0, j = 0; i < accessories.length; i++)
												if (formProductSelection.filter.value)
													if (accessories[i][1].toLowerCase().indexOf(formProductSelection.filter.value.toLowerCase()) == -1)
												formProductSelection.selectProductSelection.options[j].value = accessories[i][0];
												formProductSelection.selectProductSelection.options[j].text = accessories[i][1];
											if (j == 0)
												formProductSelection.selectProductSelection.length = 2;
												formProductSelection.selectProductSelection.options[1].value = -1;
												formProductSelection.selectProductSelection.options[1].text = \''.$this->l('No match found').'\';
												formProductSelection.selectProductSelection.options.selectedIndex = 1;
												formProductSelection.selectProductSelection.length = j;
												formProductSelection.selectProductSelection.options.selectedIndex = (formProductSelection.filter.value == \'\' ? 0 : 0);
							<select id="selectProductSelection" name="selectProductSelection" style="width: 380px;" onfocus="fillAccessories();">
								<option value="0" selected="selected">-- '.$this->l('Choose').' --</option>
							<span onclick="addProductToSelection('.($obj->id ? $obj->id : 0).');" style="cursor: pointer;"><img src="../img/admin/add.gif" alt="'.$this->l('Add an accessory').'" title="'.$this->l('Add an accessory').'" /></span>
							<br />'.$this->l('Filter:').' <input type="text" size="25" name="filter" onkeyup="filled = false;fillAccessories();" class="space" />
							<input type="hidden" value="" name="inputProductsSelection" id="inputProductsSelection" />
Link to comment
Share on other sites

  • 3 weeks later...

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...