Jota. Posted July 13, 2014 Share Posted July 13, 2014 Hello, I'm working in a store (prestashop version 1.6.06 ) with products that have a lot of accessories, I have noticed that prestashop 1.6 shows the accessories ordered by product id, and that would be very annoying for my customers.. I want to order accessories by product name, I have tried editing Products.php in classes, without success :-( , i'm very basic at php so any help will be welcome. Thanks in advance! Link to comment Share on other sites More sharing options...
vekia Posted July 13, 2014 Share Posted July 13, 2014 classes/product.php there is a function: public function getAccessories($id_lang, $active = true, Context $context = null) { if (!$context) $context = Context::getContext(); $sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, 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, cl.`name` AS category_default, DATEDIFF( p.`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 FROM `'._DB_PREFIX_.'accessory` LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = `id_product_2` '.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.Shop::addSqlRestrictionOnLang('pl').' ) LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON ( product_shop.`id_category_default` = cl.`id_category` AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').' ) 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 (p.`id_manufacturer`= m.`id_manufacturer`) '.Product::sqlStock('p', 0).' WHERE `id_product_1` = '.(int)$this->id. ($active ? ' AND product_shop.`active` = 1 AND product_shop.`visibility` != \'none\'' : '').' GROUP BY product_shop.id_product'; if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql)) return false; foreach ($result as &$row) $row['id_product_attribute'] = Product::getDefaultAttribute((int)$row['id_product']); return $this->getProductsProperties($id_lang, $result); } add there ORDER BY condition: ORDER BY pl.`name` Link to comment Share on other sites More sharing options...
Jota. Posted July 14, 2014 Author Share Posted July 14, 2014 Thanks Vekia, but I tried this before and I only get a blank screen. Where inside the function must I place the ORDER BY pl.`name` line of code? I have tried in several places always getting the blank screen. Thanks in advance. Link to comment Share on other sites More sharing options...
Jota. Posted August 2, 2014 Author Share Posted August 2, 2014 Hello again, and sorry for the insistence, but I have been trying the proposed solution and it doesn't work, I always get a blank screen, I have tried ORDER BY pl.`name` in every position of this code without any success. Any help? Link to comment Share on other sites More sharing options...
vekia Posted August 3, 2014 Share Posted August 3, 2014 whre you added this condition? can you show your modified code, please? Link to comment Share on other sites More sharing options...
Recommended Posts