Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

(Решено)как добавить "сортировка по поступлению"?


Recommended Posts

как добавить "сортировка по поступлению" на страницах товаров и вообще где правиться это выпадающее меню "сортировка"?

взято с другого форума у пользователя sunny8u

Меняем сортировку товаров в витрине по умолчанию
по дате добавления, имени, модели, количеству, цене или рейтингу.
Долго мучилась, нигде не могла найти информацию. Нашла - делюсь=)
З.Ы. Кстати, этот метод позволит устранить повторение одних и тех же товаров на разных страницах одной категории.
Ибо сортировка По умолчанию очень часто творит подобные гадости...
З.Ы.Ы. У меня в примере товары будут отсортированы по дате добавления, но по образцу можно сделать любой вид сортировки.
Переменные в OpenCart 1.5.4 выглядят следующим образом. Далее поймёте, где это нужно будет вставлятьwink.png

'pd.name', - сортировка по имени.
'p.model', - сортировка по модели.
'p.quantity', - сортировка по количеству.
'p.price', - сортировка по цене.
'rating', - сортировка по рейтингу.
'p.sort_order', - сортировка, которая стоит по умолчанию.
'p.date_added' - сортировка по дате добавления.

 Соответственно, для каждого типа сортировки нужно будет задать направление, это:

DESC - по убыванию,
ASC - по возрастанию.
1. Меняем тип сортировки По умолчанию на сортировку по Дате добавления (без добавления в список "Сортировать по").
Просто меняем принцип отображения товаров для метода "По умолчанию".
Открываем файл \catalog\controller\product\category.php

В самом начале файла находим вот это:

if (isset($this->request->get['sort'])) {
  $sort = $this->request->get['sort'];
  } else {
  $sort = 'p.sort_order';
  }
  if (isset($this->request->get['order'])) {
  $order = $this->request->get['order'];
  } else {
  $order = 'ASC';

и меняем

 $sort = 'p.sort_order';

на

$sort = 'p.date_added';

Для того, чтобы изменить порядок отображения (По убыванию/По возрастанию), нужно изменить

 

$order = 'ASC';

где DESC - сначала новые, потом старые,

а ASC - сначала старые потом новые.

В принципе, этого уже достаточно. Можно оставить название метода сортировки прежним "По умолчанию", а можно переименовать переменную 'text_default' в файле \catalog\language\russian\product\category.php. И радоваться жизниwink.png

 

2. Но если нужно, чтобы новый вариант был добавлен в выбор сортировки и назывался по-другому, делаем следующее:

Остаёмся в том же файле \catalog\controller\product\category.php.

Ищем вот этот кусок кода (примерно 200 строка):

$this->data['sorts'][] = array(
'text' => $this->language->get('text_date_desc'),
'value' => 'p.sort_order-ASC',
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.sort_order&order=ASC' . $url)
);

и добавляем сразу после него вот этот код:

 $this->data['sorts'][] = array(
        'text'  => $this->language->get('text_date_desc'),
        'value' => 'p.date_added-DESC',
        'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.date_added&order=DESC' . $url)
  );
  $this->data['sorts'][] = array(
        'text'  => $this->language->get('text_date_asc'),
        'value' => 'p.date_added-ASC',
        'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.date_added&order=ASC' . $url)
  );

Где в качестве 'text_date_desc' и 'text_date_asc' выступают наши новые названия для сортировки по дате добавления товаров в прямом и обратном порядке.

3. Чтобы настроить корректный вывод названия новых типов сортировки 'text_date_desc' и 'text_date_asc'
редактируем соответствующий языковой файл.
Для моего примера просто добавляем эти строки в файл: \catalog\language\russian\product\category.php
$_['text_date_asc'] = 'Сначала новые товары';
$_['text_date_desc']  = 'Сначала старые товары';

 

 

  • +1 4
Надіслати
Поділитися на інших сайтах


  • 1 month later...
  • 2 months later...
Для моего примера просто добавляем эти строки в файл: \catalog\language\russian\product\category.php

$_['text_date_asc'] = 'Сначала новые товары';
$_['text_date_desc']  = 'Сначала старые товары';

Спасибо!

Только здесь наоборот:

$_['text_date_asc'] = 'Сначала старые товары';

$_['text_date_desc']  = 'Сначала новые товары';

Надіслати
Поділитися на інших сайтах


  • 3 months later...
  • 2 months later...
  • 5 months later...

Аналогично решил как выше

 

в файле \catalog\controller\product\manufacturer.php

 

вместо

if (isset($this->request->get['sort'])) {
  $sort = $this->request->get['sort'];
  } else {
  $sort = 'p.sort_order';
  }
  if (isset($this->request->get['order'])) {
  $order = $this->request->get['order'];
  } else {
  $order = 'ASC';

ставим

if (isset($this->request->get['sort'])) {$sort = $this->request->get['sort'];
} else {
$sort = 'p.date_added';
} 


if (isset($this->request->get['order'])) {
$order = $this->request->get['order'];
} else {
$order = 'DESC';

после

$this->data['sorts'][] = array(
'text'  => $this->language->get('text_default'),
'value' => 'p.sort_order-ASC',
'href'  => $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $this->request->get['manufacturer_id'] . '&sort=p.sort_order&order=ASC' . $url)
); 

добавил

 

$this->data['sorts'][] = array(
        'text'  => $this->language->get('text_date_desc'),
        'value' => 'p.date_added-DESC',
        'href'  => $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $this->request->get['manufacturer_id'] . '&sort=p.date_added&order=DESC' . $url)
  );
  $this->data['sorts'][] = array(
        'text'  => $this->language->get('text_date_asc'),
        'value' => 'p.date_added-ASC',
        'href'  => $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $this->request->get['manufacturer_id'] . '&sort=p.date_added&order=ASC' . $url)
  );

в файле catalog\language\russian\product\manufacturer.php

 

после

$_['text_default']      = 'По умолчанию';

добавил 

$_['text_date_asc'] = 'Сначала старые товары';$_['text_date_desc']  = 'Сначала новые товары';
может кому пригодится  :-)
Надіслати
Поділитися на інших сайтах


  • 2 weeks later...
  • 10 months later...

Спасибо! Очень пригодилось! Но у меня получается что первая страница категории показывается как я настраиваю (разные пробовала виды сортировки), а следующие за ней страницы снова сбиваются на первоначальную сортировку по умолчанию (при чем даже не понимаю принцип сортировки - больше похож на сортировку по алфавиту)

Надіслати
Поділитися на інших сайтах


  • 11 months later...

Делал по дате добавление все получилось, но будьте внимательны при добавление товара, нужно равномерно распределить, а то получите дубли страниц с главной категорий если будите добавлять сразу большое количество.

 

Подскажите, как убрать товар нет в наличии в конец списка?

Надіслати
Поділитися на інших сайтах


  • 1 year later...
  • 2 months later...

У меня такая ситуация, все в принципе работает, но меня кидает потом сразу на главную страницу. Чуть порылся в коде, попробовал разные комбинации как ни крути скидывает на главную

Надіслати
Поділитися на інших сайтах


  • 6 months later...

Перепробовал все способы. Все равно остается действовать старое правило сортировки "по умолчанию" хотя все поменял правильно:

if (isset($this->request->get['sort'])) {
            $sort = $this->request->get['sort'];
        } else {
            $sort = 'p.date_added';
        }

        if (isset($this->request->get['order'])) {
            $order = $this->request->get['order'];
        } else {
            $order = 'DESC';

И даже здесь

$data['sorts'][] = array(
                'text'  => $this->language->get('Дате поступления'),
                'value' => 'p.date_added-DESC',
                'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.date_added&order=DESC' . $url)
            );

 

Ничего не помогло

OpenCart 2.1.0.2

Надіслати
Поділитися на інших сайтах


В 20.08.2014 в 01:02, savilook сказал:

Аналогично решил как выше

 

в файле \catalog\controller\product\manufacturer.php

Этот способ тоже не работает в OpenCart 2.1.0.2 

При переходе на любой раздел каталога продолжает действовать старое правило сортировки "по умолчанию". А если переключать вручную, то работает. Но вручную никому не нужно.

Надіслати
Поділитися на інших сайтах


  • 3 months later...
  • 1 month later...

Ну не ужели ни кто не может сделать модуль, добавляющий сортировку по дате( именно переключателем, а не только по умолчанию)  на всех возможных страницах?

С удовольствием бы купил.

Надіслати
Поділитися на інших сайтах


  • 5 months later...
  • 5 months later...

Спасибо автору, но у меня вопрос!

 

Применяю все для latest.php (раздел Новинки) в версии 1.5.6. В итоге товары выводит те что нужно (т.е. последние 100 товаров), но сортировка внутри этих товаров все равно по алфавиту, а хотелось бы конкретно: 1 позиция - самый последний добавленный товар, 2 позиция - товар добавленный до него и т.д., а не просто по алфавиту всех недавно добавленных товаров. :(

Надіслати
Поділитися на інших сайтах


  • 11 months later...

Спасибо автору на 2.1.0.1 пункт 1 сработал, сортировка по умолчанию по дате наполнения. 2 пункт не делала во вкладку не выводила, может там затык какой то о котором пишут. но по первому всё ок, наконец то я вижу последний залитый товар, а не наоборот. 

Надіслати
Поділитися на інших сайтах


  • 7 months later...
В 11.08.2019 в 18:19, AndreyPopov сказал:

может кому пригодится
проверено на
OpenCart 3.x + Journal 3.x

 

А не подскажите, как выставить это значение по умолчанию?...
 

sort-by-newest-variant-add.ocmod.xml 4 \u043a\u0411 · 89 downloads

 

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.