Dane sekcji: pola panelu, stare klucze i normalizacja
Jak wygląda zapis treści sekcji, dlaczego część stron miała klucze niewidoczne w panelu i co robi komenda sections:normalize.
Model danych
Treść podstrony to lista sekcji. Każda sekcja ma typ (np. eq_product_detail) i tablicę data z wartościami pól. Zestaw pól opisuje rejestr sekcji — to on decyduje, co edytor pokazuje w formularzu i jak zapisuje wartość: pojedynczy tekst, listę wierszy, powtarzalne grupy albo kwotę.
Zapis sekcji jest scalający: klucze nieobecne w żądaniu zostają nietknięte. Dzięki temu częściowy zapis (np. ze skryptu) nie kasuje treści, której nie dotyczył.
Skąd biorą się „stare klucze"
Strony budowane wcześniej importerami miały w danych klucze pod inną nazwą, niż czyta je widok i formularz panelu. Skutek był podwójny: treści nie dało się poprawić w panelu, a część z nich w ogóle się nie renderowała — widok szukał nazwy kanonicznej.
Najczęstsze przypadki:
- pasek CTA z
textzamiastsubheading(gubił podtytuł), - pasek CTA z
cta_label/cta_urlzamiastbutton_label/button_url(gubił oba przyciski), - pola listowe zapisane jako jeden ciąg znaków zamiast listy,
- klucze po funkcjach, których już nie ma (
breadcrumbw nagłówku strony i karcie produktu,targetw kategoriach obrazkowych).
Jak to działa teraz
Mapowanie starych nazw na kanoniczne dzieje się w trzech miejscach: przy renderowaniu strony, przy otwieraniu edytora i przy zapisie sekcji. Treść zapisana starym kluczem renderuje się więc od razu, a pierwszy zapis z panelu sprowadza ją do nazwy, którą rozumie formularz.
Klucze bez konsumenta są pomijane — nie dostają pola w panelu, bo nic ich nie czyta.
Przepisanie danych na stałe
php artisan sections:normalize # wszystkie witryny
php artisan sections:normalize subdomena # jedna witryna
php artisan sections:normalize --dry-run # tylko policz zmiany
Komenda jest idempotentna: drugie uruchomienie nie zgłasza już nic do zmiany. Zapisuje wyłącznie sekcje, nie rusza dat publikacji ani historii wersji, i po zmianie czyści pamięć podręczną witryny.
Kiedy jej użyć
Po zaimportowaniu strony ze starszego payloadu albo po migracji treści z zewnętrznego źródła. Przy zwykłej pracy w panelu nie jest potrzebna — panel od razu zapisuje nazwy kanoniczne.