stefanopsc Posted August 23, 2019 Share Posted August 23, 2019 Hello everybody! I am trying to sort the product list from a single manufacturer by date_add, where default is name. I've edited the SQL query in class/manufacturer.php but no matter what it still sorts by name. My code is: public static function getProducts( $idManufacturer, $idLang, $p, $n, $orderBy = null, $orderWay = null, $getTotal = false, $active = true, $activeCategory = 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($orderBy) || $orderBy == 'position') { $orderBy = 'date_add'; } if (empty($orderWay)) { $orderWay = 'DESC'; } if (!Validate::isOrderBy($orderBy) || !Validate::isOrderWay($orderWay)) { die(Tools::displayError()); } $groups = FrontController::getCurrentCustomerGroups(); $sqlGroups = count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1'; /* Return only the number of products */ if ($getTotal) { $sql = ' SELECT p.`id_product` FROM `'._DB_PREFIX_.'product` p '.Shop::addSqlAssociation('product', 'p').' WHERE p.id_manufacturer = '.(int) $idManufacturer .($active ? ' AND product_shop.`active` = 1' : '').' '.($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '').' AND EXISTS ( SELECT 1 FROM `'._DB_PREFIX_.'category_group` cg LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)'. ($activeCategory ? ' INNER JOIN `'._DB_PREFIX_.'category` ca ON cp.`id_category` = ca.`id_category` AND ca.`active` = 1' : '').' WHERE p.`id_product` = cp.`id_product` AND cg.`id_group` '.$sqlGroups.' )'; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); return (int) count($result); } if (strpos($orderBy, '.') > 0) { $orderBy = explode('.', $orderBy); $orderBy = pSQL($orderBy[0]).'.`'.pSQL($orderBy[1]).'`'; } if ($orderBy == 'price') { $alias = 'product_shop.'; } elseif ($orderBy == 'name') { $alias = 'pl.'; } elseif ($orderBy == 'manufacturer_name') { $orderBy = 'name'; $alias = 'm.'; } elseif ($orderBy == 'quantity') { $alias = 'stock.'; } else { $alias = 'p.'; } $sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity' .(Combination::isFeatureActive() ? ', product_attribute_shop.minimal_quantity AS product_attribute_minimal_quantity, IFNULL(product_attribute_shop.`id_product_attribute`,0) 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`, image_shop.`id_image` id_image, il.`legend`, m.`name` AS manufacturer_name, DATEDIFF( product_shop.`date_add`, DATE_SUB( "'.date('Y-m-d').' 00:00:00", 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_.'product` p '.Shop::addSqlAssociation('product', 'p'). (Combination::isFeatureActive() ? 'LEFT JOIN `'._DB_PREFIX_.'product_attribute_shop` product_attribute_shop ON (p.`id_product` = product_attribute_shop.`id_product` AND product_attribute_shop.`default_on` = 1 AND product_attribute_shop.id_shop='.(int)$context->shop->id.')':'').' LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int) $idLang.Shop::addSqlRestrictionOnLang('pl').') LEFT JOIN `'._DB_PREFIX_.'image_shop` image_shop ON (image_shop.`id_product` = p.`id_product` AND image_shop.cover=1 AND image_shop.id_shop='.(int)$context->shop->id.') LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (image_shop.`id_image` = il.`id_image` AND il.`id_lang` = '.(int) $idLang.') LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`) '.Product::sqlStock('p', 0); if (Group::isFeatureActive() || $activeCategory) { $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` '.$sqlGroups.')'; } if ($activeCategory) { $sql .= 'JOIN `'._DB_PREFIX_.'category` ca ON cp.`id_category` = ca.`id_category` AND ca.`active` = 1'; } } $sql .= ' WHERE p.`id_manufacturer` = '.(int) $idManufacturer.' '.($active ? ' AND product_shop.`active` = 1' : '').' '.($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '').' GROUP BY p.id_product ORDER BY '.$alias.'`'.bqSQL($orderBy).'` '.pSQL($orderWay).' LIMIT '.(((int) $p - 1) * (int) $n).','.(int) $n; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); if (!$result) { return false; } if ($orderBy == 'price') { Tools::orderbyPrice($result, $orderWay); } return Product::getProductsProperties($idLang, $result); } I can see there is no alias for date_add, but I can't say if this is the problem. Any help would be appreciated! Thank you! 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