Speszi Posted July 15, 2019 Share Posted July 15, 2019 Witam. Proszę o info jak można zmodyfikować kod aby wyświetlał ilość produktów w kategoriach w drzewie kategori (menu po lewej stronie). Próbowałem sposobów opisanych dla Prestashop 1.6 ale niestety nie działa. W pliku ps_categorytree.php w tagu public function getTree($resultParents, $resultIds, $maxDepth, $id_category = null, $currentDepth = 0) Zmodyfikowałem kod w następujący sposób: $sql = 'SELECT * FROM ps_category_product cp WHERE cp.id_category = '.$id_category; $result = Db::getInstance()->executeS($sql); $productsCount = (int)Db::getInstance()->getValue('SELECT COUNT(*) FROM ps_category_product AS cp INNER JOIN ps_product_shop AS ps ON cp.id_product = ps.id_product WHERE cp.id_category = '. $id_category.' AND ps.active=1 AND ps.id_shop='.$this->context->shop->id); $return = array( 'id' => $id_category, 'link' => $link, 'name' => $name, 'desc'=> $desc, 'products' => count($result), 'children' => $children, 'productsCount'=>$productsCount ); Następnie w pliku category-tree-brench.tpl zmodyfikowałem linie w następujący sposób: title="{$node.desc|strip_tags|trim|truncate:255:'...'|escape:'html':'UTF-8'}">{$node.name|escape:'html':'UTF-8'} ({$node.productsCount})</a> Dodałem: ({$node.productsCount}) Niestety nawet po czyszczeniu pamięci podręcznej nie wczytuje wartości. Link to comment Share on other sites More sharing options...
0 design4VIP Posted July 16, 2019 Share Posted July 16, 2019 (edited) Wystarczylo tylko w kontrolerze dodać do zapytania bazy ....AND ps.active=1 AND ps.id_shop='.$this->context->shop->id LIMIT 10 Albo dodac limit bezpośrednio do zapytania foreach. Ale to szybsze jednak bardziej bezsensownne rozwiązanie, bo po co ma czytać wszystko z bazy żeby później selekcjonowac. Używając pierwszego rozwiązania będzie to bardziej poprawne optymalizacyjnie Edited July 16, 2019 by design4VIP (see edit history) Link to comment Share on other sites More sharing options...
0 Speszi Posted July 16, 2019 Author Share Posted July 16, 2019 Niestety po dodaniu wartosci LIMIT 10 strona główna przestaje wyświetlać menu. Skróciłem kod modyfikacji do poniższej postaci: $productsCount = (int)Db::getInstance()->getValue('SELECT COUNT(*) FROM '._DB_PREFIX_.'category_product AS cp INNER JOIN '._DB_PREFIX_.'product_shop AS ps ON cp.id_product = ps.id_product WHERE cp.id_category = '. $id_category.' AND ps.active=1 AND ps.id_shop='.(int)$this->context->shop->id); $return = array( 'id' => $id_category, 'link' => $link, 'name' => $name, 'desc'=> $desc, 'products' => count($result), 'children' => $children, 'productsCount'=>$productsCount ); ale nadal żadnego rezultatu choć po tym kodzie widać że strona w zależności od ilości produktów na stronie dłużej zaczeła czytać zawartość więc hook jest raczej dobry a pozostaje prawidłowość samego zapytania. Czy ktoś może spróbować u siebie czy to działa bo u mnie niestety nie. Link to comment Share on other sites More sharing options...
0 design4VIP Posted July 17, 2019 Share Posted July 17, 2019 To jak poprawnie dodasz do zapytania LIMIT 10 to też zadziała. Ja dodałem dopisek obrazowo a nie jako gotowca. Nie zapomnij, że w zapytaniu masz struktury zapytania pomieszanie ze zmiennymi PHP.... Tu średni, tam kropka... Kombinuj, kombinuj... 1 Link to comment Share on other sites More sharing options...
0 Speszi Posted July 19, 2019 Author Share Posted July 19, 2019 Pokombinowałem począwszy od phpMyAdmin i w efekcie zadziałało Także bardzo dziękuje za pomoc. Brakło mi jedynie opcji na zmiane kwerendy tak aby zliczała podkategorie dla kategorii głównej Przykładowo mam kategorie zabawki a w niej 2 podkategorie tj. rowerki i sanki. Jak mam produkty które są przypisane tylko do kategori rowerki a nie są przypisane również do kategorii nadrzędnej czyli zabawki to licznik nie zlicza tych produktów. W moim wypadku mam wszystkie produkty przypisane do jednej kategroii i moje drzewo kategorii jak jest zwinięte to nie pokazuje licznika produktów z podkategorii bo nie są w niej przypisane. Jest to zrozumiałe bo kwerenda zwraca ilość produktów przypisanych do danej kategorii a tu w tabeli nie mam kategorii zabawki. Zastanawiam się tylko czy można to jakość obejść i doszedłem do wniosku że trochę to bardziej pogmatwane niż tylko SELECT COUNT Link to comment Share on other sites More sharing options...
0 design4VIP Posted July 25, 2019 Share Posted July 25, 2019 LEFT JOIN..... Nie pamiętam teraz dokładnie ale jest też reguła na zliczanie bez powtórzeń. Musisz prześledzić jakieś tutki. Link to comment Share on other sites More sharing options...
Question
Speszi
Witam.
Proszę o info jak można zmodyfikować kod aby wyświetlał ilość produktów w kategoriach w drzewie kategori (menu po lewej stronie).
Próbowałem sposobów opisanych dla Prestashop 1.6 ale niestety nie działa.
W pliku ps_categorytree.php w tagu
public function getTree($resultParents, $resultIds, $maxDepth, $id_category = null, $currentDepth = 0)
Zmodyfikowałem kod w następujący sposób:
$sql = 'SELECT * FROM ps_category_product cp
WHERE cp.id_category = '.$id_category;
$result = Db::getInstance()->executeS($sql);
$productsCount = (int)Db::getInstance()->getValue('SELECT COUNT(*) FROM ps_category_product AS cp INNER JOIN ps_product_shop AS ps ON cp.id_product = ps.id_product WHERE cp.id_category = '. $id_category.' AND ps.active=1 AND ps.id_shop='.$this->context->shop->id);
$return = array(
'id' => $id_category,
'link' => $link,
'name' => $name,
'desc'=> $desc,
'products' => count($result),
'children' => $children,
'productsCount'=>$productsCount
);
Następnie w pliku category-tree-brench.tpl zmodyfikowałem linie w następujący sposób:
title="{$node.desc|strip_tags|trim|truncate:255:'...'|escape:'html':'UTF-8'}">{$node.name|escape:'html':'UTF-8'} ({$node.productsCount})</a>
Dodałem: ({$node.productsCount})
Niestety nawet po czyszczeniu pamięci podręcznej nie wczytuje wartości.
Link to comment
Share on other sites
5 answers to this question
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now