Jump to content

Kategorie w górnej belce i wyświetlane przedmioty


mechu

Recommended Posts

Witam.

Chciałbym zmienić wyświetlanie kategorii na górnej belce, tak, żeby wyświetlało tylko podkategorię bez kolejnych jej poziomów, oraz chciałbym, żeby na stronie kategorii wyświetlane były nie tylko produkty z tej kategorii, ale również z wszystkich podkategorii do niej należących. Jak to zrobić będę wiedział, tylko nie łapię się jeszcze w strukturze plików, więc jakby mi ktoś mógł podpowiedzieć gdzie znajdę zapytania do bazy danych, które wyciągają te informacje, to byłbym wdzięczny ;)

 

Pozdrawiam

Michał.

Edited by mechu (see edit history)
Link to comment
Share on other sites

Górna belka to moduł blocktopmenu czyli szukasz w modules/blocktopmenu, natomiast produkty z podkategorii można w panelu przypisać do różnych kategorii i wtedy będą sie również w nich wyświetlać, ewentualnie zobacz sobie do pliku classes/category.php

Link to comment
Share on other sites

Ok, belkę ogarnąłem, jakby kogoś interesowało to w blocktopmenu.php trzeba przerobić mtodę generateCategoriesMenu

 protected function generateCategoriesMenu($categories, $is_children = 0, $third = 0)
    {
        $html = '';

        foreach ($categories as $key => $category) {
            if ($category['level_depth'] > 1) {
                $cat = new Category($category['id_category']);
                $link = Tools::HtmlEntitiesUTF8($cat->getLink());
            } else {
                $link = $this->context->link->getPageLink('index');
            }

            /* Whenever a category is not active we shouldnt display it to customer */
            if ((bool)$category['active'] === false) {
                continue;
            }

            $html .= '<li'.(($this->page_name == 'category'
                && (int)Tools::getValue('id_category') == (int)$category['id_category']) ? ' class="sfHoverForce"' : '').'>';
            $html .= '<a href="'.$link.'" title="'.$category['name'].'">'.$category['name'].'</a>';

            if (isset($category['children']) && !empty($category['children'])) {
                $html .= '<ul>';
                if (!$third)  $html .= $this->generateCategoriesMenu($category['children'], 1, 1);

                if ((int)$category['level_depth'] > 1 && !$is_children) {
                    $files = scandir(_PS_CAT_IMG_DIR_);

                    if (count(preg_grep('/^'.$category['id_category'].'-([0-9])?_thumb.jpg/i', $files)) > 0) {
                        $html .= '<li class="category-thumbnail">';

                        foreach ($files as $file) {
                            if (preg_match('/^'.$category['id_category'].'-([0-9])?_thumb.jpg/i', $file) === 1) {
                                $html .= '<div><img src="'.$this->context->link->getMediaLink(_THEME_CAT_DIR_.$file)
                                .'" alt="'.Tools::SafeOutput($category['name']).'" title="'
                                .Tools::SafeOutput($category['name']).'" class="imgm" /></div>';
                            }
                        }

                        $html .= '</li>';
                    }
                }

                $html .= '</ul>';
            }

            $html .= '</li>';
        }

        return $html;
    }

Po tej zmianie po najechaniu na kategorię na belce wyświetlają się tylko podkategorie należące do tej kategorii (bez podkategorii należących do podkategorii itd.) U mnie kategorie są tak rozbudowane, że po najechaniu na kategorię rozwijała się lista na ładnych pięć stron ;)

 

 

Z kategoriami to znalazłem w classes/Category.php metodę getProducts, ale zamiast ją zmieniać chciałbym w pliku gdzie jest ona wywoływana dodać po prostu kolejne jej wywołania podając id podkategorii należących do kategorii z której są wyświetlane produkty, tylko nie wiem gdzie szukać.

 

I przy okazji chciałem zmodyfikować tą metodę, tak aby pobierała jedynie produkty, które są na stanie dodając do zapytania linijkę:

	            WHERE product_shop.`id_shop` = '.(int)$context->shop->id.'
                    AND cp.`id_category` = '.(int)$this->id
                    .($active ? ' AND product_shop.`active` = 1' : '')
                    .($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '')
                    .($id_supplier ? ' AND p.id_supplier = '.(int)$id_supplier : '').
                    ' AND p.`quantity` > 0';

ale nie przynosi to rezultatów.

Link to comment
Share on other sites

Ok, dzięki za radę, ale co jest źle z warunkiem p.`quantity` > 0';, że nie działa? I gdzie znajdę plik, w którym jest wywoływana ta metoda i generowane są produkty dla danej kategori?

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...