Add Atom feed support to list pages
Introduce `feed` metadata option to enable Atom feeds Update list item structure with standardized fields Add `$feedUrl` template variable for autodiscovery Improve date handling with raw/processed date separation Document feed generation in architecture and rendering docs Update template examples to use new item structure
This commit is contained in:
parent
1cbfb67a4c
commit
069ce389ea
7 changed files with 128 additions and 48 deletions
|
|
@ -36,13 +36,26 @@ Handled directly in `router.php` (not a separate function):
|
|||
1. Render directory's own content files as `$pageContent`
|
||||
2. Load metadata, check `hide_list`
|
||||
3. Select list template from `page_template` metadata
|
||||
4. Build `$items` array from subdirectories (metadata + extraction)
|
||||
5. Sort items by date
|
||||
4. Call `buildListItems()` from `helpers.php` (builds + sorts items)
|
||||
5. Store `pageTitle`, `metaDescription`, `pageCssUrl`, `pageCssHash`, `feedUrl` on context
|
||||
6. Fire `Hook::TEMPLATE_VARS`
|
||||
7. Render list template → capture as `$content`
|
||||
8. Pass to `renderTemplate()` which renders `base.php`
|
||||
|
||||
**`renderTemplate(Context $ctx, string $content, int $statusCode = 200): void`** — Wraps content in base template. Used for list views and error pages.
|
||||
**`renderTemplate(Context $ctx, string $content, int $statusCode = 200): void`** — Wraps content in base template. Used for list views and error pages. Reads `pageTitle`, `metaDescription`, `pageCssUrl`, `pageCssHash`, and `feedUrl` from the context object (set by the list case in `router.php`). For error pages, these context keys are unset, so base.php receives nulls.
|
||||
|
||||
## Atom Feed Rendering
|
||||
|
||||
Handled in `router.php` before `parseRequestPath()`. When a request path ends with `feed.xml`:
|
||||
|
||||
1. Strip `feed.xml` suffix, resolve parent as list directory via `parseRequestPath()`
|
||||
2. Check `feed = true` in metadata — 404 if missing or if parent is not a list
|
||||
3. Call `buildListItems()` to get items
|
||||
4. For each item: call `findAllContentFiles()` + `renderContentFile()` to get full HTML content
|
||||
5. Build Atom XML with absolute URLs (`$_SERVER['HTTP_HOST']` + scheme detection)
|
||||
6. Output `Content-Type: application/atom+xml` and exit
|
||||
|
||||
Feed piggybacks on the existing Markdown cache — no separate feed cache needed. The `rawDate` field on items provides ISO dates for Atom `<updated>` elements. Content is wrapped in `<![CDATA[...]]>` with `]]>` safely escaped.
|
||||
|
||||
## Markdown Caching
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue