Link zobacz wszystkie produkty na karcie kategorii PrestaShop


Link zobacz wszystkie na karcie kategorii prestashop

W tym tutorialu przedstawimy jak dodać linka pokazującego wszystkie produkty na karcie danej kategorii. Tutorial jest przeznaczony do sklepu PrestaShop w wersji 1.5.

Pamiętaj proszę, że wszelkie zmiany w kodzie wykonujesz na własne ryzyko.

Pierwsze co należy zrobić to nadpisać metodę  assignProductList w klasie  CategoryController. W celu wykonania operacji stwórz nowy plik CategoryContoller.php w katalogu:  override/controllers/front. Jeśli plik już istnieje to należy go otworzyć do edycji. Jeśli poniższa klasa nie istnieje, to należy ją dodać:

<?php

class CategoryController extends CategoryControllerCore
{
}

 Następnie należy przekopiować metodę  assignProductList z pierwotnego pliku i zmodyfikować w poniższy sposób warunek if (!$hookExecuted)

		if (!$hookExecuted)
		{
			$this->context->smarty->assign('categoryNameComplement', '');

                        $showProducts = Tools::getValue('showProducts');
                        if ($showProducts == 'all') {
                            $this->cat_products = $this->category->getProducts($this->context->language->id, null, null, $this->orderBy, $this->orderWay, false, true, false, 1, true, null, true);
                        } else {
                            $this->nbProducts = $this->category->getProducts(null, null, null, $this->orderBy, $this->orderWay, true);
                            $this->pagination((int)$this->nbProducts); // Pagination must be call after "getProducts"                            
                            $this->cat_products = $this->category->getProducts($this->context->language->id, (int)$this->p, (int)$this->n, $this->orderBy, $this->orderWay);
                        }
			
		}

Dodatkowa zmiana w kodzie pozwala na sprawdzenie parametru 'showProducts'. Jeśli jego wartość jest ustawiona na 'all', to zostaje wywołana zmieniona metoda getProducts z modelu Category.

Następnym krokiem jest zmodyfikowanie metody wspomnianego modelu Category. W tym celu utwórz plik Category.php (jeśli nie istnieje) w katalogu override/classes i utwórz nową klasę (jeśli nie ma):

<?php

class Category extends CategoryCore
{
}

Kolejnym krokiem jest przekopiowanie oryginalnej metody getProducts. W metodzie dodajemy dodatkowy parametr showAllProducts

public function getProducts($id_lang, $p, $n, $order_by = null, $order_way = null, $get_total = false, $active = true, $random = false, $random_number_products = 1, $check_access = true, Context $context = null, $showAllProducts = false)
	{
}

W kodzie przekopiowanej metody znajdź warunek $random === true I zmodyfikuj go w następujący sposób

		if ($random === true)
		{
			$sql .= ' ORDER BY RAND()';
			$sql .= ' LIMIT 0, '.(int)$random_number_products;
		}
		else
			$sql .= ' ORDER BY '.(isset($order_by_prefix) ? $order_by_prefix.'.' : '').'`'.pSQL($order_by).'` '.pSQL($order_way);
                        if (!$showAllProducts) {
                            $sql .= ' LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n;
                        }

Dodatkowy warunek pozwala na dodawanie (lub nie) kodu odpowiadającego za ograniczenie wyników wyświetlania w zapytaniu (LIMIT).

Ostatnim krokiem jest dodanie do widoku kategorii wyświetlania linku pozwalającego na wczytanie wszystkich produktów. W tym celu edytujemy plik  pagination.tpl w katalogu  themes/TWÓJ_SZABLON/pagination.tpl. Dodaj poniższy kod zaraz przed znakami kończącymi warunek if

{if $start!=$stop} 
…
<a rel="nofollow" href="{$request}?showProducts=all">{l s='View all'}</a>
{/if}

Atrybut rel określa, że link ma ni być ineksowany przez roboty wyszukiwarek. Zmienna {$request} pozwoli na wyświetlenie urla do kategorii. Możliwe że w Twoim przypadku będzie potrzebna zmiana ? Na & jeśli url do kategorii zawiera już jakieś parametry (np.: /index.php?id_category=3&controller=category).

 

W celu zapewnienia maksymalnej wygody użytkowników przy korzystaniu z witryny ta strona stosuje pliki cookies. Szczegóły w naszej Polityce prywatności. Kliknij " Zgadzam się", aby ta informacja nie wyświetlała się więcej