Как сделать сортировку одновременно по цене и наличию?

Что-то не работает...(
Вот скрин коду з файла product.php: подскажите что не так.
upload_2016-1-18_22-14-49.png
 
А зачем тебе GROUP BY? Скрин у меня видел? Просто повтори так же.
И текст ошибки неплохо бы увидеть, а то получается тупнячок.
Так бы уже можно было помочь, но приходится уточнять, вытягивать клещами дополнительные данные!
Не стесняйся выдавать максимум инфы!
Мы верим в тебя! Ты сможешь! ;)
 
Сделал как у Вас... Никакой ошыбки. Но не работает.....

Код:
public function getAccessories($id_lang, $active = true, Context $context = null)
    {
        $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\'' : '').'
                ORDER BY product_shop.`price` != 0 DESC, stock.`quantity` != 0 DESC';
               

        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);
    }
 
Самое главное - что ты хочешь получить? Давай начнём с этого.
Не знаю уровня твоих знаний, поэтому спрошу: ты понимаешь что выбирает эта функция и где это появляется?
Учитывая твою фразу выше:
..надо, каких товаров нет в наличии, те чтобы были в конце...
ты не вполне понимаешь "откуда ноги растут". :)
getAccessories - выбирает т.н. - аксессуары, прикреплённые к определённому товару, назначаемые в админке, в разделе: Каталог - Товары - Товар - вкладка Связи - Сопутствующие товары.
Тебе же, насколько я понял, необходимо править classes\Category.php - getProducts (строка 688 +/-) и вставить требуемый код также в конец выборки. Обрати внимание на 1й скрин, а не 2й! ;)

Если же ты используешь стандартный модуль фильтров blocklayered - ищи в modules\blocklayered\blocklayered.php функцию getProductByFilters и уже внутри найди в строке 2034 (+/-)
Код:
if (version_compare(_PS_VERSION_, '1.6.1', '>=') === true)
Вставь ВЫШЕ следующее
Код:
if($order_by=='cp.position'){
      $order_by = 'product_shop.`price` != 0 DESC, stock.`quantity` != 0 DESC';
      $order_way = '';
}
 
Мне нужно отсортировать товары как есть, только те, которых нет в наличии - были в конце.
Сортировка по цене - не нужно.
Я использую blocklayered, и файл classes\Category.php - getProducts (строка 688 +/-) тоже правил. не помогло. (мой код от вашого немного отличался)
Зделал это :
Код:
if($order_by=='cp.position'){
      $order_by = 'product_shop.`price` != 0 DESC, stock.`quantity` != 0 DESC';
      $order_way = '';
}
тоже не работает...(
 
Помогите пожалуйста, очень нужно.
 
Делал через classes\Category.php
if ($random === true) {
$sql .= ' ORDER BY RAND() LIMIT '.(int)$random_number_products;
} else {
$sql .= ' ORDER BY qq DESC, pl.name desc,'.(!empty($order_by_prefix) ? $order_by_prefix.'.' : '').'`'.bqSQL($order_by).'` '.pSQL($order_way).'
LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n;
}
$sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) AS quantity, if(stock.quantity=0 , 0, 1) AS qq'.(Combination::isFeatureActive() ? ', IFNULL(product_attribute_shop.id_product_attribute, 0) AS id_product_attribute,
Жирным выделил изменения. Сортировка по наличию и алфавиту. Если по алфавиту не нужно, то удали это: pl.name desc, Проверено на ps 1.6.1.4
 
Назад
Сверху