Помощь Сортировка товаров

Регистрация
1 Июн 2015
Сообщения
158
Реакции
2
Добрый день.

Помогите пожалуйста отсортировать товары без изображений в конец.

на данный момент они стоят в начале списка все почему-то
 
Отсортировать в списке на витрине магазина (фронтэнде) или в админке?
 
Как вариант - запросом к БД
Код:
UPDATE oc_product SET sort_order = 100 WHERE image = ' '
 
эм....а куда это вписать? подскажите пожалуйста
 
Заходите в базу данных через phpMyAdmin. Там вкладка SQL, нажимаете и видете заголовок "Выполнить SQL-запрос(ы) к базе данных...", вставляете в поле запрос и нажимаете кнопку Вперед
 
Добрый день.

Помогите пожалуйста отсортировать товары без изображений в конец.

на данный момент они стоят в начале списка все почему-то

А много товаров в базе? Просто может быть так что до новых товаров пользователь никогда не доберется, из-за того что они будут всегда в конце.
Если делать так как предложили выше:
Код:
UPDATE oc_product SET sort_order = 100 WHERE image = ' '
Тогда и всем последующим товарам при добавлении нужно прописывать в поле "Порядок сортировки" - 100
А то не поможет.

А можно изменить код в файле catalog\model\catalog\product.php

Код:
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
   if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
      $sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
   } elseif ($data['sort'] == 'p.price') {
      $sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
   } else {
      $sql .= " ORDER BY " . $data['sort'];
   }
} else {
   $sql .= " ORDER BY p.sort_order";
}
Код:
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
   if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
      $sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
   } elseif ($data['sort'] == 'p.price') {
      $sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
   } elseif ($data['sort'] == 'p.sort_order') {
      $sql .= " ORDER BY " . $data['sort'] . ",IF(p.image = '',1,0) ";
   } else {
      $sql .= " ORDER BY " . $data['sort'];
   }
} else {
   $sql .= " ORDER BY p.sort_order, IF(p.image = '',1,0)";
}
Код:
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
   if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
      $sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
   } else {
      $sql .= " ORDER BY " . $data['sort'];
   }
} else {
   $sql .= " ORDER BY p.sort_order";
}
Код:
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
   if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
      $sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
   } else {
      $sql .= " ORDER BY " . $data['sort'];
   }
} else {
   $sql .= " ORDER BY p.sort_order, IF(p.image = '',1,0)";
}

Во втором варианте принцип таков: приоритет у группировки по "Порядку сортировки" а потом уже по наличию изображений.
Например: Все товары которые продаются имеют "Порядок сортировки" = 0, а все архивные товары и т.п., которые уже не продаются но не отключены и показываются пользователю, имеют "Порядок сортировки" = 1 (такие товары всегда должны быть в конце).
В таком случае сначала будут идти продающиеся товары с изображениями, потом товары без изображений, и в конце архивные.
Логику можно поменять в зависимости от задачи.
 
Назад
Сверху