Вывести первыми два товара

#
Вывести первыми два товара
Добрый день .есть два товара на которые необходимо сделать акцент в продажах. Товары расположены в разных группах на сайте. Подскажите могу ли я каким то образом, их вывести первыми в группах, где они присутствуют и на страницах фильтрации. Т.е. если они есть в выборке, они должны быть первыми двумя в списке.
Мысли были убрать их из общего списка и добавить в контроллер, вот условия немного не понимаю как составить, чтобы проверить что они есть в текущей выборке товаров. Также думаю по быстродействию этот способ не будет тормозить загрузку страниц каталога.
#
Re: Вывести первыми два товара
Как вариант можете создать доп свойство типа флаг и по нему сортировать в ТДС .
«Не выходи из комнаты, не совершай ошибку…»
#
Re: Вывести первыми два товара
llirik писал(а):
Вы имеете ввиду, сделать выборку этих двух товаров и добавить их в XML?
#
Re: Вывести первыми два товара
Нет, нужно же сортировать на страницах где они уже есть? Если так то сортировать так по доп свойству https://www.hostcms.ru/documentation/modules/properties/order-by-property/
«Не выходи из комнаты, не совершай ошибку…»
#
Re: Вывести первыми два товара
Данный код не сортирует элементы, а почему то оставляет только два у которых включено свойство(тип галочка).
Также в каталоге есть сортировка по наличию  $Shop_Controller_Show->orderBy('in_stock';
Получается даже если я заставлю работать эту сортировку - она сотрет по наличию. Мб есть какой то метод, проверить есть ли в выборке - два товара по их id. Если они есть, я бы просто делал ограничение, чтобы они не попадали в общий список и добавлял бы их в xml и выводил первыми в списке. Я вижу это решение как вариант, не нарушая остальные сортировки.
$Shop_Controller_Show
     ->shopItems()
     ->queryBuilder()
     ->leftJoin('shop_item_properties', 'shop_items.shop_id', '=', 'shop_item_properties.shop_id'
     ->leftJoin('property_value_ints', 'shop_items.id', '=', 'property_value_ints.entity_id',
       array(
          array('AND' => array('shop_item_properties.property_id', '=', Core_QueryBuilder::expression('`property_value_ints`.`property_id`'))
       )
     )
     ->groupBy('shop_items.id'
     ->where('property_value_ints.property_id', '=', 77)
     ->clearOrderBy()
     ->orderBy('property_value_ints.value', 'DESC';
#
Re: Вывести первыми два товара
Цитата:
Данный код не сортирует элементы, а почему то оставляет только два у которых включено свойство(тип галочка).


Возможно у других товаров нет значений этого доп свойства.

попробуйте так:

$Shop_Controller_Show
     ->shopItems()
     ->queryBuilder()
     ->leftJoin('property_value_ints', 'shop_items.id', '=', 'property_value_ints.entity_id',
       array(
              array('AND' => array('property_value_ints.property_id', '=', 77))
       )
     )
     ->groupBy('shop_items.id')
     ->clearOrderBy()
     ->orderBy('property_value_ints.value', 'DESC');


Цитата:
Получается даже если я заставлю работать эту сортировку - она сотрет по наличию.


Можно в том же запросе добавить объединение со складами и еще один orderBy

Цитата:
Мб есть какой то метод, проверить есть ли в выборке


Стандартно такого метода в контроллере нет. Можете унаследовать контроллер и добавить свой метод который будет принимать id товара и возвращать TRUE или FALSE.
«Не выходи из комнаты, не совершай ошибку…»
#
Re: Вывести первыми два товара
llirik писал(а):

Да, спасибо, сейчас верно сработало

llirik писал(а):
Можно в том же запросе добавить объединение со складами и еще один orderBy

А как это сделать?
#
Re: Вывести первыми два товара
Пример сортировки по наличию можно посмотреть здесь https://www.hostcms.ru/documentation/modules/shop/frontend/sorting/
«Не выходи из комнаты, не совершай ошибку…»
Авторизация