Jump to content
Sign in to follow this  
plat75

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

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 2

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Для моего примера просто добавляем эти строки в файл: \catalog\language\russian\product\category.php

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

Спасибо!

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Для версии 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)

Share this post


Link to post
Share on other sites

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

Спасибо.

Share this post


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']  = 'Сначала новые товары';
может кому пригодится  :-)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

Версия 2.3

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
В 20.08.2014 в 01:02, savilook сказал:

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

 

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

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

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

Share this post


Link to post
Share on other sites

для 2.3.0.2

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

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

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
10 минут назад, Dimonchik сказал:

именно переключателем

каким ?

 

 

Share this post


Link to post
Share on other sites
В 13.02.2019 в 11:56, Otvet сказал:

каким ?

 

 

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

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
You are posting as a guest. If you have an account, please sign in.
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.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

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.