[Intum Pomoc](https://intum.pl/pomoc.md) / [CMS](https://intum.pl/pomoc/cms.md)

# [Edycja wprost na stronie](https://intum.pl/pomoc/cms/cms-edycja-na-stronie.md)

Treść witryny nie musi być poprawiana w panelu. Wystarczy otworzyć stronę tak, jak widzi ją
odwiedzający, włączyć tryb edycji i klikać w to, co ma się zmienić: w blok treści (paragraf) albo
w pojedyncze pole strony, np. nagłówek czy podpis. Efekt widać od razu, w miejscu, w którym się
pojawi.

> [!PATH]
> [CMS → Strony](app:/cms/pages)

Przy każdej stronie na liście jest przycisk podglądu.

## 1. Włącz tryb edycji

Otwórz stronę z podglądu witryny. Na górze, nad treścią, widać pasek administratora - kliknij w nim
**Edycja strony**. Strona przeładuje się w trybie edycji: paragrafy dostają pasek ikon, a pola
strony cienką przerywaną ramkę. Ten sam przycisk, teraz podpisany **Zakończ edycję strony**,
wraca do zwykłego widoku.

Tryb edycji widzi tylko zalogowany użytkownik z uprawnieniami do CMS. Odwiedzający witrynę
dostaje zwykłą stronę, bez ramek i przycisków.

## 2. Popraw albo dodaj paragraf {#popraw-dodaj-paragraf}

Najedź na blok treści i użyj ikon w jego rogu:

- **ołówek** otwiera okno edycji. Dla zwykłego tekstu ma zakładki **Treść** (tytuł, zdjęcie,
  edytor treści) i **Szablon** (sposób prezentacji bloku: Standardowy, Karty, Kompaktowy, Ramka,
  Wyróżnienie, Baner; przycisk **Dostosuj** daje własny układ bloku),
- **kosz** usuwa paragraf po potwierdzeniu,
- **uchwyt** pozwala przeciągnąć blok w inne miejsce w obrębie tego samego boxa. Kolejność
  zapisuje się od razu po puszczeniu.

Na końcu każdego boxa jest przycisk **Dodaj treść** - zakłada nowy paragraf w tym miejscu. W pierwszym
kroku wybierasz rodzaj bloku (**tekst** albo **artykuły**), w drugim wpisujesz treść. Blok powstaje
dopiero po kliknięciu **Zapisz**.

## 3. Dodaj miejsce na paragrafy (box) {#dodaj-miejsce-na-paragrafy}

Przycisk **Dodaj treść** pojawia się tylko tam, gdzie w szablonie albo w treści strony jest box -
miejsce zarezerwowane na paragrafy. Jeśli strona nie ma żadnego, dodaj go raz: w treści strony
(z paska administratora **Ustawienia strony**, potem edycja i sekcja **Zawartość** - nad edytorem
jest przycisk **box**, który wkleja gotowy kod) albo w szablonie, jeśli box ma być na każdej stronie.
Sam kod to jedna linia:

```
<cms type="box" id="oferta"></cms>
```

Trzy warianty, zależnie od tego, co ma się w boxie dziać:

```
<cms type="box" id="oferta"></cms>
    box tej strony - każda strona ma w tym miejscu własne paragrafy

<cms type="box" id="stopka" scope="site"></cms>
    box wspólny - te same paragrafy na każdej stronie witryny (stopka, baner)

<cms type="box" id="baner" max="1"></cms>
    najwyżej jeden paragraf; pełny box nie pokazuje już przycisku „Dodaj treść"
```

`id` to nazwa boxa - dowolne słowo bez spacji i polskich znaków. Paragraf pamięta, w którym boxie
stoi (pole **Box** w formatce paragrafu), więc zmiana nazwy boxa w kodzie „gubi" jego paragrafy do
czasu, aż dostaną nową nazwę. Pusty box nie zostawia na stronie śladu: w zwykłym widoku nie ma go
wcale, w trybie edycji jest w tym miejscu sam przycisk **Dodaj treść**.

Po zapisie wróć na podgląd i włącz tryb edycji - box jest gotowy do wypełnienia.

## 4. Popraw pole strony

Pole strony to wartość z sekcji **Pola dodatkowe** w formatce strony, wstawiona do treści lub
szablonu w nawiasach klamrowych, np. `{{ opis1 }}`. Tak prowadzi się drobne, powtarzalne elementy:
hasło w nagłówku, numer telefonu, podpis pod zdjęciem.

Nie musisz wymyślać nazwy pola ani zakładać go w polach dodatkowych. Wystarczy wpisać w klamrach
tekst, który ma się pokazać - opisuje to niżej część „Tekst w klamrach staje się polem".

W trybie edycji każde takie miejsce ma przerywaną ramkę, a po najechaniu pokazuje nazwę pola.
Kliknij w nie:

- otworzy się okno **Edytuj pole** z nazwą pola i jego bieżącą wartością,
- wartość wpisujesz jako zwykły tekst. Jeśli pole ma zawierać formatowanie albo link, zaznacz
  **Edytor HTML** - pole tekstowe zamieni się w edytor z paskiem narzędzi,
- kliknij **Zapisz**. Strona przeładuje się z nową wartością.

Pole, którego strona jeszcze nie ma, też widać w trybie edycji: jako szarą nazwę w klamrach.
Kliknięcie i wpisanie wartości zakłada je od razu, bez wchodzenia do formatki strony. Działa to
też w drugą stronę: wyczyszczenie wartości i zapis usuwa pole ze strony.

Zmiana dotyczy zawsze tej strony, na której klikasz. Jeśli strona dziedziczy pole ze strony
nadrzędnej, po zapisie dostaje własną wartość, a wzorzec zostaje bez zmian.

**Pole szablonu** (`{{ layout.klucz }}` - napis z szablonu witryny, ten sam na wszystkich
stronach) klika się dokładnie tak samo. Okno edycji pokazuje wtedy nazwę z przedrostkiem
`layout.` i uprzedza, że wartość jest wspólna: po zapisie zmiana widoczna jest na każdej stronie
korzystającej z tego szablonu. To samo pole można też poprawić w formatce szablonu, w sekcji
**Pola dodatkowe**.

## Tekst w klamrach staje się polem {#tekst-w-klamrach}

Najprostszy sposób na nowe pole: w treści strony wpisz w podwójnych klamrach tekst, który ma się
pokazać. Może to być krótkie hasło albo całe zdanie, także w kilku wierszach:

```
<h2>{{ Nasz zespół }}</h2>
<p>{{ Łączymy kompetencje z zakresu programowania, designu i marketingu,
aby dostarczać kompleksowe rozwiązania dla naszych klientów. }}</p>
```

Po zapisie strony tekst zostaje na swoim miejscu, ale jest już polem. Nazwa powstaje z pierwszych
słów tekstu (małe litery, bez polskich znaków, słowa połączone podkreśleniem), a w treści zostaje
tylko ona:

```
<h2>{{ nasz_zespol }}</h2>
<p>{{ laczymy_kompetencje_z_zakresu }}</p>
```

Sam tekst trafia do sekcji **Pola dodatkowe** w formatce strony jako wartość pola:

```
{
  "nasz_zespol": "Nasz zespół",
  "laczymy_kompetencje_z_zakresu": "Łączymy kompetencje z zakresu programowania, designu i marketingu,\naby dostarczać kompleksowe rozwiązania dla naszych klientów."
}
```

Od tej chwili w trybie edycji klikasz w ten tekst jak w każde inne pole. Zasady:

- jeśli pole o takiej nazwie już ma wartość, zostaje ona bez zmian - tekst z klamr jej nie nadpisze,
- ten sam tekst wpisany w dwóch miejscach daje jedno pole, pokazane dwa razy,
- nazwa zaczyna się zawsze literą, więc `{{ 2 lata gwarancji }}` daje pole `lata_gwarancji`,
  a krótkie słówko na końcu (spójnik) jest pomijane: `{{ Zespół specjalistów z doświadczeniem }}`
  daje `zespol_specjalistow`,
- tekst w cudzysłowie (`{{ "Witaj" }}`) i nazwy z kropką (`{{ page.owner }}`) to wyrażenia
  szablonu - zostają bez zmian.

W szablonie działa to tak samo, z jedną różnicą: tekst jest wspólny dla wszystkich stron witryny,
więc pole dostaje przedrostek `layout.` (klikasz je na stronie jak każde inne, ale zmiana wchodzi
wszędzie tam, gdzie używany jest ten szablon):

```
<footer>{{ Wszelkie prawa zastrzeżone }}</footer>
```

po zapisie szablonu:

```
<footer>{{ layout.wszelkie_prawa_zastrzezone }}</footer>
```

## Paragraf czy pole?

Oba sposoby dają treść, którą poprawia się klikaniem na stronie, ale służą do czego innego.
Paragraf to **blok** - sekcja, którą redaktor dokłada i przestawia. Pole to **napis** w stałym
miejscu układu.

| | Paragraf w boxie | Pole |
|---|---|---|
| **Co wstawiasz w szablonie lub treści** | `<cms type="box" id="oferta"></cms>` - raz, na wszystkie przyszłe bloki | `{{ Tekst, który ma się pokazać }}` - osobno w każdym miejscu |
| **Do czego pasuje** | sekcje strony: tytuł, zdjęcie i kilka akapitów; oferta, zespół, lista artykułów | pojedynczy napis: hasło, numer telefonu, podpis, nagłówek, słowo w środku zdania |
| **Dodawanie nowych** | na stronie, przyciskiem **Dodaj treść** - bez dotykania kodu | tylko przez dopisanie kolejnych klamr w treści lub szablonie |
| **Kolejność i usuwanie** | przeciąganie i kosz w trybie edycji | miejsce jest stałe; wyczyszczenie wartości usuwa pole |
| **Wygląd** | własny szablon prezentacji (Standardowy, Karty, Kompaktowy, Ramka, Wyróżnienie, Baner) i **Dostosuj** | taki, jak miejsce w szablonie; wartość to tekst albo HTML |
| **Zdjęcie** | tak, w zakładce **Treść** | nie |
| **To samo w kilku miejscach** | nie - każdy paragraf to osobny blok | tak - jedno pole można wstawić wiele razy |
| **Wspólne dla całej witryny** | box ze `scope="site"` | pole w szablonie (`{{ layout.klucz }}`), klikalne na stronie - zmiana wchodzi na wszystkich |
| **Wersje językowe** | paragraf należy do strony - przy osobnej stronie na język każda ma własne | jedno pole, osobna wartość na każdy język |
| **Widać w panelu** | na liście [Paragrafy](app:/cms/paragraphs), poza treścią strony | w treści strony i w jej **Polach dodatkowych** |

Zalety i wady w skrócie:

- **Paragraf** - zaletą jest swoboda redaktora: sam dokłada, przestawia i usuwa bloki, każdy ma
  zdjęcie i własną prezentację, a ten sam mechanizm daje listę artykułów. Wadą jest to, że box
  trzeba raz przewidzieć w kodzie, paragrafów nie widać w edytorze treści strony (żyją obok, na
  liście paragrafów) i nie da się nimi wstawić tekstu w środek zdania czy nagłówka.
- **Pole** - zaletą jest zero konfiguracji: wpisujesz tekst w klamrach dokładnie tam, gdzie ma
  być, także w nagłówku albo w zdaniu; jedno pole działa w wielu miejscach, ma wartość na każdy
  język i dziedziczy się ze strony nadrzędnej. Wadą jest stała liczba i stałe miejsca pól, brak
  zdjęcia i prezentacji (tylko tekst lub HTML) oraz to, że pola szablonu zmienia się w jego
  formatce, nie na stronie.

Prosta reguła: **sekcje strony to paragrafy, napisy w układzie to pola**. Typowa strona ma dwa,
trzy boxy w treści i kilka pól w nagłówku oraz stopce szablonu.

## Witryna wielojęzyczna {#witryna-wielojezyczna}

Na witrynie z włączoną wielojęzycznością okno edycji pola ma u góry zakładkę na każdy język
witryny: **PL (domyślny)**, **EN**, ... Otwiera się na języku, który właśnie oglądasz, ale
możesz od razu przełączyć zakładkę i wpisać pozostałe wersje - wszystkie zapisują się jednym
kliknięciem **Zapisz**. Zakładka oznaczona „domyślny" to wartość podstawowa; puste pole
w innej zakładce oznacza brak tłumaczenia i strona pokaże w tym języku wartość podstawową.

Na dole paska administratora jest też przełącznik języka (**Język: PL | EN**) - przełącza
oglądaną wersję strony bez wychodzenia z trybu edycji. Więcej:
[Witryna w kilku językach](cms/cms-witryna-w-kilku-jezykach).

## Poproś agenta AI o zmianę {#agent-ai}

W oknie edycji - zarówno paragrafu, jak i pola - jest po prawej stronie przycisk **✦ AI**.
Otwiera gotowy prompt, który wie, co właśnie edytujesz: nazwę i numer paragrafu albo klucz
pola, język wersji, stronę i witrynę. Zaznaczone przykładowe polecenia nadpisz swoim
(np. „skróć ten tekst do trzech zdań i dopisz zaproszenie do kontaktu"), kliknij
**Kopiuj do schowka** i wklej agentowi (Claude Code, OpenAI Codex, Copilot CLI, Gemini CLI,
OpenCode). Agent dostaje razem z promptem dostęp do API witryny, więc zmianę wprowadzi sam -
potem odśwież stronę, żeby zobaczyć efekt.

## Czego nie da się kliknąć

Ramkę dostają tylko pola wstawione w widocznej treści strony i szablonu. Wartość użyta w adresie
linku, w tytule HTML albo w innym ustawieniu strony nie ma ramki - poprawia się ją w formatce
strony, do której z paska administratora prowadzi **Ustawienia strony**.