[Sugester V2](https://pomoc.sugester2.pl.md) / [CMS](https://pomoc.sugester2.pl/cms-1.md)

# [Reużywalny sidebar - wzorzec](https://pomoc.sugester2.pl/reuzywalny-sidebar-wzorzec-FJHirb5v.md)

<p>Gdy masz wiele podstron z tym samym sideberem (np. lista funkcji produktu), zamiast kopiować HTML do każdej strony, możesz użyć reużywalnego paragrafu.</p>

<h2>Jak to działa</h2>

<p>Schemat:</p>
<div style="position: relative;"><pre class="language-text" tabindex="0"><code class="language-text">Layout                          Page
┌─────────────────────┐         ┌─────────────────────┐
│ {% if has_sidebar %}│         │ fields.has_sidebar  │
│   &lt;flex&gt;            │◄────────│ paragraph_codes     │
│     {{ paragraphs }}│         │ content (główna)    │
│     {{ content }}   │         └─────────────────────┘
│   &lt;/flex&gt;           │                    │
│ {% endif %}         │                    ▼
└─────────────────────┘         Paragraph
                                ┌─────────────────────┐
                                │ code: my-sidebar    │
                                │ &lt;aside&gt;...&lt;/aside&gt;  │
                                └─────────────────────┘</code></pre></div>

<h2>Krok 1: Utwórz paragraf z sideberem</h2>

<p>W CMS utwórz paragraf z unikalnym kodem:</p>
<ul>
  <li><strong>name:</strong> "Sidebar PL" (nazwa wewnętrzna)</li>
  <li><strong>code:</strong> "my-sidebar-pl" (do przypisywania przez API)</li>
  <li><strong>kind:</strong> text</li>
  <li><strong>content:</strong> HTML sidebara</li>
</ul>

<h2>Krok 2: Zmodyfikuj layout</h2>

<p>Dodaj warunek do layoutu:</p>
<div style="position: relative;"><pre class="language-text" tabindex="0"><code class="language-text">{% if has_sidebar %}
&lt;section class="py-12 px-4"&gt;


      {% for p in paragraphs %}{{ p }}{% endfor %}
      &lt;main class="min-w-0 flex-1"&gt;{{ content }}&lt;/main&gt;


&lt;/section&gt;
{% else %}
&lt;main&gt;
  {% for p in paragraphs %}{{ p }}{% endfor %}
  {{ content }}
&lt;/main&gt;
{% endif %}</code></pre></div>

<p><strong>Kluczowe elementy Liquid:</strong></p>
<ul>
  <li><code>{{ content }}</code> - treść strony (page.content)</li>
  <li><code>{% for p in paragraphs %}{{ p }}{% endfor %}</code> - przypisane paragrafy</li>
  <li><code>{% if has_sidebar %}</code> - warunek z page.fields.has_sidebar</li>
</ul>

<h2>Krok 3a: Przypisanie przez GUI (ręcznie)</h2>

<p>Dla każdej strony w panelu CMS:</p>
<ol>
  <li>Wejdź do <strong>CMS → Strony</strong> i wybierz stronę do edycji</li>
  <li>W sekcji <strong>Pola własne (fields)</strong> zaznacz checkbox <code>has_sidebar</code> lub dodaj pole: <code>has_sidebar = true</code></li>
  <li>W polu <strong>Kody paragrafów (paragraph_codes)</strong> wpisz kod sidebara, np. <code>my-sidebar-pl</code></li>
  <li>Zapisz stronę</li>
</ol>

<p><strong>Uwaga:</strong> Upewnij się że paragraf z kodem <code>my-sidebar-pl</code> już istnieje.</p>

<h2>Krok 3b: Przypisanie przez API</h2>

<p>Dla każdej strony ustaw:</p>
<div style="position: relative;"><pre class="language-css" tabindex="0"><code class="language-css">PUT /cms/pages/{id}.json?api_token=TWOJ_TOKEN
{
  "page": {
    "fields": {"has_sidebar": true},
    "paragraph_codes": ["my-sidebar-pl"]
  }
}</code></pre></div>

<h2>Bulk update (skrypt bash)</h2>

<p>Gdy masz wiele stron do zaktualizowania jednocześnie:</p>
<div style="position: relative;"><pre class="language-css" tabindex="0"><code class="language-css">#!/bin/bash
API_TOKEN="twoj_token"
BASE_URL="https://mojafirma.sugester2.pl"
SIDEBAR_CODE="my-sidebar-pl"

# Lista ID stron do aktualizacji
PAGE_IDS=(101 102 103 104)

for PAGE_ID in "${PAGE_IDS[@]}"; do
  echo "Updating page $PAGE_ID..."
  curl -s -X PUT "$BASE_URL/cms/pages/$PAGE_ID.json?api_token=$API_TOKEN" \
    -H "Content-Type: application/json" \
    -d "{\"page\": {\"paragraph_codes\": [\"$SIDEBAR_CODE\"]}}"
  echo ""
done

echo "Done!"</code></pre></div>

<h2>Przykład: MojaFirma</h2>

<p>Przykładowa implementacja dla strony z dokumentacją funkcji:</p>

<table>
  <tr><th>Zasób</th><th>Opis</th></tr>
  <tr><td>Site</td><td>Strona marketingowa firmy</td></tr>
  <tr><td>Layout</td><td>Marketing Layout z obsługą sidebara</td></tr>
  <tr><td><strong>Sidebar PL</strong></td><td>code: <code>sidebar-funkcje-pl</code></td></tr>
  <tr><td><strong>Sidebar EN</strong></td><td>code: <code>sidebar-features-en</code></td></tr>
</table>

<p><strong>Strony do przypisania:</strong></p>
<ul>
  <li>Podstrony w sekcji /funkcje/* (PL) → sidebar-funkcje-pl</li>
  <li>Podstrony w sekcji /features/* (EN) → sidebar-features-en</li>
</ul>

<h3>Przykładowy skrypt</h3>
<div style="position: relative;"><pre class="language-css" tabindex="0"><code class="language-css">#!/bin/bash
API_TOKEN="twoj_api_token"
BASE_URL="https://mojafirma.sugester2.pl"

# Strony PL
for PAGE_ID in 101 102 103 104 105; do
  curl -s -X PUT "$BASE_URL/cms/pages/$PAGE_ID.json?api_token=$API_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{"page": {"paragraph_codes": ["sidebar-funkcje-pl"]}}'
done

# Strony EN
for PAGE_ID in 201 202 203 204 205; do
  curl -s -X PUT "$BASE_URL/cms/pages/$PAGE_ID.json?api_token=$API_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{"page": {"paragraph_codes": ["sidebar-features-en"]}}'
done</code></pre></div>

<p><strong>Efekt:</strong> Zmiana sidebara w jednym paragrafie automatycznie aktualizuje wszystkie przypisane strony.</p>

<h2>Debugowanie</h2>

<p>Jeśli sidebar się nie wyświetla:</p>
<ol>
  <li><strong>Sprawdź <code>has_sidebar</code></strong> - czy strona ma <code>fields.has_sidebar: true</code>?</li>
  <li><strong>Sprawdź <code>paragraph_codes</code></strong> - czy zawiera właściwy kod paragrafu?</li>
  <li><strong>Sprawdź kod paragrafu</strong> - czy paragraf ma ustawione pole <code>code</code>?</li>
  <li><strong>Sprawdź layout</strong> - czy zawiera pętlę <code>{% for p in paragraphs %}</code>?</li>
</ol>

<p>Weryfikacja przez API:</p>
<div style="position: relative;"><pre class="language-bash" tabindex="0"><code class="language-bash"># Sprawdź stronę
curl -s "https://mojafirma.sugester2.pl/cms/pages/ID.json?api_token=TOKEN" | jq '{paragraph_codes, fields}'

# Sprawdź paragrafy z kodami
curl -s "https://mojafirma.sugester2.pl/cms/paragraphs.json?api_token=TOKEN&amp;site_id=ID" | jq '.[] | select(.code) | {id, name, code}'</code></pre></div>