Jump to content

Undefined offset - Manufacturer.php on line 213


Recommended Posts

I got this fail message: Notice: Undefined offset: 1 in /home/myhome/public_html/myhomepage/classes/Manufacturer.php on line 213

 

How to correct this fail? I have tried to reinstall manufacturer.hph file without result

 

I use Prestashop 1.6.0.13

 

Someone who know what to do?

  • Like 1

Share this post


Link to post
Share on other sites

I can't reproduce this issue on my PrestaShop v1.6.0.14 test site, though I'm just using the default products. I did, however, see many notices when I disabled all the products in the manufacturer. I'll post a bug report for them.

 

Can you give us more information on how many manufacturers you have and how many products are in them? There must be something about your manufacturers that is causing this notice. If your website is working despite the notice, you can simply disable development mode to hide it.

Share this post


Link to post
Share on other sites

It was an upgrade from 1.6.0.9 to 1.6.0.14 New store. Demo data removed. 7 Manufacturers added. One was removed because Canon was showing as the first one before Apple Inc which made no sense. Was then reinserted and showed up correctly. So again, no products. Let me know if you want a table dump.

Share this post


Link to post
Share on other sites

I'm getting this too, but many different values:

[Thu Mar 19 00:39:17 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 5 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:17 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 38 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:17 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 82 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:17 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 83 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:17 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 1 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:17 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 77 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:17 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 61 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:21 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 23 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:21 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 78 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:21 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 71 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:21 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 28 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:21 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 69 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:21 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 50 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:21 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 79 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:25 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 75 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:25 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 19 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:25 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 16 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
[Thu Mar 19 00:39:25 2015] [warn] [client 66.249.67.17] mod_fcgid: stderr: PHP Notice:  Undefined offset: 21 in /var/www/clients/client1/web8/web/classes/Manufacturer.php on line 213
and so on...
 
as you can see, google is trying to index the page and is failing :-(
 
I'm using version 1.6.0.14
Edited by danrimer (see edit history)

Share this post


Link to post
Share on other sites

Try changing lines 211-213 of classes/Manufacturer.php from:

            if (count($counts)) 
                foreach ($manufacturers as $key => $manufacturer) 
                    $manufacturers[$key]['nb_products'] = $counts[(int)$manufacturer['id_manufacturer']]; 

to:

            foreach ($manufacturers as $key => $manufacturer)
                $manufacturers[$key]['nb_products'] = isset($counts[(int)$manufacturer['id_manufacturer']]) ? $counts[(int)$manufacturer['id_manufacturer']] : 0;
  • Like 2

Share this post


Link to post
Share on other sites

 

Try changing lines 211-213 of classes/Manufacturer.php from:

            if (count($counts)) 
                foreach ($manufacturers as $key => $manufacturer) 
                    $manufacturers[$key]['nb_products'] = $counts[(int)$manufacturer['id_manufacturer']]; 

to:

            foreach ($manufacturers as $key => $manufacturer)
                $manufacturers[$key]['nb_products'] = isset($counts[(int)$manufacturer['id_manufacturer']]) ? $counts[(int)$manufacturer['id_manufacturer']] : 0;

Didn't work for me but the error is no longer logged.

 

The funny thing is that only one of the 67 manufacturers shows that it has any products (with or without your mod). This is the main manufacturer and it has >700 products. All the others have just a few but they are listed as "No products".

 

They all show up in the back office as having the correct number of products...

Share this post


Link to post
Share on other sites

For me also there are these 2 problems:
1. PHP Notice:  Undefined offset
2. 0 products in all manufacturers except one

 

 
 
The funny thing is that only one of the 67 manufacturers shows that it has any products (with or without your mod). This is the main manufacturer and it has >700 products. All the others have just a few but they are listed as "No products".
 

 

 

 

 

 

 

 

Edited by chipset (see edit history)

Share this post


Link to post
Share on other sites

same here,

temporary fix would be using the latest

 

public static function getManufacturers

 

from line 125 to line 191 inside this file

https://github.com/PrestaShop/PrestaShop/blob/1.6/classes/Manufacturer.php

/**
* Return manufacturers
*
* @param boolean $get_nb_products [optional] return products numbers for each
* @param int $id_lang
* @param bool $active
* @param int $p
* @param int $n
* @param bool $all_group
* @return array Manufacturers
*/
public static function getManufacturers($get_nb_products = false, $id_lang = 0, $active = true, $p = false, $n = false, $all_group = false, $group_by = false)
{
if (!$id_lang)
$id_lang = (int)Configuration::get('PS_LANG_DEFAULT');
if (!Group::isFeatureActive())
$all_group = true;
$manufacturers = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
SELECT m.*, ml.`description`, ml.`short_description`
FROM `'._DB_PREFIX_.'manufacturer` m
'.Shop::addSqlAssociation('manufacturer', 'm').'
INNER JOIN `'._DB_PREFIX_.'manufacturer_lang` ml ON (m.`id_manufacturer` = ml.`id_manufacturer` AND ml.`id_lang` = '.(int)$id_lang.')
'.($active ? 'WHERE m.`active` = 1' : '')
.($group_by ? ' GROUP BY m.`id_manufacturer`' : '' ).'
ORDER BY m.`name` ASC
'.($p ? ' LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n : ''));
if ($manufacturers === false)
return false;
if ($get_nb_products)
{
$sql_groups = '';
if (!$all_group)
{
$groups = FrontController::getCurrentCustomerGroups();
$sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');
}
$results = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
SELECT p.`id_manufacturer`, COUNT(DISTINCT p.`id_product`) as nb_products
FROM `'._DB_PREFIX_.'product` p USE INDEX (product_manufacturer)
'.Shop::addSqlAssociation('product', 'p').'
LEFT JOIN `'._DB_PREFIX_.'manufacturer` as m ON (m.`id_manufacturer`= p.`id_manufacturer`)
WHERE p.`id_manufacturer` != 0 AND product_shop.`visibility` NOT IN ("none")
'.($active ? ' AND product_shop.`active` = 1 ' : '').'
'.($all_group ? '' : ' AND EXISTS (
SELECT 1
FROM `'._DB_PREFIX_.'category_group` cg
LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
WHERE p.`id_product` = cp.`id_product` AND cg.`id_group` '.$sql_groups.'
)').'
GROUP BY p.`id_manufacturer`'
);
$counts = array();
foreach ($results as $result)
$counts[(int)$result['id_manufacturer']] = (int)$result['nb_products'];
if (count($counts))
foreach ($manufacturers as $key => $manufacturer)
if (array_key_exists((int)$manufacturer['id_manufacturer'], $counts))
$manufacturers[$key]['nb_products'] = $counts[(int)$manufacturer['id_manufacturer']];
else
$manufacturers[$key]['nb_products'] = 0;
}
$total_manufacturers = count($manufacturers);
$rewrite_settings = (int)Configuration::get('PS_REWRITING_SETTINGS');
for ($i = 0; $i < $total_manufacturers; $i++)
$manufacturers[$i]['link_rewrite'] = ($rewrite_settings ? Tools::link_rewrite($manufacturers[$i]['name']) : 0);
return $manufacturers;
}

Manufacturers Page will display correctly but i don't know if this mod can corrupt your db in some way.

So backup.

Edited by mircomartinelli (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

 

Try changing lines 211-213 of classes/Manufacturer.php from:

            if (count($counts)) 
                foreach ($manufacturers as $key => $manufacturer) 
                    $manufacturers[$key]['nb_products'] = $counts[(int)$manufacturer['id_manufacturer']]; 

to:

            foreach ($manufacturers as $key => $manufacturer)
                $manufacturers[$key]['nb_products'] = isset($counts[(int)$manufacturer['id_manufacturer']]) ? $counts[(int)$manufacturer['id_manufacturer']] : 0;

Perfect work

Share this post


Link to post
Share on other sites

I've managed to fix mine... using the fix above and incorporating the latest version on Github...

 

replace the contents of Manufacturers.php and make sure you delete /cache/class_index.php !!

<?php
/*
* 2007-2015 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <[email protected]>
*  @copyright  2007-2015 PrestaShop SA
*  @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/

class ManufacturerCore extends ObjectModel
{
	public $id;

	/** @var integer manufacturer ID //FIXME is it really usefull...? */
	public $id_manufacturer;

	/** @var string Name */
	public $name;

	/** @var string A description */
	public $description;

	/** @var string A short description */
	public $short_description;

	/** @var int Address */
	public $id_address;

	/** @var string Object creation date */
	public $date_add;

	/** @var string Object last modification date */
	public $date_upd;

	/** @var string Friendly URL */
	public $link_rewrite;

	/** @var string Meta title */
	public $meta_title;

	/** @var string Meta keywords */
	public $meta_keywords;

	/** @var string Meta description */
	public $meta_description;

	/** @var boolean active */
	public $active;

	/**
	 * @see ObjectModel::$definition
	 */
	public static $definition = array(
		'table' => 'manufacturer',
		'primary' => 'id_manufacturer',
		'multilang' => true,
		'fields' => array(
			'name' => 				array('type' => self::TYPE_STRING, 'validate' => 'isCatalogName', 'required' => true, 'size' => 64),
			'active' => 			array('type' => self::TYPE_BOOL),
			'date_add' => 			array('type' => self::TYPE_DATE),
			'date_upd' => 			array('type' => self::TYPE_DATE),

			// Lang fields
			'description' => 		array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),
			'short_description' => 	array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),
			'meta_title' => 		array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128),
			'meta_description' => 	array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),
			'meta_keywords' => 		array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName'),
		),
	);

	protected $webserviceParameters = array(
		'fields' => array(
			'active' => array(),
			'link_rewrite' => array('getter' => 'getLink', 'setter' => false),
		),
		'associations' => array(
			'addresses' => array('resource' => 'address', 'setter' => false, 'fields' => array(
				'id' => array('xlink_resource' => 'addresses'),
			)),
		),
	);

	public function __construct($id = null, $id_lang = null)
	{
		parent::__construct($id, $id_lang);

		$this->link_rewrite = $this->getLink();
		$this->image_dir = _PS_MANU_IMG_DIR_;
	}

	public function delete()
	{
		$address = new Address($this->id_address);

		if (Validate::isLoadedObject($address) AND !$address->delete())
			return false;

		if (parent::delete())
		{
			CartRule::cleanProductRuleIntegrity('manufacturers', $this->id);
			return $this->deleteImage();
		}
	}

	/**
	 * Delete several objects from database
	 *
	 * return boolean Deletion result
	 */
	public function deleteSelection($selection)
	{
		if (!is_array($selection))
			die(Tools::displayError());

		$result = true;
		foreach ($selection as $id)
		{
			$this->id = (int)$id;
			$this->id_address = Manufacturer::getManufacturerAddress();
			$result = $result && $this->delete();
		}

		return $result;
	}

	protected function getManufacturerAddress()
	{
		if (!(int)$this->id)
			return false;

		return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('SELECT `id_address` FROM '._DB_PREFIX_.'address WHERE `id_manufacturer` = '.(int)$this->id);
	}

	/**
	  * Return manufacturers
	  *
	  * @param boolean $get_nb_products [optional] return products numbers for each
	  * @param int $id_lang
	  * @param bool $active
	  * @param int $p
	  * @param int $n
	  * @param bool $all_group
	  * @return array Manufacturers
	  */
	public static function getManufacturers($get_nb_products = false, $id_lang = 0, $active = true, $p = false, $n = false, $all_group = false, $group_by = false)
	{
		if (!$id_lang)
			$id_lang = (int)Configuration::get('PS_LANG_DEFAULT');
		if (!Group::isFeatureActive())
			$all_group = true;

		$manufacturers = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
		SELECT m.*, ml.`description`, ml.`short_description`
		FROM `'._DB_PREFIX_.'manufacturer` m
		'.Shop::addSqlAssociation('manufacturer', 'm').'
		INNER JOIN `'._DB_PREFIX_.'manufacturer_lang` ml ON (m.`id_manufacturer` = ml.`id_manufacturer` AND ml.`id_lang` = '.(int)$id_lang.')
		'.($active ? 'WHERE m.`active` = 1' : '')
		.($group_by ? ' GROUP BY m.`id_manufacturer`' : '' ).'
		ORDER BY m.`name` ASC
		'.($p ? ' LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n : ''));
		if ($manufacturers === false)
			return false;

		if ($get_nb_products)
		{
			$sql_groups = '';
			if (!$all_group)
			{
				$groups = FrontController::getCurrentCustomerGroups();
				$sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');
			}

			$results = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
					SELECT  p.`id_manufacturer`, COUNT(DISTINCT p.`id_product`) as nb_products
					FROM `'._DB_PREFIX_.'product` p USE INDEX (product_manufacturer)
					'.Shop::addSqlAssociation('product', 'p').'
					LEFT JOIN `'._DB_PREFIX_.'manufacturer` as m ON (m.`id_manufacturer`= p.`id_manufacturer`)
					WHERE p.`id_manufacturer` != 0 AND product_shop.`visibility` NOT IN ("none")
					'.($active ? ' AND product_shop.`active` = 1 ' : '').'
					'.($all_group ? '' : ' AND EXISTS (
						SELECT 1
						FROM `'._DB_PREFIX_.'category_group` cg
						LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
						WHERE p.`id_product` = cp.`id_product` AND cg.`id_group` '.$sql_groups.'
					)').'
					GROUP BY p.`id_manufacturer`'
				);

			$counts = array();
			foreach ($results as $result)
				$counts[(int)$result['id_manufacturer']] = (int)$result['nb_products'];

				foreach ($manufacturers as $key => $manufacturer)
                $manufacturers[$key]['nb_products'] = isset($counts[(int)$manufacturer['id_manufacturer']]) ? $counts[(int)$manufacturer['id_manufacturer']] :0;
		}

		$total_manufacturers = count($manufacturers);
		$rewrite_settings = (int)Configuration::get('PS_REWRITING_SETTINGS');
		for ($i = 0; $i < $total_manufacturers; $i++)
			$manufacturers[$i]['link_rewrite'] = ($rewrite_settings ? Tools::link_rewrite($manufacturers[$i]['name']) : 0);
		return $manufacturers;
	}

	/**
	  * Return name from id
	  *
	  * @param integer $id_manufacturer Manufacturer ID
	  * @return string name
	  */
	static protected $cacheName = array();
	public static function getNameById($id_manufacturer)
	{
		if (!isset(self::$cacheName[$id_manufacturer]))
			self::$cacheName[$id_manufacturer] = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
				SELECT `name`
				FROM `'._DB_PREFIX_.'manufacturer`
				WHERE `id_manufacturer` = '.(int)$id_manufacturer.'
				AND `active` = 1'
			);

		return self::$cacheName[$id_manufacturer];
	}

	public static function getIdByName($name)
	{
		$result = Db::getInstance()->getRow('
			SELECT `id_manufacturer`
			FROM `'._DB_PREFIX_.'manufacturer`
			WHERE `name` = \''.pSQL($name).'\''
		);

		if (isset($result['id_manufacturer']))
			return (int)$result['id_manufacturer'];

		return false;
	}

	public function getLink()
	{
		return Tools::link_rewrite($this->name);
	}

	public static function getProducts($id_manufacturer, $id_lang, $p, $n, $order_by = null, $order_way = null,
		$get_total = false, $active = true, $active_category = true, Context $context = null)
	{
		if (!$context)
			$context = Context::getContext();

		$front = true;
		if (!in_array($context->controller->controller_type, array('front', 'modulefront')))
			$front = false;

		if ($p < 1)
			$p = 1;

	 	if (empty($order_by) || $order_by == 'position')
	 		$order_by = 'name';

	 	if (empty($order_way)) $order_way = 'ASC';

		if (!Validate::isOrderBy($order_by) || !Validate::isOrderWay($order_way))
			die (Tools::displayError());

		$groups = FrontController::getCurrentCustomerGroups();
		$sql_groups = count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1';

		/* Return only the number of products */
		if ($get_total)
		{
			$sql = '
				SELECT p.`id_product`
				FROM `'._DB_PREFIX_.'product` p
				'.Shop::addSqlAssociation('product', 'p').'
				WHERE p.id_manufacturer = '.(int)$id_manufacturer
				.($active ? ' AND product_shop.`active` = 1' : '').'
				'.($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '').'
				AND p.`id_product` IN (
					SELECT cp.`id_product`
					FROM `'._DB_PREFIX_.'category_group` cg
					LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)'.
					($active_category ? ' INNER JOIN `'._DB_PREFIX_.'category` ca ON cp.`id_category` = ca.`id_category` AND ca.`active` = 1' : '').'
					WHERE cg.`id_group` '.$sql_groups.'
				)';

			$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
			return (int)count($result);
		}
		if (strpos($order_by, '.') > 0)
		{
			$order_by = explode('.', $order_by);
			$order_by = pSQL($order_by[0]).'.`'.pSQL($order_by[1]).'`';
		}
		$alias = '';
		if ($order_by == 'price')
			$alias = 'product_shop.';
		elseif ($order_by == 'name')
			$alias = 'pl.';
		elseif ($order_by == 'manufacturer_name')
		{
			$order_by = 'name';
			$alias = 'm.';
		}
		elseif ($order_by == 'quantity')
			$alias = 'stock.';
		else
			$alias = 'p.';

		$sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity'
			.(Combination::isFeatureActive() ? ', MAX(product_attribute_shop.minimal_quantity) AS product_attribute_minimal_quantity' : '')
			.', MAX(product_attribute_shop.`id_product_attribute`) id_product_attribute
			, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`,
			pl.`meta_title`, pl.`name`, pl.`available_now`, pl.`available_later`, MAX(image_shop.`id_image`) id_image, il.`legend`, m.`name` AS manufacturer_name,
				DATEDIFF(
					product_shop.`date_add`,
					DATE_SUB(
						NOW(),
						INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY
					)
				) > 0 AS new'.(Combination::isFeatureActive() ? ',MAX(product_attribute_shop.minimal_quantity) AS product_attribute_minimal_quantity' : '')
			.' FROM `'._DB_PREFIX_.'product` p
			'.Shop::addSqlAssociation('product', 'p').
			(Combination::isFeatureActive() ?
			'LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa
				ON (p.`id_product` = pa.`id_product`)
			'.Shop::addSqlAssociation('product_attribute', 'pa', false, 'product_attribute_shop.`default_on` = 1') : '').'
			LEFT JOIN `'._DB_PREFIX_.'product_lang` pl
				ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').')
			LEFT JOIN `'._DB_PREFIX_.'image` i
				ON (i.`id_product` = p.`id_product`)'.
			Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').'
			LEFT JOIN `'._DB_PREFIX_.'image_lang` il
				ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$id_lang.')
			LEFT JOIN `'._DB_PREFIX_.'manufacturer` m
				ON (m.`id_manufacturer` = p.`id_manufacturer`)
			'.Product::sqlStock('p', 0);

			if (Group::isFeatureActive() || $active_category)
			{
				$sql .= 'JOIN `'._DB_PREFIX_.'category_product` cp ON (p.id_product = cp.id_product)';
				if (Group::isFeatureActive())
					$sql .= 'JOIN `'._DB_PREFIX_.'category_group` cg ON (cp.`id_category` = cg.`id_category` AND cg.`id_group` '.$sql_groups.')';
				if ($active_category)
					$sql .= 'JOIN `'._DB_PREFIX_.'category` ca ON cp.`id_category` = ca.`id_category` AND ca.`active` = 1';
			}

		$sql .= '
				WHERE p.`id_manufacturer` = '.(int)$id_manufacturer.'
				'.($active ? ' AND product_shop.`active` = 1' : '').'
				'.($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '').'
				GROUP BY product_shop.id_product
				ORDER BY '.$alias.'`'.bqSQL($order_by).'` '.pSQL($order_way).'
				LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n;

		$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);

		if (!$result)
			return false;

		if ($order_by == 'price')
			Tools::orderbyPrice($result, $order_way);

		return Product::getProductsProperties($id_lang, $result);
	}

	public function getProductsLite($id_lang)
	{
		$context = Context::getContext();
		$front = true;
		if (!in_array($context->controller->controller_type, array('front', 'modulefront')))
			$front = false;

		return Db::getInstance()->executeS('
		SELECT p.`id_product`,  pl.`name`
		FROM `'._DB_PREFIX_.'product` p
		'.Shop::addSqlAssociation('product', 'p').'
		LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (
			p.`id_product` = pl.`id_product`
			AND pl.`id_lang` = '.(int)$id_lang.$context->shop->addSqlRestrictionOnLang('pl').'
		)
		WHERE p.`id_manufacturer` = '.(int)$this->id.
		($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : ''));
	}

	/*
	* Specify if a manufacturer already in base
	*
	* @param $id_manufacturer Manufacturer id
	* @return boolean
	*/
	public static function manufacturerExists($id_manufacturer)
	{
		$row = Db::getInstance()->getRow('
			SELECT `id_manufacturer`
			FROM '._DB_PREFIX_.'manufacturer m
			WHERE m.`id_manufacturer` = '.(int)$id_manufacturer
		);

		return isset($row['id_manufacturer']);
	}

	public function getAddresses($id_lang)
	{
		return Db::getInstance()->executeS('
			SELECT a.*, cl.name AS `country`, s.name AS `state`
			FROM `'._DB_PREFIX_.'address` AS a
			LEFT JOIN `'._DB_PREFIX_.'country_lang` AS cl ON (
				cl.`id_country` = a.`id_country`
				AND cl.`id_lang` = '.(int)$id_lang.'
			)
			LEFT JOIN `'._DB_PREFIX_.'state` AS s ON (s.`id_state` = a.`id_state`)
			WHERE `id_manufacturer` = '.(int)$this->id.'
			AND a.`deleted` = 0'
		);
	}

	public function getWsAddresses()
	{
		return Db::getInstance()->executeS('
			SELECT a.id_address as id
			FROM `'._DB_PREFIX_.'address` AS a
			'.Shop::addSqlAssociation('manufacturer', 'a').'
			WHERE a.`id_manufacturer` = '.(int)$this->id.'
			AND a.`deleted` = 0'
		);
	}

	public function setWsAddresses($id_addresses)
	{
		$ids = array();

		foreach ($id_addresses as $id)
			$ids[] = (int)$id['id'];

		$result1 = (Db::getInstance()->execute('
			UPDATE `'._DB_PREFIX_.'address`
			SET id_manufacturer = 0
			WHERE id_manufacturer = '.(int)$this->id.'
			AND deleted = 0') !== false
		);

		$result2 = true;
		if (count($ids))
			$result2 = (Db::getInstance()->execute('
				UPDATE `'._DB_PREFIX_.'address`
				SET id_customer = 0, id_supplier = 0, id_manufacturer = '.(int)$this->id.'
				WHERE id_address IN('.implode(',', $ids).')
				AND deleted = 0') !== false
			);

		return ($result1 && $result2);
	}
}

  • Like 1

Share this post


Link to post
Share on other sites

Thank you danrimer, it working and display the real products count!

 

 

I've managed to fix mine... using the fix above and incorporating the latest version on Github...

 

replace the contents of Manufacturers.php and make sure you delete /cache/class_index.php !!

<?php...
Edited by chipset (see edit history)

Share this post


Link to post
Share on other sites

  • 2 weeks later...

type "prestashop Undefined index: nb_products in" in google and discover that most of the supplier pages on prestashop on the web got screwed up ...

seems to me it's the same problem as i came with an upgrade ...

Prestashop instabilities and bugs do not cease to amaze me ... maybe my site will get released some day ... in the meantime Any "official"  fix ahead?

Share this post


Link to post
Share on other sites

  • 3 months 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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More