# Content System Reference For LLM agents working with site content. Read when adding/modifying content or metadata. ## Folder = URL Every directory under `content/` becomes a URL path. The folder name is the default slug. ``` content/nyheter/2025-09-26-banebrytende-studie/ -> /nyheter/banebrytende-studie/ content/faq/Hva-er-MC/ -> /faq/hva-er-mc/ content/kontakt/ -> /kontakt/ ``` Date prefixes (`YYYY-MM-DD-`) are stripped from URLs and used as the item date. Numeric prefixes (`NN-`) control ordering and are stripped from URLs. ## Content Files Place these inside a content directory: | File | Purpose | |---|---| | `article.md` or `index.md` | Main content (Markdown) | | `article.en.md` | English translation | | `index.html` | HTML content alternative | | `index.php` | PHP content (has access to `$GLOBALS['ctx']`) | | `metadata.ini` | Configuration for this directory | | `cover.png/jpg/webp` | Cover image for list display | | `styles.css` | Page-specific CSS | | `script.js` | Page-specific JS | | `*.pdf` | Downloadable PDF | Multiple content files in one directory are rendered in sequence (alphabetical order). ## Page vs List Detection - Directory with **no subdirectories** (or `hide_list = true`) -> renders as **page** using `page.php` - Directory with **subdirectories** -> renders as **list** using `list.php` or `page_template` override ## metadata.ini Reference ### Core Fields ```ini title = "Page Title" # Display title summary = "Short description" # Shown in lists and meta description date = "2026-01-15" # Explicit date (overrides folder date prefix) slug = "custom-url" # Custom URL segment (overrides folder name) ``` ### Menu & Ordering ```ini menu = true # Show in main navigation menu_order = 1 # Navigation sort order (lower = first) order = 5 # Sort order within parent list ``` ### Display & Templates ```ini page_template = "list-faq" # Override list template (list-card-grid, list-faq, list-grid) show_date = false # Hide dates in list display hide_list = true # Treat directory-with-subdirs as a page instead of list ``` ### Feeds ```ini feed = true # Enable Atom feed at /{section}/feed.xml author = "Stopp lidelsen" # Feed author name ``` When `feed = true` is set: 1. `/{section}/feed.xml` serves Atom XML with full content of each item 2. `$feedUrl` is set in template context, enabling `` in `` 3. Feed includes all list items with rendered HTML content ### Plugins ```ini plugins = "petition-form" # Comma-separated page plugins to load petition_id = "my-petition" # Plugin-specific config thank_you_page = "takk" # Plugin-specific config ``` ### Language Overrides ```ini [en] title = "English Title" summary = "English description" slug = "english-url" ``` Language sections are merged into base metadata when that language is active. Any field can be overridden per language. ### Metadata Priority Language-specific `[lang]` section > root fields > auto-extracted (date from folder name) > defaults ### Categories & Tags ```ini tags = "nyhetsbrev, oppsummering" categories = "Nyhetsbrev" [en] tags = "newsletter, summary" categories = "Newsletters" ``` Displayed by `page.php` template if present. ## Current Site Sections | Section | Folder | Template | Menu | Feed | Notes | |---|---|---|---|---|---| | Home | `content/` | page | - | - | Has newsletter-signup plugin | | News | `content/nyheter/` | list | Yes (1) | Eligible | Date-prefixed articles | | Articles | `content/artikler/` | list | Yes (2) | - | Subsections with articles | | Brochures | `content/brosjyrer/` | list-card-grid | No | - | PDFs + redirects to articles | | FAQ | `content/faq/` | list-faq | Yes | - | Accordion layout | | Docs | `content/docs/` | list | No | - | Internal documentation | | Petitions | `content/underskriftskampanje/` | list | No | - | Has petition-form plugin | | Contact | `content/kontakt/` | page | Yes (10) | - | | | About | `content/om-oss/` | page | No | - | `hide_list=true` | | Privacy | `content/personvern/` | page | No | - | `hide_list=true` | ## Adding Content ### New Article in Existing Section ``` content/nyheter/YYYY-MM-DD-slug-name/ article.md # Norwegian content article.en.md # English content (optional) metadata.ini # tags, categories, [en] overrides cover.png # Optional cover image ``` ### New Section ``` content/new-section/ metadata.ini # menu=true, menu_order=N, page_template=... article.md # Intro content (shown above list) subsection-1/ article.md metadata.ini subsection-2/ ... ``` ## Language System - Default language: Norwegian (`no`) - Available: `no`, `en` (configured in `custom/config.ini`) - Norwegian URLs: `/nyheter/`, `/faq/`, etc. - English URLs: `/en/news/`, `/en/faq/`, etc. (with `slug` from `[en]` section) - Content files: `article.md` (Norwegian), `article.en.md` (English) - Translation strings: `custom/languages/no.ini`, `custom/languages/en.ini`