Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

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


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
Link to post
Share on other sites

  • 1 month later...

вопрос решен, тему можно закрыть

Link to post
Share on other sites

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

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

Спасибо!

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

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

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

Link to post
Share on other sites

  • 3 months later...

а можно сделать по "Дата поступления" date_modified которую редактируем на вкладке Данные?

Link to post
Share on other sites

  • 2 months later...

Для версии 1.5.4.1. я менял еще строчки 219 и 220 на

'value' => 'p.date_added-DESC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.date_added&order=DESC' . $url)
Link to post
Share on other sites

  • 5 months later...

Может кто подскажет как можно сделать тоже сортировку по поступлению для производителей.

Спасибо.

Link to post
Share on other sites

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

 

в файле \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']  = 'Сначала новые товары';
может кому пригодится  :-)
Link to post
Share on other sites

  • 2 weeks later...

Подскажите пожалуйста как сделать тортировку товаров по мере добавления (новый товар на 1 месте в категории) для версии опенкарта 1.5.3.1  ??? 

Link to post
Share on other sites

  • 10 months later...

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

Link to post
Share on other sites

  • 11 months later...

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

 

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

Link to post
Share on other sites

  • 1 year later...

Сделала все как указано, но ничего не изменилось.

Версия 2.3

Link to post
Share on other sites

  • 2 months later...

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

Link to post
Share on other sites

  • 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

Link to post
Share on other sites

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

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

 

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

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

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

Link to post
Share on other sites

  • 3 months later...

для 2.3.0.2

поменял строчку 178 в файле \catalog\model\catalog\product.php

на  $sql .= " ORDER BY p.date_added";

всё заработало

 

Link to post
Share on other sites

Доброго времени суток!
А как задать сортировку по умолчанию только для отдельной конкретной категории товаров?
Заранее благодарен!

Link to post
Share on other sites

  • 1 month later...

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

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

Link to post
Share on other sites

В 13.02.2019 в 11:56, Otvet сказал:

каким ?

 

 

Спасибо огромное!!! Всё заработало!! То что нужно!!!

Link to post
Share on other sites

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

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

 

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

Link to post
Share on other sites

  • 11 months later...

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

Link to post
Share on other sites

  • 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

 

Link to post
Share on other sites

В 02.09.2021 в 01:59, mRozko сказал:

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

в этой теме вроде как разжевали

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.