Knuden Posted March 14, 2015 Share Posted March 14, 2015 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? 1 Link to comment Share on other sites More sharing options...
Denver Prophit Jr. Posted March 14, 2015 Share Posted March 14, 2015 Also getting that in 1.6.0.14 Link to comment Share on other sites More sharing options...
rocky Posted March 15, 2015 Share Posted March 15, 2015 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. Link to comment Share on other sites More sharing options...
Denver Prophit Jr. Posted March 15, 2015 Share Posted March 15, 2015 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. Link to comment Share on other sites More sharing options...
rocky Posted March 17, 2015 Share Posted March 17, 2015 Yes, it would be helpful if you sent me a private message with your manufacturer and product tables. Link to comment Share on other sites More sharing options...
Knuden Posted March 17, 2015 Author Share Posted March 17, 2015 I haven't change anything yet in the manufacturer, just begin to add products to my site Link to comment Share on other sites More sharing options...
Knuden Posted March 17, 2015 Author Share Posted March 17, 2015 I think I found a solution to my problem, I deleted what was installed by default in PrestaShop from the control panel catalog / manufacturers Link to comment Share on other sites More sharing options...
danrimer Posted March 19, 2015 Share Posted March 19, 2015 (edited) 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 March 19, 2015 by danrimer (see edit history) Link to comment Share on other sites More sharing options...
rocky Posted March 19, 2015 Share Posted March 19, 2015 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; 2 Link to comment Share on other sites More sharing options...
danrimer Posted March 19, 2015 Share Posted March 19, 2015 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... Link to comment Share on other sites More sharing options...
chipset Posted March 23, 2015 Share Posted March 23, 2015 (edited) For me also there are these 2 problems:1. PHP Notice: Undefined offset2. 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 March 23, 2015 by chipset (see edit history) Link to comment Share on other sites More sharing options...
danrimer Posted March 23, 2015 Share Posted March 23, 2015 @chipset - well said. That was what I was trying to say - you managed to say it much more concisely!! Link to comment Share on other sites More sharing options...
htatin Posted March 23, 2015 Share Posted March 23, 2015 The same error for me. Only the first Manufacturer by ID is well displayed Link to comment Share on other sites More sharing options...
mircomartinelli Posted March 26, 2015 Share Posted March 26, 2015 (edited) 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 March 26, 2015 by mircomartinelli (see edit history) 1 Link to comment Share on other sites More sharing options...
Ron morales Posted March 31, 2015 Share Posted March 31, 2015 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 Link to comment Share on other sites More sharing options...
danrimer Posted April 2, 2015 Share Posted April 2, 2015 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); } } 1 Link to comment Share on other sites More sharing options...
chipset Posted April 2, 2015 Share Posted April 2, 2015 (edited) 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 April 2, 2015 by chipset (see edit history) Link to comment Share on other sites More sharing options...
abondon Posted April 13, 2015 Share Posted April 13, 2015 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? Link to comment Share on other sites More sharing options...
Zengorius Posted August 8, 2015 Share Posted August 8, 2015 Great work @danrimer, thx u ! 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