Import i eksport
Sceny można eksportować do plików JSON i importować do innego sklepu (albo do tego samego sklepu jako duplikat). Przydatne do migracji kampanii między staging a produkcją, dzielenia gotowych szablonów między instancjami sklepu albo backupu przed destrukcyjnymi edycjami.
Eksport
Dział zatytułowany „Eksport”Z listy
Dział zatytułowany „Z listy”Na stronie listy Marketing → Stages zaznacz jedną lub więcej scen przez checkboxy wiersza. Pojawia się toolbar bulk-action na dole:
- Export selected to JSON — pobiera plik zawierający wybrane sceny (max 10 na eksport). Toast: “Exported {count} stage(s)”.
Z menu kontekstowego wiersza
Dział zatytułowany „Z menu kontekstowego wiersza”W menu kontekstowym wiersza (button trzykropkowy): Export to JSON — pobiera pojedynczą scenę.
Co jest zawarte
Dział zatytułowany „Co jest zawarte”Wyeksportowany JSON snapshot zawiera:
- Samą scenę (wszystkie pola overview — nazwa, typ, display type, trigger, frequency, schedule, ustawienia statystyk).
- Każdą warstwę z pozycjami, wymiarami, keyframe’ami animacji, efektami.
- Każdy slajd (dla scen slider) z ich warstwami sceny.
- Wszystkie ID asocjacji M:N (kategorie, produkty, producenci, product streamy, reguły, kanały sprzedaży, grupy klientów, strony CMS).
- Wszystkie referencje media (po media ID + nazwa pliku — faktyczne binaria nie są embedded; kreator importu je obsługuje).
Co nie jest zawarte:
- Eventy statystyk (impressions / CTA clicks / closes / dismissals) — to dane runtime, nie część definicji sceny.
- Drafty i wersje — eksportowany jest tylko bieżący zapisany stan.
Kliknij Import na stronie listy. Otwiera się kreator importu z pięcioma krokami.
Krok 1 — Pliki
Dział zatytułowany „Krok 1 — Pliki”Wybierz jeden lub więcej plików JSON wyeksportowanych z listy scen. Każdy plik może zawierać jedną lub wiele scen.
Kliknij Choose files, żeby wybrać. Każdy plik jest walidowany przez rozszerzenie (.json) i MIME type — akceptowane MIME types to application/json, application/octet-stream, text/plain, text/json. Max 5 MB per plik, max 20 plików na żądanie.
Krok 2 — Analiza
Dział zatytułowany „Krok 2 — Analiza”Kreator czyta każdy plik, parsuje jego strukturę i raportuje: “Analyzing {count} file(s)…” → “Analysis complete.”
Jeśli któryś plik nie sparsuje, kreator pokazuje błąd i pozwala usunąć ten plik przed kontynuacją.
Krok 3 — Mapowanie (asocjacje)
Dział zatytułowany „Krok 3 — Mapowanie (asocjacje)”Niektóre encje (kategorie, produkty, …), do których są referencje, nie istnieją w tym sklepie. Zmapuj je na lokalne ekwiwalenty albo zostaw puste, żeby pominąć link.
Ten krok pojawia się tylko gdy importowany JSON ma referencje do encji, które nie istnieją lokalnie. Dla każdej brakującej asocjacji kreator pokazuje:
- Original ID — UUID z sklepu źródłowego.
- Used by — które sceny się do niego odwołują.
- Replace with… — picker do zmapowania na lokalny ekwiwalent (albo zostaw puste, żeby pominąć link).
Osiem typów asocjacji jest obsługiwane: Categories, Products, Manufacturers, Product streams, Rules, Sales channels, Customer groups, CMS pages.
Jeśli każda referencja istnieje lokalnie, ten krok jest pomijany z: “All referenced entities exist in this shop. No mapping required.”
Krok 4 — Media
Dział zatytułowany „Krok 4 — Media”Niektóre pliki media już istnieją w tym sklepie z tą samą nazwą. Zdecyduj co zrobić dla każdego.
Ten krok pojawia się tylko gdy nazwy importowanych mediów kolidują z istniejącymi. Dla każdego konfliktującego pliku kreator pokazuje miniaturkę Existing obok miniaturki Incoming i cztery akcje:
- Replace existing — nadpisz lokalny plik importowanym.
- Save as new — upload jako nowy plik z inną nazwą (podajesz nową nazwę).
- Keep existing — podlinkuj importowaną scenę do istniejącego lokalnego pliku, drop incoming.
- Skip — no media — drop link media całkowicie (scena nie będzie miała media dla tej warstwy).
Jeśli nie ma konfliktów: “No media conflicts. New media will be uploaded fresh.”
Krok 5 — Potwierdzenie
Dział zatytułowany „Krok 5 — Potwierdzenie”Przejrzyj co się stanie i kliknij Import, żeby potwierdzić.
Podsumowanie:
- “{count} stage(s) will be created”
- “{count} new media file(s) will be uploaded”
- “{count} media conflict(s) will be resolved”
Kliknij Import, żeby wykonać. Toast: “Imported {count} stage(s)”. Nowe sceny pojawiają się na liście ze świeżymi UUID-ami.
Jeśli anulujesz w trakcie importu: “Import in progress. Cancel anyway?”
Jak to działa pod maską
Dział zatytułowany „Jak to działa pod maską”Dwa endpointy admina zasilają kreator:
POST /api/_action/p2lab-stage/import-prepare— przyjmuje multipart upload jednego lub wielu plików JSON. Waliduje je, wykrywa konflikty asocjacji + media, zwraca strukturalny raport renderowany przez kreator.POST /api/_action/p2lab-stage/import-execute— przyjmuje payload plusmediaDecisions[]iassociationDecisions[]użytkownika z kreatora, wykonuje import w jednej transakcji.
Krok execute regeneruje też każde UUID, więc importowana scena jest w pełni niezależna od oryginału — re-import tego samego pliku dwa razy tworzy dwie różne sceny, bez kolizji.
Duplikacja sceny
Dział zatytułowany „Duplikacja sceny”Blisko powiązane, ale w-sklepie: z menu kontekstowego listy Duplicate klonuje scenę w miejscu. Ta sama maszyneria co import bez file roundtrip — świeże UUID-y, świeże referencje media (reużywając istniejące media), bez przenoszenia asocjacji targetowania.
Zasilany przez POST /api/_action/p2lab-stage/duplicate z payloadem {id: <uuid>}.
Gdzie dalej
Dział zatytułowany „Gdzie dalej”- Edytor → Templates — blisko powiązane: szablony to in-shop ekwiwalent import/export dla treści sceny, ale bez targetowania.
- System config — pełna referencja ustawień systemowych.