Jump to content
mechu

Kategorie w górnej belce i wyświetlane przedmioty

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)

Share this post


Link to post
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

Share this post


Link to post
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.

Share this post


Link to post
Share on other sites

Kontrolerów nie edytuj bezpośrednio tylko rób to za pomocą override i po każdej zmianie w kontrolerach usuń plik class_index.php z folderu cache.

Share this post


Link to post
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?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More