Jump to content
  • 0

Sortowanie produktów na stronie wyprzedaży


DamianS20171

Question

Cześć,

moim problemem jest sortowanie w sklepie na stronie wyprzedaży. Chciałbym żeby domyślnie strona wyprzedaży sortowała produkty wg daty ich dodania.

Obecnie sortowanie jest alfabetyczne. Domyśle sortowanie w sklepie jest już ustawione na wg daty dodania, ale działa to tylko na produkty w kategoriach, a nie na stronę jak np właśnie wyprzedaż.

Czy ktoś wie jak to ustawić?

Z góry dzięki

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 1

Tak, strona wyprzedaży ma osobny kontroler - /controllers/front/listing/PricesDropController.php, a w nim funkcja getProductSearchQuery(), należało by tam podmienić "->setSortOrder(new SortOrder('product', 'name', 'asc'))`" na "->setSortOrder(new SortOrder('product', 'date_add', 'desc'))".

A jeszcze lepiej zrobić override dla tego kontrolera, żeby aktualizacja presty nie nadpisała tych zmian.

  • Like 1
Link to comment
Share on other sites

  • 1

Są dwie metody, łatwiejsza ale brzydka, oraz trudniejsza ale poprawna (aktualizacja prestashop nie spowoduje nadpisania tej zmiany).

1) po prostu dodajesz do pliku "/src/Adapter/PricesDrop/PricesDropProductSearchProvider.php" nowe opcje do metody runQuery(), np:

$result->setAvailableSortOrders(
                [
                    (new SortOrder('product', 'name', 'asc'))->setLabel(
                        $this->translator->trans('Name, A to Z', array(), 'Shop.Theme.Catalog')
                    ),
                    (new SortOrder('product', 'name', 'desc'))->setLabel(
                        $this->translator->trans('Name, Z to A', array(), 'Shop.Theme.Catalog')
                    ),
                    (new SortOrder('product', 'price', 'asc'))->setLabel(
                        $this->translator->trans('Price, low to high', array(), 'Shop.Theme.Catalog')
                    ),
                    (new SortOrder('product', 'price', 'desc'))->setLabel(
                        $this->translator->trans('Price, high to low', array(), 'Shop.Theme.Catalog')
                    ),
					(new SortOrder('product', 'date_add', 'desc'))->setLabel(
                        $this->translator->trans('Newest to oldest', array(), 'Shop.Theme.Catalog')
                    ),
					(new SortOrder('product', 'date_add', 'desc'))->setLabel(
                        $this->translator->trans('Oldest to newest', array(), 'Shop.Theme.Catalog')
                    ),
                ]
            );

2) Tworzysz własny ProductSearchProvider w katalogu overrides na bazie PricesDropProductSearchProvider.php oraz załączasz go w PricesDropController.php w metodzie getDefaultProductSearchProvider().

  • Like 1
Link to comment
Share on other sites

  • 0

@Blaaszka zrobiłem to co w podesłanym temacie, ale niestety pomogło to jedynie dodać do listy rozwijanej opcję od najnowszych i najstarszych dla jedynie kategorii, a nie dla strony wyprzedaże czyli /promocje.

Co więcej strona nowości okazuje się jakby mieć chyba jakiś osobny plik czy funkcję odpowiadającą za tę listę rozwijaną, ponieważ gdy w kategoriach mam teraz Najnowsze/Najstarsze tak tam dodane jest Data dodania, od najnowszych do najstarszych/ Data dodania, od najstarszych do najnowszych. A więc dwa różne teksty no i na stronie promocji żadnego z tych tekstów. 

Co ciekawe dodając do linku ?order=product.date_add.desc produkty układają się od najnowszych

Link to comment
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
×
×
  • Create New...