
⚙️ Grav: ofte brukte innstillinger og kodebiter (Markdown, Twig, Atom editor)
Når du har jobbet med Grav CMS i flere år, samler du opp et sett med snutter som følger deg fra prosjekt til prosjekt. YAML frontmatter, Twig-maler, syntaksuthevingskonfigurasjoner, Atom-regex-mønstre: å grave i dokumentasjon eller et gammelt repository hver gang er bortkastet tid. Særlig når Grav kjører på en VPS og du må huske hvordan du installerer sqlite-driveren for PHP 8.3 på riktig måte, eller kommenterer ut SetHandler etter en Apache-oppdatering.
Dette juksearket er en destillasjon fra praksis i den virkelige verden: standard topptekst, Markdown-innstillinger for sider, Twig-snutter i post body, Atom-regex for etterbehandling av.md-eksporter og Ubuntu-serverkommandoer. Alt på ett sted, med forklaringer på hva og hvorfor.
💡 Rask oversikt:
- Konfigurer Grav YAML frontmatter med alle felt: taxonomy, page-toc, highlight, process, egendefinert page-addon
- Sett opp Markdown-logikk i sidetopper: title, description, date, taxonomies, template
- Legg til Twig-kode i body: automatisk innholdsfortegnelse via
toc(), Unitegallery-galleri - Bearbeid Writage.md-eksporter i Atom: erstatt media/ i stier, send med klasser for lazy load
- Sett opp servermiljø: SQLite, Memcached, PHP 8.3 på Ubuntu 24.04, redigering av php*.conf for Virtualmin
Grav standardtopptekst for alle sider på nettstedet
Den grunnleggende Grav side YAML frontmatter inneholder felt som CMS-et leser under rendring. Nedenfor finner du en fungerende mal som dekker de fleste typiske oppgaver: fra taksnomier til egendefinerte page-addon-flagg.
1 title: '' 2 date: '2026-06-14 10:00' 3 published: true 4 media_order: poster.jpg 5 metadata: 6 description: '' 7 taxonomy: 8 category: 9 - WordPress 10 tag: 11 - WordPress - Plugins 12 - WordPress - Admin 13 page-toc: 14 active: true 15 template: blog_item 16 highlight: 17 enabled: true 18 lines: true 19 page-addon: 20 ifarmelazy: true
page-toc.active: true aktiverer Page Toc-utvidelsen (GitHub), som bygger en innholdsfortegnelse fra H1-H6 direkte på siden. template: blog_item setter eksplisitt malen for bloggundersider, slik at Grav ikke bestemmer den heuristisk ved hver rendring.
page-addon-blokken er en egendefinert seksjon for brukerdefinerte flagg. Her aktiverer ifarmelazy: true lazy loading for iframes: i filen user/themes/g5_helium/custom/templates/partials/blog_item.html.twig utløses en betingelse som laster inn iframe.ly-skriptet.
1 {% if attribute(page.header, 'page-addon').ifarmelazy %} 2 <script async charset="utf-8" src="//cdn.iframe.ly/embed.js"></script> 3 {% endif %} 4
For å sette inn selve iframen (for eksempel en YouTube-video), bruk denne strukturen:
1 <iframe allowfullscreen 2 data-iframely-url="https://www.youtube.com/embed/54WI1XSilb4" 3 scrolling="no" 4 style="border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;"> 5 </iframe>
Markdown-innstillinger for topptekster på innleggssider
Denne delen dekker felt som angis i toppteksten på hvert enkelt innlegg.
Tittel og beskrivelse
1 title: 'Grav + Gantry 5 — an overview of useful extensions and resources' 2 metadata: 3 description: 'A collection of Grav extensions for Gantry 5 that speed up work with content and templates.'
Beskrivelsen havner i <meta name="description"> og er viktig for utdrag i søkeresultater.
Opprettelsesdato og Auto Date
1 date: '2026-06-14 10:00'
For å få datoen automatisk satt når du oppretter en side, installer Auto Date-utvidelsen, github.com/getgrav/grav-plugin-auto-date. Den setter inn gjeldende dato og klokkeslett dersom date-feltet ikke fylles ut manuelt.
Taksnomier
For én enkelt kategori og én enkelt tag, flat syntaks:
1 taxonomy: 2 category: WEB 3 tag: Markdown
For flere verdier, bruk listeformat:
1 taxonomy: 2 category: 3 - Grav 4 tag: 5 - Grav - Gantry 5 6 - Grav - Plugins
Page Toc og mal
Page Toc genererer en innholdsfortegnelse fra overskrifter i sideinnholdet. I tillegg til flagget page-toc.active: true i toppteksten, kan du legge til Twig-kode direkte i temamalen (se Twig-avsnittet nedenfor).
template: blog_item angis manuelt slik at Grav pålitelig bruker malen for blogginnlegg, ettersom CMS-et noen ganger feiler med automatisk gjenkjenning for nye sider.
Markdown- og Twig-forprosessorer
1 process: 2 markdown: true 3 twig: true 4 twig_first: true
twig_first: true betyr at Grav først vil prosessere Twig-malmotoren, deretter Markdown. Rekkefølgen er kritisk hvis sideinnholdet inneholder Twig-logikk som genererer Markdown-markering.
Syntaksutheving (Highlight)
Avhenger av Highlight-utvidelsen, github.com/getgrav/grav-plugin-highlight.
1 highlight: 2 enabled: true 3 lines: true
lines: true legger til linjenummerering i uthevede kodeblokker.
Twig-innstillinger for sideinnhold
Automatisk innholdsfortegnelse via toc()
Page Toc kan fungere ikke bare fra toppteksten, men også gjennom direkte innsetting i temamalen. I filen user/themes/g5_helium/custom/templates/partials/blog_item.html.twig, legg til:
1 {# PAGE TOC START #} 2 {# 3 page-toc: 4 active: true 5 #} 6 {% if attribute(page.header, 'page-toc').active %} 7 {% set table_of_contents = toc(page.content) %} 8 {% if table_of_contents is not empty %} 9 Table of contents: 10 {{ table_of_contents|raw }} 11 {% endif %} 12 13 {% endif %} 14 {# PAGE TOC END #} 15
Twig-funksjonen toc(page.content) analyserer overskrifter i page.content og returnerer et strukturert tre. Betingelsen sjekker flagget page-toc.active fra toppteksten, slik at du kan aktivere og deaktivere innholdsfortegnelsen for enkeltsider uten å røre malen.
Bildegalleri via Unitegallery
Unitegallery-utvidelsen, github.com/variar/grav-plugin-unitegallery, legger til et galleri i Grav basert på Unitegallery JS-biblioteket med flere visningstemaer.
Etter installasjon via administrasjonspanelet eller GPM (Grav Package Manager), legges en enkelt linje til i sideinnholdet:
1 {{ unite_gallery(page.media.images) | raw }} 2
Den gjengir alle bilder som er lastet opp til sidens mediesamling som et galleri.
Atom søk og erstatt for Writage.md-eksporter
Når du eksporterer WordPress-innlegg til Markdown via Writage, inneholder bildestier prefikset media/, og aktivering av lazy loading krever klassene figure-img og img-fluid. Å redigere hver URL manuelt er meningsløst; Atom med regulære uttrykk gjør det på et sekund.
Lazy Image-utvidelsen håndterer lazy loading, github.com/unsaturated/grav-plugin-lazy-image.
Finn (regulært uttrykk):
1 (![.*]()(media/)(.*)())
Erstatt med lightbox-variant (FeatherLight-plugin):
1 $1$3)
Erstatt med kun lazy loading:
1 $1$3?classes=figure-img,img-fluid)
Etter erstatning får bildet en classes-spørringsparameter som Lazy Image fanger opp.
Arbeid med miniatyrbilder
Grav kan manipulere bilder dynamisk: endre størrelse, beskjære, mellomlagre. Et sideminiatyrbilde settes via Markdown-syntaks med spørringsparametere:
1 
Mer om medieegenskapene i den offisielle dokumentasjonen: learn.getgrav.org/content/media.
Ubuntu 24.04-serveroppsett for Grav
Grav på en VPS krever PHP, SQLite (for intern plugin-database), og fortrinnsvis Memcached (side-mellomlagring). Nedenfor følger aktuelle kommandoer for Ubuntu 24.04 LTS og PHP 8.3.
Installere PDO SQLite på PHP 8.3
1 sudo apt-get update 2 sudo apt-get install php8.3-sqlite 3 sudo systemctl restart apache2
SQLite brukes av Grav til å lagre logger, plugin-mellomlager og intern bokføring. Uten driveren vil adminpanelet krasje med en databasetilkoblingsfeil.
Installere Memcached
Aktuell veiledning: tecadmin.net/install-memcached-with-php-on-ubuntu/.
1 sudo apt-get update 2 sudo apt-get install memcached 3 4 sudo add-apt-repository ppa:ondrej/php 5 sudo apt-get update 6 sudo apt-get install -y php php-dev php-pear libapache2-mod-php 7 8 sudo apt-get install -y php-memcached 9 10 sudo systemctl restart apache2
PHP-filer kjøres ikke etter versjonsbytte (Virtualmin/Webmin)
Etter å ha byttet fra PHP 7.x til 8.3 kan Apache levere .php-filer som tekst i stedet for å kjøre dem, en kjent oppførsel ved modulbytte. Problemet er SetHandler-direktiver i PHP-modulens konfigurasjon.
1 sudo nano /etc/apache2/mods-enabled/php8.3.conf
Kommenter ut disse linjene:
1 # SetHandler application/x-httpd-php 2 # SetHandler application/x-httpd-php-source
Endelig php8.3.conf etter redigering:
1 <filesmatch ".+\.ph(ar|p|tml)$"> 2 # SetHandler application/x-httpd-php 3 </filesmatch> 4 <filesmatch ".+\.phps$"> 5 # SetHandler application/x-httpd-php-source 6 # Deny access to raw php sources by default 7 # To re-enable it's recommended to enable access to the files 8 # only in specific virtual host or directory 9 Require all denied 10 </filesmatch> 11 12 # Deny access to files without filename (e.g. '.php') 13 <filesmatch "^\.ph(ar|p|ps|tml)$"> 14 Require all denied 15 </filesmatch> 16 17 # Running PHP scripts in user directories is disabled by default 18 # 19 # To re-enable PHP in user directories comment the following lines 20 # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it 21 # prevents .htaccess files from disabling it. 22 <ifmodule mod_userdir.c=""> 23 <directory /home/*/public_html> 24 php_admin_flag engine Off 25 </directory> 26 </ifmodule>
Etter redigering, start Apache på nytt:
1 sudo systemctl restart apache2
Video: hva er Grav CMS og hvor bør du starte
En kort introduksjon til Grav for deg som hører om flatfil-CMS for første gang: hva som ligger under panseret, hvordan innhold er strukturert, og hvorfor det å kjøre uten database kan være raskere.
⁉️🤔 Ofte stilte spørsmål
Trenger Grav en database?
Nei, Grav er et flatfil-CMS. Alt innhold, innstillinger, taksonomier og metadata lagres i tekstfiler (Markdown og YAML). SQLite brukes valgfritt for interne behov: plugin-cache, logger, køer. PostgreSQL og MySQL er ikke offisielt påkrevd. I praksis betyr dette at sikkerhetskopiering av et nettsted er så enkelt som å kopiere
/user-mappen.
Er Page Toc-pluginen obligatorisk for innholdsfortegnelse?
Den kan erstattes med direkte Twig-kode ved å bruke
toc(page.content)i temamalen. Men pluginen er mer praktisk for rask aktivering/deaktivering via et flagg i YAML-frontmatter på en bestemt side. Hvis nettstedet ditt har 50+ sider, er administrasjon via header mer praktisk enn forgrening i malen.
Hvordan skiller Highlight seg fra Prism.js eller Highlight.js?
Highlight er den offisielle Grav-pluginen som integrerer highlight.js direkte i renderingspipelinen. Den forstår
enabled- oglines-flagg fra YAML-headeren og krever ikke manuell inkludering av JS/CSS; GPM håndterer alt. Prism.js må inkluderes manuelt i temaet.
Er Grav fortsatt relevant i 2026 sammenlignet med WordPress?
For visse scenarioer, ja. Grav vinner for statiske visittkortsider, porteføljer, dokumentasjon og landingssider der kompleks brukerlogikk og e-handel ikke er nødvendig. Flatfil-arkitektur gir umiddelbar respons uten database, og innholdsversjonskontroll fungerer via Git. Men for en blogg med tusenvis av innlegg, et mediebibliotek og dynamiske arkiver, er WordPress mer praktisk på grunn av sitt plugin-økosystem.
Hva bør jeg gjøre hvis Grav-administrasjonspanelet slutter å fungere etter en PHP-oppdatering?
Tre typiske årsaker: (1)
php8.x-sqliteer ikke installert, og Grav krasjer stille uten databasedriveren; (2)SetHandlerer ikke kommentert ut iphp8.x.confnår du bruker Virtualmin, og Apache serverer.phpsom tekst; (3) tillatelser påcache/-,logs/- ogbackup/-mappene inne i/userhar blitt tilbakestilt, så kjørchown -R www-data:www-data user/.
Ferdig jukseark: hva du skal kopiere inn i prosjektet ditt
Seks filer og pluginer som starter et typisk Grav-prosjekt på VPS: header med taksonomier og page-toc, Twig-innholdsfortegnelse i malen, Markdown-forprosessor, Highlight, Unitegallery og Atom-regex for etterbehandling av eksport. Legg til serveroppsettet fra Ubuntu 24.04-delen, så har du et fullt klart miljø på en halvtime. Bokmerk denne siden; vi oppdaterer kodebitene for gjeldende Grav- og PHP-versjoner.



