CMS — sidor och inlägg
På Zkrinet: lägg till blocket under Byggblock i panelen — ett klick, din egen kod rörs inte och en ögonblicksbild tas först. Installationsstegen nedan gäller om du kör PocketBase själv, till exempel efter en export.
Sidor och blogginlägg som du skriver i PocketBases adminpanel (med textredigerare) och visar i din app. Publicering med datum, automatiska webbadresser, versionshistorik, RSS-flöde och sitemap.
Testat mot PocketBase 0.40.4.
#Installation
Kopiera pb_hooks/ och pb_migrations/ till din PocketBase och starta om. Samlingarna zk_cms_sidor och zk_cms_inlagg dyker upp i adminpanelen.
#Skriva
| Fält | |
|---|---|
titel, innehall (redigerare), utdrag | Texten |
slug | Webbadressen. Lämna tom så skapas den av titeln: "Våra tjänster & priser!" → vara-tjanster-priser (finns den redan blir det -2). |
bild | Omslagsbild (jpg/png/webp/gif/avif, max 10 MB) |
sok_titel, sok_beskrivning | Valfria texter för Google (annars titel/utdrag) |
publicerad, publiceras | Syns bara när publicerad är på och datumet passerats. Datum i framtiden = schemalagd. Bocka i utan datum = publiceras nu. |
lastid_min | Räknas ut automatiskt (200 ord/minut) |
Sidor: ordning · Inlägg: taggar (lista), forfattare |
Bara superusers kan skriva. Besökare läser publicerat innehåll utan inloggning.
#Visa i din app
// En sida via adressen
const sida = await pb.collection("zk_cms_sidor").getFirstListItem(`slug = "${slug}"`)
// Senaste inläggen
const inlagg = await pb.collection("zk_cms_inlagg").getList(1, 10, { sort: "-publiceras" })
// Inlägg med en tagg
await pb.collection("zk_cms_inlagg").getList(1, 10, { filter: 'taggar ~ "nyhet"' })
Rendera innehållet tvättat. innehall är HTML. Pluginet tar bort skript, händelseattribut, javascript:-länkar, inbäddningar och liknande när det sparas (testat mot ett trettiotal kända knep) — men det är ett extra skyddslager. Rendera alltid med en riktig tvätt i appen, t.ex. DOMPurify.sanitize(sida.innehall).
#RSS och sitemap
GET /api/zk/cms/rss.xml— de 20 senaste publicerade inläggenGET /api/zk/cms/sitemap.xml— alla publicerade sidor och inlägg
Ligger din sajt på en annan adress än PocketBase, skapa en rad i zk_cms_installningar:
| Fält | Exempel | Standard |
|---|---|---|
webbadress | https://min-sajt.se | appens adress |
sida_mall | /{slug} | /{slug} |
inlagg_mall | /nyheter/{slug} | /blogg/{slug} |
rss_titel, rss_beskrivning | appens namn |
Tips: peka /rss.xml och /sitemap.xml på din sajt hit (proxy/rewrite), och lägg sitemappen i Google Search Console.
#Versioner
Varje gång titel, innehåll eller utdrag ändras sparas den tidigare versionen i zk_cms_versioner (de 20 senaste per sida). Återställ med:
POST /api/zk/cms/aterstall/{versionens id} (superuser)
Den nuvarande versionen sparas först, så en återställning går också att ångra.
#Begränsningar
- Ett språk per post — vill du ha flera språk, gör en post per språk (t.ex.
om-ossochabout-us). - Ingen roll för "redaktör": den som skriver behöver vara superuser.
- Bilder i själva texten laddas upp via redigerarens bildknapp eller som filer; pluginet gör ingen bildoptimering.
#Testa
./bank.py cms
11 tester: slug (svenska tecken, dubbletter), publicering och schemaläggning, behörighet, tvätt av farlig HTML (inkl. kodade och sammansatta knep) utan att vanlig HTML rörs, lästid, versioner och återställning, versionstaket, RSS och sitemap (giltig XML, rätt adresser, inga utkast). Tvätten är mutantverifierad: varje skydd har brutits med flit och fångats.