Często mamy potrzebę umieścić ilość produktów w naszej kategorii na liście za pomocą modułu blockcategories (przedstawię opcję wszystkich produktów oraz tylko produktów aktywnych), znalezione na Link , troszkę zmodyfikowane przeze mnie.
No to zaczynamy , modyfikujemy plik blockcategories.php (uwaga z głównego folderu modułów , a nie podfolderu naszego szablonu). W okolicach linii 140 znajdujemy metodę:
public function getTree($resultParents, $resultIds, $maxDepth, $id_category = 1, $currentDepth = 0)
{
global $link;
$children = array();
if (isset($resultParents[$id_category]) AND sizeof($resultParents[$id_category]) AND ($maxDepth == 0 OR $currentDepth < $maxDepth))
foreach ($resultParents[$id_category] as $subcat)
$children[] = $this->getTree($resultParents, $resultIds, $maxDepth, $subcat['id_category'], $currentDepth + 1);
if (!isset($resultIds[$id_category]))
return false;
return array('id' => $id_category, 'link' => $link->getCategoryLink($id_category, $resultIds[$id_category]['link_rewrite']),
'name' => $resultIds[$id_category]['name'], 'desc'=> $resultIds[$id_category]['description'],
'children' => $children);
}
następnie należy dodać zmienną przechowującą liczbę produktów za pomocą następującego kodu:
$ProductsCount = 0;
$ProductsCount = (int)Db::getInstance()->getValue('SELECT COUNT(*) FROM '._DB_PREFIX_.'category_product WHERE id_category = '. $id_category);
ten kod zwróci wszystkie produkty w danej kategorii, moja modyfikacja w przypadku wersji 1.5 wygląda następująco:
$ProductsCount = 0;
$ProductsCount = (int)Db::getInstance()->getValue('SELECT COUNT(*) FROM '._DB_PREFIX_.'category_product INNER JOIN '._DB_PREFIX_.'product ON '._DB_PREFIX_.'category_product.id_product = '._DB_PREFIX_.'product.id_product WHERE id_category = '. $id_category.' AND '._DB_PREFIX_.'product.active =1');
Tak zbudowane polecenie do bazy zwróci jedynie ilość aktywnych produktów w kategorii. Następnie w tablicy return należy dodać naszą zmienna, więc będzie to wyglądać mniej więcej tak:
$return = array('id' => $id_category, 'link' => $this->context->link->getCategoryLink($id_category, $resultIds[$id_category]['link_rewrite']),
'name' => $resultIds[$id_category]['name'], 'desc'=> $resultIds[$id_category]['description'],
'children' => $children,'products' => $ProductsCount);
Metoda getTree po naszych modyfikacjach powinna wyglądać następująco:
public function getTree($resultParents, $resultIds, $maxDepth, $id_category = null, $currentDepth = 0)
{
if (is_null($id_category))
$id_category = $this->context->shop->getCategory();
$children = array();
if (isset($resultParents[$id_category]) && count($resultParents[$id_category]) && ($maxDepth == 0 || $currentDepth < $maxDepth))
foreach ($resultParents[$id_category] as $subcat)
$children[] = $this->getTree($resultParents, $resultIds, $maxDepth, $subcat['id_category'], $currentDepth + 1);
if (!isset($resultIds[$id_category]))
return false;
$ProductsCount = 0;
$ProductsCount = (int)Db::getInstance()->getValue('SELECT COUNT(*) FROM '._DB_PREFIX_.'category_product WHERE id_category = '. $id_category);
$return = array('id' => $id_category, 'link' => $this->context->link->getCategoryLink($id_category, $resultIds[$id_category]['link_rewrite']),
'name' => $resultIds[$id_category]['name'], 'desc'=> $resultIds[$id_category]['description'],
'children' => $children,'products' => $ProductsCount);
return $return;
}
Teraz mamy dostęp do naszej zmiennej z poziomu smarty
{$node.products}
Nasz przykładowy link będzie wyglądał tak:
<a href="{$node.link}" {if isset($currentCategoryId) && ($node.id == $currentCategoryId)}class="selected"{/if} title="{$node.desc|escape:html:'UTF-8'}">{$node.name|escape:html:'UTF-8'} ({$node.products})</a>
To wszystko 🙂
![How to configure a test mail server with the Docker? – Cooking notes [EN]](https://rafalstepien.com/wp-content/uploads/2018/07/docker_tests-100x70.png)


A czy można by prosić o przedstawienie jak takie pliki (i które) będę wyglądać ostatecznie?
Np. dokładnie w którym miejscu wstawić „następnie należy dodać zmienną przechowującą liczbę produktów za pomocą następującego kodu:”
W jakim pliku wstawić „{$node.products}” oraz link „{$node.name|escape:html:’UTF-8′} ({$node.products})„
W przypadku modułu blockcategories plik do modyfikacji znajduję się w:
themes/nazwa_szablonu/modules/blockcategories/category-tree-branch.tpl
w moim przypadku modyfikuję linijkę 27, która ostatecznie wygląda następująco:
(do wstawienia kodu proszę używać znacznika <'pre'>kod<''/pre'> – bez apostrofów)
Pozdrawiam, mam nadzieję, że pomogłem 🙂
A w którym miejscu wstawić ten fragment?
$ProductsCount = 0;
$ProductsCount = (int)Db::getInstance()->getValue(’SELECT COUNT(*) FROM ’._DB_PREFIX_.’category_product WHERE id_category = ’. $id_category);
Uzupełniłem tutorial , który powinien wszystko wyjaśnić( Metoda getTree…)
Dziękuję za pomoc. Użyłem modyfikacji na stronie http://www.xgamecenter.pl/magic i wszystko działa pięknie.
Pozdrawiam
Jeżeli chcemy zliczać jedynie aktywne produkty w kategoriach, to należy zmodyfikować trochę zapytanie SQL:
$ProductsCount = (int)Db::getInstance()->getValue(' SELECT COUNT(*) FROM '._DB_PREFIX_.'category_product c INNER JOIN '._DB_PREFIX_.'product p ON (c.`id_product` = p.`id_product`) WHERE c.`id_category` = '. $id_category .' AND p.`active` = 1;' );a jeżeli chcemy żeby nam sumowała kategoria nadrzędna produkty w kategoriach podrzędnych …. jak to zrobić ?
Nabiał (8)
masło (4)
mleko (4)