Przejdź do głównej zawartości

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.

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

W menu kontekstowym wiersza (button trzykropkowy): Export to JSON — pobiera pojedynczą scenę.

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.

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.

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

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

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

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?”

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 plus mediaDecisions[] i associationDecisions[] 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.

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

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