Instrukcja użytkownika i wdrożeniowa
Astra FAQ 1.3.1 dla PrestaShop
Kompletna instrukcja konfiguracji modułu FAQ: tryby zarządzania, pola wielojęzyczne, przypisania do produktów, kategorii, CMS, koszyka, checkoutu, stron statycznych, stron modułów oraz praca w multistore.
0. Szybki start
Najbezpieczniejsza kolejność wdrożenia modułu to wybór trybu zarządzania, dodanie testowych pytań i dopiero potem przypisywanie ich do miejsc na froncie.
- Wgraj moduł i wyczyść cache PrestaShop / Smarty.
- Wybierz sposób zarządzania FAQ: tematy legacy albo kategorie i pytania osobno.
- Uzupełnij tytuły i podstawowe ustawienia strony FAQ dla wszystkich języków.
- Dodaj testową kategorię/temat FAQ oraz pytanie z odpowiedzią w PL i EN.
- Przypisz pytanie do produktu, kategorii, koszyka, CMS albo checkoutu.
- Sprawdź wyświetlanie na froncie i dopiero potem dodawaj kolejne wpisy.
- W multistore sprawdź sklep ID 1 i pozostałe sklepy bez duplikowania danych.
1. Tryby zarządzania FAQ
Moduł ma dwa sposoby pracy. Aktywna jest tylko jedna ścieżka, a druga jest wygaszona i przekierowuje do właściwego trybu.
Tematy FAQ legacy
Tryb zgodny ze starym widokiem: najpierw wybierasz temat/kategorię, a pytania edytujesz w środku. To tryb dla klientów, którzy mieli już dużo FAQ w starym module.
AdminAstraFaqTopics
Kategorie i pytania osobno
Nowy tryb: osobny kontroler kategorii i osobny kontroler pytań. W pytaniu ustawiasz przypisania do miejsc wyświetlania.
AdminAstraFaqCategories
AdminAstraFaqQuestions
1.1. Przekierowania między trybami
| Wybrany tryb | Aktywne kontrolery | Nieaktywne kontrolery |
|---|---|---|
| Tematy FAQ legacy | AdminAstraFaqTopics | AdminAstraFaqQuestions, AdminAstraFaqCategories przekierowują do legacy. |
| Kategorie i pytania osobno | AdminAstraFaqQuestions, AdminAstraFaqCategories | AdminAstraFaqTopics przekierowuje do pytań. |
2. Ustawienia modułu
Poniżej jest rozpiska najważniejszych sekcji konfiguracji i tego, co realnie robią na froncie oraz w panelu administracyjnym.
2.1. Zarządzanie FAQ
| Opcja | Co robi | Kiedy używać |
|---|---|---|
| Sposób zarządzania FAQ | Przełącza między trybem legacy i nowym trybem pytań/kategorii. | Legacy dla starych wdrożeń, nowy tryb dla nowych konfiguracji. |
| Domyślny tytuł FAQ | Główny tytuł strony FAQ oraz fallback dla bloków FAQ. | Uzupełnij osobno dla każdego języka. |
| Przyciski zarządzania | Przenoszą do instrukcji, tematów, kategorii lub pytań. | Aktywne są tylko te zgodne z wybranym trybem. |
2.2. Publiczna strona FAQ
| Opcja | Znaczenie |
|---|---|
| Włącz stronę FAQ | Włącza publiczną stronę modułu, np. /faq. |
| Friendly URL | Slug strony FAQ. Po zmianie wyczyść cache i odśwież routing PrestaShop. |
| Wyszukiwarka FAQ | Pokazuje wyszukiwarkę na publicznej stronie FAQ. |
| Szukaj także w odpowiedziach | Rozszerza wyszukiwanie z pytań na treść odpowiedzi. |
| Pokaż inne kategorie | Pozwala wyświetlać też inne tematy/kategorie FAQ na stronie głównej FAQ. |
| Grupowanie po tematach | Dzieli FAQ według tematów/kategorii. |
| Lista tematów | Pokazuje nawigację po tematach. |
| Liczniki | Pokazuje liczbę pytań lub interakcji, zależnie od widoku. |
2.3. Wygląd FAQ
| Opcja | Co zmienia |
|---|---|
| Typ wyświetlania | Accordion, lista, zawsze otwarte albo warianty grupowane. |
| Sposób otwierania | Żadne otwarte, pierwsze otwarte, wszystkie otwarte albo pojedyncze otwieranie. |
| Kolumny | Liczba kolumn w układzie FAQ. |
| Limit pytań na temat | Limit 0 oznacza brak limitu. |
| Kolory nagłówków | Kolory tła i tekstu pytania w stanie normalnym i aktywnym. |
2.4. Hooki i miejsca automatyczne
| Sekcja | Dostępne miejsca | Uwagi |
|---|---|---|
| Produkt | displayFooterProduct, displayProductAdditionalInfo, displayProductExtraContent, displayAstraFaqProduct | Wybierasz jedno miejsce automatyczne dla FAQ na produkcie. |
| Kategoria | displayFooterCategory, displayAstraFaqCategory | Opcja „tylko pierwsza strona” chroni paginację kategorii. |
| Koszyk | displayShoppingCartFooter, displayShoppingCart, displayFooter | displayFooter działa tylko po rozpoznaniu, że aktualna strona to koszyk. |
| CMS | displayCMSDisputeInformation albo customowy hook displayAstraFaq | Customowy hook wklejasz w tpl CMS z parametrem page. |
2.5. SEO
| Opcja | Znaczenie |
|---|---|
| Meta title | Tytuł SEO strony FAQ. |
| Meta description | Opis SEO strony FAQ. |
| Noindex / nofollow | Kontrola indeksacji strony FAQ. |
| Rich snippet mode | Kontrola generowania danych FAQPage JSON-LD. |
3. Pola wielojęzyczne
Pytania, odpowiedzi, tytuły, opisy i wprowadzenie nad pytaniami są multilang.
- Przy polach językowych widoczny jest znacznik języka, np.
PL,EN,DE. - Pytanie powinno mieć uzupełnioną treść w każdym aktywnym języku sklepu.
- Jeżeli treść w aktualnym języku jest pusta, moduł używa fallbacku: aktualny język → domyślny język PrestaShop → język ID 1 → pierwszy język, w którym pytanie i odpowiedź są uzupełnione.
- Wprowadzenie nad pytaniami też ma oddzielne pola dla języków.
4. Multistore
FAQ jest globalne dla całego multistore. Nowe przypisania są wspólne, a stare przypisania zapisane dla sklepu ID 1 są traktowane jako wspólne.
4.1. Widoczność pytania w sklepach
| Wartość pola | Efekt |
|---|---|
| Puste | Pytanie widoczne we wszystkich sklepach. |
1 | Pytanie widoczne tylko w sklepie ID 1. |
1,3,4 | Pytanie widoczne tylko w sklepach 1, 3 i 4. Na sklepie 2 będzie ukryte. |
4.2. Dlaczego koszyk może działać inaczej w multistore
W jednym sklepie koszyk może mieć URL /koszyk?action=show, a w drugim /cart?action=show. Moduł nie opiera się tylko na polskim slugu, tylko rozpoznaje koszyk po kilku sygnałach:
php_self/ nazwa kontrolera, jeśli PrestaShop poprawnie ją ustawi.REQUEST_URI, np./cart?action=showalbo/koszyk?action=show.controller,controller_name,page_name.- Klasy strony ze Smarty, jeżeli motyw je udostępnia.
shop_ids oraz czy przypisanie koszyka istnieje jako globalne albo stare przypisanie sklepu ID 1.4.3. Jak działa odczyt przypisań w multistore
Front zawsze najpierw szuka bezpośrednich przypisań pytań w astra_faq_item_binding. Dopiero gdy nie znajdzie żadnego pasującego pytania, robi fallback do legacy przypisań tematów w astra_faq_binding.
| Zakres | Co oznacza |
|---|---|
id_shop = 0 | Przypisanie globalne dla wszystkich sklepów. |
id_shop = aktualny sklep | Przypisanie tylko dla aktualnego sklepu. |
id_shop = 1 | Fallback kompatybilności dla starszych wpisów utworzonych na sklepie głównym. |
shop_ids = 1,2,3,4 oraz bindingiem koszyka id_shop = 0, bind_type = cart, object_key = cart pokaże się na sklepie ID 2, jeśli ma uzupełnione pytanie i odpowiedź albo dostępny fallback językowy.5. Pytania i przypisania
W nowym trybie każde pytanie ma treść, odpowiedź, aktywność, pozycję oraz przypisania do miejsc wyświetlania.
5.1. Podstawowe pola pytania
| Pole | Opis |
|---|---|
| Temat / kategoria FAQ | Grupa, do której należy pytanie. |
| Pytanie | Treść pytania, multilang. |
| Odpowiedź | Treść odpowiedzi, multilang, może zawierać formatowanie. |
| Pozycja | Ręczna kolejność. Popularne pytania mogą dostać wyższą pozycję na froncie. |
| Aktywne | Wyłącza lub włącza pytanie bez usuwania go. |
| Widoczność w multistore | Puste = wszystkie sklepy, np. 1,3,4 = tylko podane sklepy. |
5.2. Typy przypisań
Produkty
FAQ przypisane do konkretnych produktów PrestaShop.
Kategorie
FAQ przypisane do kategorii PrestaShop.
CMS
FAQ przypisane do stron CMS po ID strony.
Blog
FAQ przypisane do wpisów blogowych. Dla STBlog/Transformer w artykule użyj {hook h='displayAstraFaq' page="blog-{$blog.id}"}.
Koszyk
FAQ przypisane do koszyka jako wspólna strona cart.
Checkout
FAQ przypisane do kroków checkoutu przez klucze checkout-step1 itd.
Strony statyczne
FAQ przypisane do stron typu contact, stores, sitemap.
Strony modułów
FAQ przypisane do URL typu module/stlovedproduct/myloved.
Blacklist
Wykluczenia, np. produkty, na których dane FAQ nie ma się pojawić.
6. Strona FAQ i liczniki
6.1. Publiczna strona FAQ
Moduł ma publiczną stronę FAQ, domyślnie pod adresem:
/faq
Adres można zmienić w ustawieniu Friendly URL.
6.2. Liczniki otwarć
Moduł zlicza tylko ręczne kliknięcia użytkownika. Nie zwiększa licznika, gdy pytanie jest otwarte automatycznie przez ustawienie widoku.
| Licznik | Kiedy rośnie |
|---|---|
front_open_count | Po ręcznym otwarciu pytania na froncie. |
front_search_open_count | Po otwarciu pytania z wyników wyszukiwania. |
front_last_open | Data ostatniego ręcznego otwarcia. |
7. Produkty i kategorie
7.1. Produkty
FAQ do produktów można przypisać przez wyszukiwarkę produktów w edycji pytania. Sposób podpisywania produktów w panelu zależy od ustawienia formatu etykiety.
| Hook produktu | Zastosowanie |
|---|---|
displayFooterProduct | Najczęstszy wariant, FAQ pod treścią produktu. |
displayProductAdditionalInfo | FAQ w okolicy dodatkowych informacji produktu. |
displayProductExtraContent | FAQ jako dodatkowa sekcja/tabs, jeśli motyw to obsługuje. |
displayAstraFaqProduct | Customowy hook produktu do ręcznego użycia w motywie. |
7.2. Kategorie
FAQ do kategorii przypisujesz przez wyszukiwarkę kategorii. W konfiguracji można ustawić, czy FAQ ma pojawiać się tylko na pierwszej stronie paginacji kategorii.
| Hook kategorii | Zastosowanie |
|---|---|
displayFooterCategory | FAQ pod listingiem kategorii. |
displayAstraFaqCategory | Customowy hook kategorii do ręcznego użycia w motywie. |
8. Koszyk
Koszyk może działać automatycznie przez hooki albo ręcznie przez customowy hook w tpl.
8.1. Automatyczne hooki koszyka
| Hook | Opis |
|---|---|
displayShoppingCartFooter | Rekomendowane miejsce, stopka koszyka. |
displayShoppingCart | Główny hook koszyka, zależny od motywu. |
displayFooter | Fallback globalny, ale moduł renderuje FAQ tylko wtedy, gdy rozpozna aktualną stronę jako koszyk. |
8.2. Ręczne miejsce w koszyku
Jeżeli klient chce konkretne miejsce w tpl, wklej:
{hook h='displayAstraFaq' page='cart'}
Pytanie musi mieć zaznaczone przypisanie do koszyka.
9. Checkout
Checkout działa ręcznie. To celowe, bo motywy checkoutu różnią się strukturą i automatyczne hooki były nieczytelne.
9.1. Hooki do wklejenia w tpl
| Miejsce | Hook | Przypisanie pytania |
|---|---|---|
| Cały checkout | {hook h='displayAstraFaq' page='checkout'} | checkout |
| Krok 1 / dane klienta | {hook h='displayAstraFaq' page='checkout-step1'} | checkout-step1 |
| Krok 2 / adresy lub dostawa | {hook h='displayAstraFaq' page='checkout-step2'} | checkout-step2 |
| Krok 3 / płatność | {hook h='displayAstraFaq' page='checkout-step3'} | checkout-step3 |
| Potwierdzenie zamówienia | {hook h='displayAstraFaq' page='checkout-step4'} | checkout-step4 |
9.2. Przykład na dole order confirmation
Wklej wewnątrz bloku page_content_container, najlepiej przed końcowym {/block}:
{block name='astrafaq_order_confirmation'}
<section id="content-astrafaq-order-confirmation" class="card card_trans mb-3">
<div class="card-block">
{hook h='displayAstraFaq' page='checkout-step4'}
</div>
</section>
{/block}
10. CMS
CMS może działać przez standardowy hook CMS albo przez customowy hook wklejony w tpl strony CMS.
10.1. Standardowy hook CMS
displayCMSDisputeInformation
Jeżeli motyw renderuje ten hook, moduł pobierze aktualne id_cms i pokaże FAQ przypisane do tej strony CMS.
10.2. Customowy hook CMS w tpl
Dla CMS o ID 1 wklej:
{hook h='displayAstraFaq' page='cms-1'}
Dla CMS o ID 7:
{hook h='displayAstraFaq' page='cms-7'}
cms-1 musi odpowiadać ID strony CMS, do której przypisane jest pytanie.11. Blog / STBlog
FAQ może być przypisane do wpisu blogowego po ID wpisu. Dla modułu STBlog / Transformer hook wkleja się bezpośrednio w szablonie artykułu, gdzie dostępna jest zmienna $blog.id.
11.1. Hook do artykułu blogowego
W szablonie artykułu blogowego, np. w pliku artykułu STBlog, wklej w wybranym miejscu:
{hook h='displayAstraFaq' page="blog-{$blog.id}"}
Najczęściej można go wkleić po treści artykułu, np. po:
<div class="blog_content style_content m-b-1">
{hook h='displayStBlogContent'}
{$blog.content nofilter}
</div>
Przykład z FAQ pod treścią artykułu:
<div class="blog_content style_content m-b-1">
{hook h='displayStBlogContent'}
{$blog.content nofilter}
</div>
{hook h='displayAstraFaq' page="blog-{$blog.id}"}
11.2. Przypisanie pytania
W edycji pytania w polu Blog dodaj ID wpisu blogowego. Dla wpisu ID 15 moduł będzie szukał przypisania blogowego 15, a hook użyje klucza blog-15.
{hook h='displayAstraFaq' page="blog-{$blog.id}"}.12. Strony statyczne i strony modułów
12.1. Strony statyczne PrestaShop
Przykładowe klucze stron statycznych:
contact
stores
sitemap
new-products
best-sales
prices-drop
Customowe miejsce w tpl:
{hook h='displayAstraFaq' page='contact'}
12.2. Strony modułów i custom URL
Przykład strony ostatnio oglądanych produktów:
module/stlovedproduct/myloved
Customowy hook:
{hook h='displayAstraFaq' page='module/stlovedproduct/myloved'}
12.3. Automatyczne dopasowanie przez page.tpl
page.tpl blok:{block name='astrafaq_page_content_bottom'}{if isset($page.page_name) && $page.page_name}{hook h='displayAstraFaq' page=$page.page_name}{/if}{/block}
Moduł pobierze wartość $page.page_name i porówna ją z przypisaniami FAQ. Dla strony kontaktu wartość contact odpowiada przypisaniu strony statycznej contact.
Moduł normalizuje każdy klucz PrestaShop module-NAZWAMODULU-KONTROLER do module/NAZWAMODULU/KONTROLER, np. module-stlovedproduct-myloved do module/stlovedproduct/myloved. Własny URL jest zapisywany jako identyfikator strony w bazie przypisań.
page.tpl.13. SEO i rich snippets
Moduł może generować dane strukturalne FAQPage oraz kontrolować meta dane strony FAQ.
| Tryb | Znaczenie |
|---|---|
all | Generowanie danych FAQPage szerzej, zależnie od kontekstu. |
main | Dane strukturalne głównie dla podstawowej strony FAQ. |
main_and_faq | Strona FAQ i wybrane bloki FAQ. |
main_and_categories | Strona FAQ i kategorie. |
none | Wyłączone generowanie FAQPage JSON-LD. |
14. Wdrożenie i diagnostyka
14.1. Checklist po aktualizacji
- Wyczyść cache PrestaShop i Smarty.
- Wejdź w instrukcję w module i sprawdź, czy nie ładuje listy pytań.
- Sprawdź aktywny tryb zarządzania i przekierowania między kontrolerami.
- Dodaj pytanie testowe w PL i EN.
- Sprawdź produkt, kategorię, CMS, koszyk i stronę modułu.
- W checkout wklej hook ręcznie w odpowiedni template.
- W multistore sprawdź sklep ID 1 i sklep ID 2 bez duplikowania pytań.
14.2. Gdy FAQ nie wyświetla się w koszyku na multistore
- Sprawdź, czy pytanie ma przypisanie do koszyka.
- Sprawdź, czy pytanie jest aktywne.
- Sprawdź, czy pole widoczności sklepów jest puste albo zawiera aktualny ID sklepu.
- Sprawdź, czy w konfiguracji zaznaczony jest hook koszyka renderowany przez motyw.
- Jeżeli używasz fallbacku
displayFooter, sprawdź, czy URL koszyka jest rozpoznawany jakocart/koszyk.
14.3. Czego nie powinno być w kodzie
stare globalne aliasy SQL
robocze wyjścia diagnostyczne
stare warianty parametru widget
zbędne helpery PrestaShop i DB
debug po IP