1. Do czego służy moduł
PriceWars zamienia Twój katalog w feedy produktowe, czyli pliki XML, które pobierają Google Merchant Center, katalog Facebooka i Instagrama (Meta), Ceneo i inne platformy, żeby pokazywać Twoje produkty, ceny i stany. Feedów możesz utworzyć dowolnie dużo: osobny dla każdej platformy, języka, waluty lub kraju, każdy z własnymi produktami, kategoriami i cenami.
Feedy dostępne w wersji 1.0:
- Reklamy i media społecznościowe — Google Merchant Center (reklamy produktowe i bezpłatne informacje) z feedem stanu w sklepach stacjonarnych, Facebook / Instagram (katalog Meta), Pinterest;
- Porównywarki i marketplace'y — Ceneo (z kategoriami Ceneo albo sklepu), Morele.net Marketplace, Okazje.info, I-SZOP.pl i K-SZOP.pl; Grupa Domodi — Domodi, Homebook, Allani; Heureka.cz / Heureka.sk z feedem dostępności i Zboží.cz (Czechy, Słowacja); Skroutz (Grecja); eMAG Marketplace (Rumunia, Węgry, Bułgaria); Compari.ro, Árukereső.hu i Pazaruvaj.com (Rumunia, Węgry, Bułgaria); Skąpiec.pl; ShopMania; idealo (CSV: Niemcy, Austria, Wielka Brytania, Francja, Włochy, Hiszpania, Polska); Awin (sieć afiliacyjna, CSV); ChatGPT (feed produktów OpenAI wysyłany przez SFTP);
- Integratory i marketplace'y dla dostawców — Base.com (BaseLinker), Droplo, Media Expert (dwie wersje pliku dostawcy), marketplace'y Mirakl (plik ofert OF01: Carrefour, Decathlon, Empik, Conrad…);
- Uniwersalny XML — opisany format ze schematem XSD dla partnerów, hurtowni i własnych integracji;
- Mapa witryny — produkty, kategorie, strony CMS i marek dla wyszukiwarek, z wersjami językowymi (hreflang) i indeksem map dla dużych katalogów;
- Własny szablon — dowolna struktura XML zbudowana ze smart tagów.
Przed każdym wydaniem sprawdzamy każdy format ze specyfikacją jego platformy, a moduł sprawdza według tych samych reguł każdy wygenerowany przez Ciebie plik (Diagnostyka). Skąpiec.pl, ShopMania, Base.com, Droplo i Media Expert nie publikują specyfikacji: ich pliki mają strukturę, którą te platformy od lat przyjmują od sklepów — sprawdź pierwszy import w panelu platformy.
Działa z PrestaShop 1.7.8, 8.x i 9.x (PHP 7.2.5 lub nowszy) oraz z trybem multistore.
2. Instalacja
- Pobierz moduł z Moje konto → Historia zamówień w sklepie addonspresta.com.
- W panelu sklepu otwórz Moduły → Menedżer modułów i kliknij Załaduj moduł.
- Upuść plik
ap_pricewars_v1.0.1.zipi poczekaj na potwierdzenie. - Otwórz Katalog → PriceWars.
3. Jak to działa
- Dodaj feed i wybierz platformę. Nowy feed ma od razu ustawienia, jakich oczekuje dana platforma.
- W Mapowaniu kategorii wybierz, które kategorie są eksportowane, a dla platform z własnym drzewem kategorii (Google, Meta, Pinterest, Domodi, Ceneo, Heureka, Zboží.cz, I-SZOP.pl) — odpowiadającą im kategorię platformy. Kategoria bez własnego wyboru przejmuje wybór najbliższej kategorii nadrzędnej, więc zmapowanie kategorii głównej obejmuje wszystkie jej podkategorie.
- Skopiuj adres feedu z listy i wklej go w panelu platformy (Merchant Center, Commerce Manager, panel Ceneo).
- Ustaw zadanie cron, żeby plik był zawsze aktualny (zob. „Generowanie”).
Ceny, stany i koszty dostawy moduł liczy funkcjami samego PrestaShop — wychodzą takie same, jakie widzą Twoi klienci w sklepie, z Twoimi podatkami, cenami specjalnymi i rabatami grup. Duże katalogi są wczytywane porcjami, więc zużycie pamięci pozostaje niskie. Moduł sam nigdzie nie wysyła Twoich danych: to platformy pobierają feedy. Jedyny wyjątek to feed, w którym włączysz Wysyłaj przez SFTP (wymaga tego ChatGPT): jego plik trafia na serwer SFTP, który wskażesz.
4. Funkcje i ustawienia
Lista feedów
Katalog → PriceWars pokazuje feedy bieżącego sklepu z liczbą ofert i datą ostatniego pliku. Akcje w wierszu otwierają Mapowanie kategorii, Diagnostykę, Podgląd (pierwsze 20 ofert, nic się nie zapisuje), Generuj teraz, Duplikuj i Usuń. Pod listą jest adres i polecenie crona.
Ustawienia feedu (zakładki)
- Ogólne — nazwa (widoczna tylko dla Ciebie), nazwa w adresie (np.
ceneo, użyta w/feed/ceneo.xml), aktywność. - Generowanie — Plik z pamięci podręcznej (plik jest używany ponownie przez ustawiony czas ważności), Tylko plik (zapisuje go cron lub wiersz poleceń — najszybciej, wymagane przez platformy, które potrzebują statycznego pliku) albo Na żywo (generowany przy każdym pobraniu); kompresja; Wymagaj klucza feedu, jeśli feed ma być prywatny.
- Język i waluta — język, waluta, kraj (podatki i dostawa) oraz grupa klientów (rabaty). Możesz pozwolić na
id_lang,id_currencyiid_countryw adresie, żeby jeden feed obsługiwał kilka rynków. Domyślnie jest to wyłączone i działa tylko dla języka aktywnego w sklepie, waluty aktywnej i przypisanej do sklepu oraz aktywnego kraju; inne wartości są pomijane. - Stany i kombinacje — co zrobić z produktami niedostępnymi w magazynie, korekta i minimum stanu, jedna oferta na produkt lub na kombinację, nazwa i id kombinacji. Nie zmieniaj id w działającym feedzie: platformy rozpoznają po nim oferty.
- Produkty — pomijanie produktów wyłączonych, niedostępnych do zamówienia, wirtualnych i zestawów, bez marki, indeksu, kodu kreskowego lub zdjęcia; filtry widoczności, stanu produktu, ceny i rabatu; listy produktów, marek, dostawców lub kategorii do eksportu albo do wykluczenia.
- Nazwa i opis — wielkość liter, szablon nazwy ze smart tagami (np.
{brand} {name_base} {feature:5}), źródło opisu (krótki, długi, oba lub szablon), obsługa HTML i limity długości. - Zdjęcia — rozmiar, liczba zdjęć, najpierw zdjęcia kombinacji.
- Ceny — która cena trafia do feedu (brutto lub netto, przed rabatami lub po nich), modyfikator ceny, np.
1.1albo{p} * 1.1 + 5, cena minimalnej ilości zamówienia oraz najniższa cena z 30 dni przed promocją (Omnibus) dla platform, które jej wymagają, oraz cena jednostkowa dla Google (z ceny jednostkowej i jednostki ustawionych w produkcie, np. „za 100 g”). - Dostawa — bez kosztu, przewoźnik domyślny, najszybszy lub najtańszy, darmowa dostawa albo stały koszt; pomijani przewoźnicy, kraj dostawy, pomijanie produktów, których nie dostarcza żaden przewoźnik.
- Linki — parametry UTM (pozostałe dodawane są tylko razem z
utm_source) i dodatkowe parametry. - Dodatkowe tagi — XML dopisywany do każdej oferty dla pól, których moduł nie zapisuje sam, np.
<g:custom_label_0>. Włącz Używaj własnych dodatkowych tagów, aby je wpisać; własny szablon zaczyna się od przykładu. Reguły węzłów XML zmieniają gotowy XML każdej oferty, jedna reguła w wierszu:remove g:mpn,set g:condition = refurbished if g:brand = Outlet,add g:custom_label_0 = {brand},rename g:mpn => g:gtin,skip if g:availability = out_of_stock(warunki=,!=,contains,is empty,is not empty; działa też ścieżka, np.images/image, i atrybut, np.@basket). Oferty pominięte przez regułę widać w Diagnostyce. - Platforma — opcje wybranej platformy, np.
identifier_exists, cena promocyjna i MPN dla Google, Kup Teraz (basket) i czas wysyłki (avail) dla Ceneo, częstotliwość zmian i priorytet dla mapy witryny. - Zaawansowane — dziedziczenie mapowania przez podkategorie, kategoria produktu (domyślna lub najgłębsza eksportowana), zapis pominiętych produktów.
Każde pole ma pod sobą krótką podpowiedź. Wartości są sprawdzane przy zapisie, a formularz pokazuje, co poprawić.
Smart tagi
Nazwy, opisy, dodatkowe tagi, wartości UTM i własne szablony przyjmują smart tagi w nawiasach klamrowych, np.
{name}, {name_base}, {brand}, {reference}, {gtin}, {price}, {price_regular}, {quantity}, {link},
{image}, {category}, {feature:ID}, {attribute:ID:separator}, {shipping_price}. Filtry zmieniają wartość:
{name|upper}, {description_short|strip|truncate:200}. Działają też nazwy znane z PriceWars II, np. {cecha:ID}.
Mapowanie kategorii
Kolumna Eksport każdej kategorii sklepu ma wartość Jak nadrzędna, Tak albo Nie. Dla platform z drzewem kategorii zamiast tego wybierasz kategorię platformy — wpisz kilka liter i wybierz z listy; zmapowana kategoria jest eksportowana, Nie ją pomija. Ustaw to samo we wszystkich podkategoriach kopiuje wybór w dół drzewa. Dwie liczby przy kategorii to produkty, dla których jest ona domyślna, i wszystkie jej produkty.
Listy kategorii platform są dołączone do modułu. Gdy platforma zmieni swoje drzewo, kliknij Pobierz aktualną listę pod tabelą: moduł pobierze listę od platformy (Google, Ceneo, Heureka, Zboží.cz) i będzie jej używał, dopóki aktualizacja modułu nie przyniesie nowszej. I-SZOP.pl ma stałą listę sześciu kategorii.
Narzędzia mapowania nad tabelą: Każda kategoria + Zastosuj do wszystkich ustawia jeden wybór we wszystkich
wierszach (zapisz przyciskiem Zapisz); Skopiuj mapowanie z innego feedu sklepu (kategorie platformy tylko między
feedami tej samej platformy); Eksportuj CSV i Importuj CSV, aby edytować mapowanie w arkuszu — kolumny
id_category, state (inherit, yes, no) i platform_category_id; kategorie, których nie ma w pliku, zachowują
swój wybór.
Diagnostyka
Strona diagnostyki pokazuje:
- ostrzeżenia o konfiguracji — np. feed bez mapowania, tryb katalogu, stary plik albo nieudane generowanie;
- sprawdzenie zgodności ze specyfikacją bieżącego pliku — każdą naruszoną regułę z ofertą i miejscem w dokumentacji platformy, z którego reguła pochodzi;
- pominięte produkty z ostatniego generowania z powodem (gdy włączone jest Zapisuj pominięte produkty);
- statystyki ostatnich 30 generowań: oferty wyeksportowane i pominięte oraz czas generowania (wskaż słupek, aby zobaczyć liczby);
- ostatnie generowania z liczbą ofert, czasem i pamięcią.
Podgląd → Tester produktu: wpisz ID produktu, aby zobaczyć, czy feed go wybiera, dlaczego dana oferta jest pomijana (np. Brak w magazynie albo Brak marki (wymaganej przez platformę)) i jaki XML ma każda eksportowana oferta. Nic nie jest zapisywane.
Ustawienia wspólne dla wszystkich feedów
Moduły → Menedżer modułów → PriceWars → Konfiguruj: krótkie adresy feedów, udostępnianie feedów podczas przerwy technicznej, eksport produktów z kategorii głównej, liczba produktów w porcji, limity czasu i pamięci, czas przechowywania statystyk. Ramka Pomoc na górze prowadzi do tej instrukcji i do strony modułu na addonspresta.com.
Generowanie
Feedy w trybie Plik z pamięci podręcznej lub Tylko plik potrzebują zadania cron. Najlepiej z wiersza poleceń:
php /sciezka/do/sklepu/modules/ap_pricewars/bin/generate.php --shop=1
Uruchamiaj je co 15–60 minut. Panel hostingu ma zwykle stronę „Zadania cron”; jeśli przyjmuje tylko adresy, użyj adresu crona spod listy feedów. Generuj teraz zapisuje plik od razu.
5. Multistore
Każdy feed należy do jednego sklepu. Wybierz sklep w nagłówku panelu, aby zobaczyć i edytować jego feedy; ceny, stany, linki i podatki pochodzą z tego sklepu. Ustawienia wspólne zapisują się dla sklepu lub grupy sklepów. W kontekście wszystkich sklepów albo grupy zapisać może tylko pracownik, który zarządza każdym jej sklepem. Jedna licencja obejmuje wszystkie sklepy instalacji.
6. Odinstalowanie
Menedżer modułów → PriceWars → Odinstaluj usuwa wszystkie feedy, mapowania, statystyki, wygenerowane pliki i ustawienia. Adresy feedów przestają działać. Aby wszystko zachować, wybierz Wyłącz.
7. Najczęstsze pytania i problemy
Feed jest pusty. Otwórz Mapowanie kategorii: dopóki nie zmapujesz żadnej kategorii, nic nie jest eksportowane. Potem sprawdź Diagnostyka → Pominięte produkty (najpierw włącz Zapisuj pominięte produkty w zakładce Zaawansowane).
Merchant Center zgłasza złą cenę. Sprawdź kraj i grupę klientów feedu — cena jest liczona właśnie dla nich. W Stanach Zjednoczonych i Kanadzie Google oczekuje cen netto, w pozostałych krajach brutto; moduł robi to sam.
Ceneo odrzuca kategorie. Użyj feedu Ceneo z mapowaniem kategorii albo Ceneo bez mapowania kategorii, wtedy Ceneo samo przypisze kategorie.
Feed generuje się długo albo przerywa w połowie. Ustaw tryb Tylko plik lub Plik z pamięci podręcznej z cronem w wierszu poleceń i zmniejsz Produktów w jednej porcji, jeśli serwerowi brakuje pamięci. Gdy serwer przerywa skrypty po kilku sekundach (hosting współdzielony), włącz Generuj partiami: każde wywołanie crona zapisuje kolejne Produktów w partii, a plik jest podmieniany po ostatniej partii — uruchamiaj cron co kilka minut.
Platforma wymaga pola, którego moduł nie wysyła.
Dodaj je w Dodatkowych tagach ze smart tagiem, np. <g:material>{feature:7}</g:material>.
Heureka: którego feedu potrzebuję?
Feed Heureka.cz / Heureka.sk zawiera produkty. Sklepy w trybie PPC mogą dodać feed dostępności, który Heureka
pobiera co 10 minut — ustaw w obu te same opcje kombinacji i kategorii, bo identyfikatory muszą się zgadzać.
W feedzie dostępności Dni dostawy, Godzina graniczna zamówienia i Godzina dostawy dodają gwarantowany termin
dostawy (tylko dni robocze). Kilku przewoźników: w Przewoźnicy → DELIVERY_ID wpisz pary, np. 12=PPL, 15=ZASILKOVNA
(id przewoźnika z Wysyłka → Przewoźnicy).
Skroutz zgłasza moje linki lub zdjęcia.
Skroutz przyjmuje tylko adresy https. Aby wysyłać rozmiary jako warianty, a każdy kolor jako osobny produkt, ustaw
w zakładce Platforma Grupę atrybutów rozmiaru i Grupę atrybutów koloru (id z Katalog → Atrybuty i cechy).
eMAG prosi o zmapowanie pól. eMAG nie ma stałej struktury pliku: w panelu eMAG, w Products → Feeds, przypisz każdy element pliku do pola eMAG o tej samej nazwie, a swoje kategorie do kategorii eMAG.
Skąd biorą się dane GPSR (producent, osoba odpowiedzialna)? Z adresów Twoich marek lub dostawców (Katalog → Marki i dostawcy, adres marki albo dostawcy): wymagane są nazwa firmy (lub nazwa marki), ulica, kod pocztowy, miasto i kraj, a kontaktowy e-mail wpisz w polu Inne. Włącz Wysyłaj dane GPSR w zakładce Platforma feedu Ceneo lub Heureka i wybierz, czy producentem jest marka, czy dostawca. Dla producentów spoza UE wybierz Osobę odpowiedzialną w UE (na przykład dostawcę, który jest importerem). Ostrzeżenia bezpieczeństwa pochodzą z cechy produktu, którą wskazujesz jej id.
Jak wysłać produkty do ChatGPT?
OpenAI przyjmuje feedy produktów tylko przez wysyłkę na serwer SFTP, który podaje po zatwierdzeniu sklepu. Dodaj feed
ChatGPT i uzupełnij Wysyłaj przez SFTP w zakładce Ogólne: host, użytkownika, hasło, nazwę pliku, której oczekuje
OpenAI (domyślnie products.csv.gz), oraz odcisk klucza serwera (MD5 albo SHA256:…, tak jak pokazuje ssh-keygen -l).
Wysyłka zostanie przerwana, gdy serwer pokaże inny klucz. Po zmianie hosta, portu lub użytkownika wpisz hasło ponownie.
Każde generowanie z crona wysyła wtedy cały katalog feedu; nieudana wysyłka jest widoczna w Diagnostyce przy przebiegu.
Używałem SEIGI PriceWars II. Czy mogę przenieść feedy?
Tak: Katalog → PriceWars → Import z PriceWars II pokazuje feedy PriceWars II w sklepie. Import tworzy feedy z ich
formatem, ustawieniami, które mają tu odpowiednik, i mapowaniem kategorii; PriceWars II nie jest zmieniany. Z opcją
Nazwij nowe feedy pw2-N strona pokazuje reguły Apache i nginx, które przekierowują stare adresy
(modules/pricewars2/service.php?id_xml=N) na nowe feedy, więc platformy dalej działają. Przeczytaj raport: są w nim
ustawienia bez dokładnego odpowiednika — sprawdź je i wygeneruj każdy feed, zanim się przełączysz.
Jak dać hurtownikowi feed z jego cenami? Włącz Linki B2B w zakładce Język i waluta feedu, a potem w Diagnostyka → Linki B2B utwórz link dla grupy klientów (np. Hurt) albo dla jednego klienta (ID lub e-mail). Link ma podpis: feed trafia do niego z rabatami tej grupy i cenami specyficznymi tego klienta. Przy każdym linku widać ostatnie pobranie; Unieważnij wyłącza jeden link, Unieważnij wszystkie linki zmienia podpis feedu, więc żaden stary link już nie działa. Pracownik bez dostępu do Klientów widzi tylko ID klienta i tworzy linki po ID.
Okazje.info albo Zboží.cz nie pokazują mojej promocji.
Obie platformy wymagają najniższej ceny z 30 dni przed promocją (dyrektywa Omnibus). Moduł zapisuje ceny przy każdym
generowaniu feedu i przechowuje je przez 400 dni, więc zna tę cenę dopiero wtedy, gdy feed był generowany w tych
30 dniach — ustaw zadanie cron co najmniej raz dziennie. Do tego czasu promocja trafia do feedu jak zwykła cena.
Historia cen jest prowadzona osobno dla sklepu, waluty, kraju i grupy klientów, a opcja jest w zakładce Ceny
(Najniższa cena przed promocją, domyślnie włączona). Tag {omnibus_price} daje tę samą cenę dla dowolnej innej
platformy.
Gdzie wpisać adres feedu Compari.ro? W Centrul de clienti Compari, w Datele magazinului → Sursa listei produselor; Árukereső.hu i Pazaruvaj.com mają to samo menu. Compari pobiera plik raz dziennie. Produkty na stanie mają czas dostawy 1 („In stoc” — tylko przy tej wartości działa koszyk Compari Marketplace), pozostałe czas dostawy produktów bez stanu z zakładki Platforma. W elektronice, IT, AGD i LEGO uzupełnij MPN produktów: Compari łączy oferty po kodzie producenta.
Adres /feed/….xml zwraca „nie znaleziono strony”.
Włącz przyjazne adresy URL w Preferencje → Ruch albo użyj adresu z index.php i sprawdź, czy feed jest
aktywny.
8. Aktualizacje i wsparcie
Aktualizacje są bezpłatne bez limitu czasu: nowe wersje pobierzesz z Moje konto → Historia zamówień w sklepie addonspresta.com i wgrasz jak nowy moduł. Feedy i ustawienia zostają. Nowe platformy dochodzą w bezpłatnych aktualizacjach.
Wsparcie obejmuje 12 miesięcy od zamówienia: napisz na mail@addonspresta.com lub przez formularz kontaktowy na addonspresta.com (od poniedziałku do piątku, 10:00–16:00; odpowiadamy zwykle w ciągu 2 dni roboczych). Podaj wersję PrestaShop, wersję modułu i zrzut ekranu strony Diagnostyka feedu.