# Bloki, targeting i kolejność

## Bloki, targeting i statyczne elementy

W pliku rodzica:

```json
{
  "blocks": [{ "type": "card" }, { "type": "_signature" }],
  "max_blocks": 12
}
```

Jawne nazwy ograniczają listę dostępnych bloków. `@theme` dopuszcza publiczne definicje; nazwy zaczynające się od `_` wymagają jawnego wskazania. Aby blok pojawił się w pickerze, musi mieć `presets` z nazwą.

Bloki dynamiczne renderujesz w kolejności `block_order`:

```html
<template gs-slot="blocks"></template>
```

Stały blok osadzasz w konkretnym miejscu:

```html
<template gs-block="_signature" gs-id="signature"></template>
```

Typ i ID są literałami. Blok stały ma edytowalne ustawienia, ale nie przyciski przenoszenia i usuwania. Renderuje się z domyślnymi wartościami także wtedy, gdy nie ma jeszcze zapisanych danych. Aby pokazać jego ustawienia od początku, wpisz go do danych szablonu z `static: true`. Nie dodawaj jego ID do `block_order`.

```json
{
  "title": "Home",
  "sections": {
    "hero": {
      "type": "hero",
      "blocks": {
        "signature": { "type": "_signature", "static": true },
        "first-card": { "type": "card", "settings": { "title": "Oferta" } }
      },
      "block_order": ["first-card"]
    }
  },
  "order": ["hero"]
}
```

API również sprawdza targeting, typy ustawień, limity i identyfikatory statyczne. Ukrycie kontrolki w panelu nie jest jedynym zabezpieczeniem.

## Definicja a instancja

`blocks/card.html` to jedna definicja. `first` i `second` w danych strony to niezależne instancje z własnymi ustawieniami. Korzystaj z `block.settings`, nie ze stałego ID konkretnej karty. Wstawienie typu do `blocks` rodzica dopuszcza jego dodawanie, ale samo nie tworzy instancji.

Kolejność wyznacza `block_order`, nie kolejność kluczy obiektu JSON. Prywatna nazwa `_signature` nie czyni bloku statycznym — decyduje osadzenie przez tag z konkretnym ID. Targeting dynamiczny dotyczy elementów renderowanych przez `gs-slot="blocks"`.

## Sprawdzenie zachowania

Dodaj dwie karty z różnymi tytułami. Zamień ich kolejność, zapisz i odśwież. Usuń jedną i sprawdź, czy druga zachowała ustawienia. Zmień podpis statyczny i sprawdź brak opcji usunięcia. Zweryfikuj pusty tytuł, promień 0 oraz wyłączony checkbox. Przy zagnieżdżeniu nie buduj ścieżek pól ręcznie.
