Themes

🔧 1. Struktura motywu

Motyw to po prostu katalog w: /user/themes/moj-theme/

Minimalna struktura:

moj-theme/
├── templates/
│   ├── default.html.twig
│   └── partials/
├── css/
├── js/
├── moj-theme.yaml
└── blueprints.yaml

📄 2. Plik konfiguracyjny motywu

'my-theme.yaml`

enabled: true

⚙️ 3. Blueprint (opcjonalny, ale warto)

blueprints.yaml

Dzięki temu motyw pojawi się w panelu admina:

name: Moj Theme
version: 1.0.0
description: Mój własny motyw Grav
icon: rebel

🧠 4. Najważniejsze – Twig (template)

templates/default.html.twig

To jest Twój główny layout:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>{{ page.title }}</title>
</head>
<body>

<h1>{{ page.title }}</h1>

<div>
    {{ page.content|raw }}
</div>

</body>
</html>

To już działa jako prosty motyw.


🧩 5. Partiale (czyli Twoje komentarze 😉)

Skoro już bawiłeś się w:

{{ include('partials/comments_form.html.twig') }}

to robisz:

templates/partials/comments_form.html.twig

I masz pełną kontrolę.


🎯 6. Włączenie motywu

W pliku: /user/config/system.yaml ustaw:

pages:
  theme: moj-theme

🚀 7. Najprostszy sposób (polecam)

Nie zaczynaj od zera — skopiuj gotowy motyw, np.:

  • Antimatter (domyślny)
  • Quark (nowszy)

i przerób:

/user/themes/quark → /user/themes/moj-theme

Usuń zbędne rzeczy i upraszczaj.

To jest najlepsza metoda nauki Grav.


🧠 Kilka ważnych rzeczy (praktyka)

🔹 Layout dziedziczenia (ważne!)

Grav używa Twig inheritance:

{% extends 'partials/base.html.twig' %}

Czyli:

  • base.html.twig → główny layout
  • inne template'y → rozszerzają go

🔹 Debugowanie Włącz w system.yaml:

debugger:
  enabled: true

I używaj:

{{ dump(page) }}

🔹 Nazwy template’ów Plik: blog.html.twig → używany przez stronę:

template: blog

💡 Pro tip (ważny przy Twoim przypadku)

Skoro masz problemy z:

  • formularzami
  • komentarzami
  • include vs funkcje

to własny motyw daje Ci:
✔ pełną kontrolę nad HTML
✔ brak „magii” pluginów
✔ łatwiejsze debugowanie


❗ Czy to trudne?

Nie.

Największe trudności to:

  • struktura Grav (pages vs templates)
  • Twig (ale to już ogarniasz)
  • zależności pluginów