Jump to content
  • 0

Kategoria widoczna tylko dla zarejestrowanych


grayling

Question

Witam.

 

Szukałem na polskim i angielskim forum, ale nie mogę znaleźć rozwiązania (jeżeli słabo szukałem, to przepraszam).

 

O co mi chodzi: chcę w górnym poziomym menu umieścić kategorię, która będzie widoczna wyłącznie dla zarejestrowanych użytkowników (po zalogowaniu). Dla jasności - nie chodzi o dostępność, ale o widoczność. Z tym pierwszym problemu nie ma, bo wystarczy to zaznaczyć podczas edytowania kategorii. Chodzi po prostu o to, żeby kategoria ta pojawiała się we wspomnianym menu dopiero po zalogowaniu.

 

Czy rzecz jest wykonalna poprzez modyfikację kodu .tpl lub .php, ewentualnie przy wykorzystaniu jakiegoś zewnętrznego modułu?

 

Dzięki, pozdrowienia dla wszystkich.

 

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

I don't think there is such menu module which provide that facility and yes you can do it by modifying .tpl and .php files of blocktopmenu module only if you are PrestaShop expert. If you are not, then please don't try to change it. Any programmer can code such module for you with enough budget. May be someone know such module then wait for response from them.

Link to comment
Share on other sites

  • 0

Here i write the basic procedure to achieve result. If you can do then you will have solution for sure.

  1. Make a copy of blocktopmenu and search-replace blocktopmenu with blocktopmenux, also change file names too where it is blocktopmenu.
  2. When you finish this task, technically you will have two menu modules: blocktopmenu and blocktopmenux
  3. Now, in blocktopmenux, execute hookDisplayTop only and only if user is logged in and in blocktopmenu execute hookDisplayTop only and only if user is not logged in
  4. So here you will have two module one for visitor only and one for logged in user.

If you follow these steps carefully, then you will have what you wanted. Yes, at lest i can do that. Think about you.

Link to comment
Share on other sites

  • 0

@vekia

Przepraszam, że tak to wyszło, ale dostałem odpowiedź prawie natychmiast po swoim poście - z rozpędu odpowiedziałem, żeby nie przenosić tematu na inne fora.

 

Kategoria, która ma być ukryta, nie jest podkategorią, nadrzędna dla niej jest "Główna". Jest elementem w module blocktopmenu. Zawiera dwie podkategorie.

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

  • 0

zatem można ją ukryć dwojako, za pomocą CSS tak jak atomek radzi (będzie widoczna w kodzie strony)

li:nth-child(3)

3 to numer elementu menu od lewej strony

 

 

innym sposobem, aby ukryć ją całkowicie, tj. z kodu strony - to modyfikacja blocktopmenu.php

 

jest tam kod:
 

    protected function generateCategoriesMenu($categories, $is_children = 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>';
                $html .= $this->generateCategoriesMenu($category['children'], 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;
    }

przy return $html dodajemy if condition który sprawdza czy:

- jaki jest id kategorii, jeżeli taki jak tej którą chcemy ukryć to

- sprawdzamy czy klient jest zalogowany

 

no i na podstawie tego zwracamy $html albo nie

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