Jump to content

Recommended Posts

 

FIELD(pc.category_id, ?@), p.position

 

Сначала идет очередность категорий согласно переданному массиву идов категорий. Дальше товары которые совпадают по первому критерию (находятся в одной категории) сортируются по p.position (что есть позиция товара). Если у вас не так - то проверяйте что пишется в p.position

Link to post
Share on other sites

Нет. Это нужно смотреть базу. Таблица s_products поле position

У вас в админке в товарах нормально работает сортировка?

Товары отображаются согласно заданному положению? 

Link to post
Share on other sites

без этой доработки на сайте товары отображаются по тому, как задано в админке.

 

Когда внес эту доработку, то на сайте товары все перемешались, т.е. они как бы идут по порядку ID, не так как бы я ранее перетаскивал товары в админке как нужно

Link to post
Share on other sites

Альтернативное решение для 15 поста:

 

В api/Products.php ПЕРЕД строкой:

if(!empty($filter['keyword']))
Добавляем:
//Если сортировка по позициям и задана категория 
if((empty($filter['sort']) || $filter['sort']=='position') && !empty($filter['category_id']))
	$order = $this->db->placehold("FIELD(pc.category_id, ?@), p.position DESC",  (array)$filter['category_id']);
PS: больше ничего не нужно Edited by yr4ik
Link to post
Share on other sites
  • 8 months later...

Добрый день.

Нужна подсказка.

Юзаю сортировку по-умолчанию вот такую:

$order = '(SELECT p.position FROM __variants pv WHERE p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1)DESC';

Она опускает товары нет в наличии вниз списка. 

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

Link to post
Share on other sites

Пробуйте

$order = '(SELECT 1 FROM s_variants pv WHERE p.id = pv.product_id AND  (pv.stock>0 OR pv.stock IS NULL)  LIMIT 1) DESC, p.name';

 

 

Для остальных сортировок это работать не будет, нужно бы точно расписать для каждой сортировки, а то выходит так что одно лечим другое калечим.
Link to post
Share on other sites

Спрашивающий задал вопрос весьма точно и квалифицированно "сортировку по-умолчанию вот такую ... как видоизменить".

Думаю, можно смело предположить, что он использовал и прочие сортировки измененные под свои желания.  Во всяком случае, он понимает, что делает.

А если что-то у него пойдет не так (например, сломается  сортировка в админке) и возникнут затруднения - он всегда сможет задать новый вопрос.

 

Формально замечание правильное, но оно - впереди паровоза. С тем же успехом можно к этому вопросу цеплять усложнения типа - а какая версия (вдруг старая экзотическая), а какие изменения делались - от и до. Еще можно сказать - в версии 1 это вообще не работает. В общем, раздолье для подобного бюрократизма...

Link to post
Share on other sites

Noxter прав, для остальных это не работает. Не обратил внимание, пока не написали.

Подскажете?

Стоит вот такая:

if(!empty($filter['sort']))
	switch ($filter['sort'])
	{
		case 'position':
		$order = 'p.position DESC';
		break;
 
		// по имени от А до Я
		case 'name_asc':
		$order = 'p.name';
		break;
 
		// по имени от Я до А
		case 'name_desc':
		$order = 'p.name DESC';
		break;
 
		// по цене Низкие > Высокие
		case 'price_asc':
		$order = '(SELECT pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1)';
		break;
 
		// по цене Высокие < Низкие
		case 'price_desc':
		$order = '(SELECT pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1) DESC';
		break;
 
		case 'created':
		$order = 'p.created DESC';
		break;

                case 'views':
                $order = 'p.views DESC';
                break;

 
	}
Edited by Breedzel
Link to post
Share on other sites
  • 1 year later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...