Themes Menu

🧭 1. Najpierw: skąd Grav bierze menu?

Menu nie tworzy się w Twig na sztywno — tylko z:
👉 struktury katalogu /user/pages/
👉 + opcjonalnie menu: w nagłówkach stron


📁 2. Struktura stron (to jest klucz)

Masz coś takiego:

/user/pages/
├── 01.home/
│   └── default.md
├── 02.blog/
│   └── blog.md
├── 03.about/
│   └── default.md

👉 numer = kolejność w menu
👉 katalog = strona


✏️ 3. Nagłówki stron (opcjonalnie)

W pliku np.: /user/pages/02.blog/blog.md dodaj:

title: Blog
menu: Blog
visible: true
  • menu: → nazwa w menu
  • visible: true → pokazuje w menu

🧩 4. Kod menu w Twig (najważniejsze)

W swoim motywie (np. base.html.twig albo default.html.twig) dodaj:

<nav>
  <ul>
    {% for page in pages.children.visible %}
      <li>
        <a href="{{ page.url }}">{{ page.menu }}</a>
      </li>
    {% endfor %}
  </ul>
</nav>

I to już działa 🎯


📌 5. Jeśli jesteś na stronie HOME

To ważne:

👉 pages.children = strony na poziomie głównym czyli dokładnie to, czego chcesz


🎯 6. Aktywna strona (highlight)

Dodaj klasę:

<li class="{% if page.active %}active{% endif %}">

czyli:

<nav>
  <ul>
    {% for p in pages.children.visible %}
      <li class="{% if p.active %}active{% endif %}">
        <a href="{{ p.url }}">{{ p.menu }}</a>
      </li>
    {% endfor %}
  </ul>
</nav>

🔥 7. Najczęstszy problem (pewnie u Ciebie też)

👉 menu się nie pokazuje?
Sprawdź:
✔ czy strony mają:

visible: true

✔ czy NIE masz:

visible: false

✔ czy foldery mają numerki:

01.home
02.blog

💡 Bonus: dropdown (podstrony)

Jeśli chcesz menu z podstronami:

{% for p in pages.children.visible %}
  <li>
    <a href="{{ p.url }}">{{ p.menu }}</a>

    {% if p.children.visible|length > 0 %}
      <ul>
        {% for child in p.children.visible %}
          <li>
            <a href="{{ child.url }}">{{ child.menu }}</a>
          </li>
        {% endfor %}
      </ul>
    {% endif %}

  </li>
{% endfor %}

🚀 Podsumowanie

Najważniejsze 3 rzeczy:

✔ struktura katalogów = menu
✔ visible: true
✔ pętla Twig pages.children.visible