Architektura
Renick.Content má tři vrstvy:
- Obsah. Dokument je seznam typovaných bloků uložený jako JSON v hostitelském poli: v záznamu Tailoru, atributu modelu, stránce RainLab.Pages nebo příspěvku RainLab.Blog. Formát definuje JSON Schema v1; každý zápis se validuje.
- Editor. Ostrůvek TipTap 3 / React 19, který vkládá form widget
contenteditor. Bundle vassets/distje commitnutý, takže instalace nikdy nespouští JS toolchain. - Vykreslování.
BlockRendererpřevádí JSON na HTML při každém požadavku (přesrenickContent,content_render()nebo|rc_blocks) a pravidla viditelnosti uplatňuje na serveru.
Mapa komponent
Při uložení DocumentSaveGuard dokument normalizuje, přísně validuje a zkontroluje BlockRules. Porušení pravidel, která uložený dokument už měl, uložení neblokují. Po uložení hostitele se zachytí verze a aktualizuje se index využití médií.
Dokument žije v hostiteli. Vlastní tabulky pluginu jsou pomocné: renick_content_versions (snapshoty, auditní log), renick_content_templates, renick_content_media_usage, renick_content_shared (Sdílený obsah), renick_content_scripts (Vlastní skripty), renick_content_api_tokens (hashované) a renick_content_ai_usage (měsíční rozpočet AI).
Kde co žije
plugins/renick/content/
├── Plugin.php # registrations only
├── routes.php # REST API (off by default), tile/thumb proxies, form endpoints
├── blocks/ # <handle>/<handle>.yaml definition + <handle>.htm partial
├── classes/ # renderer, document model, Content/ContentApi facades, Integrations/, TailorList/, ai/
├── components/ # renickContent, Entry List, submission form
├── contentfields/ # Tailor content field
├── controllers/ # backend pages (tokens, audit log, scripts, shared content, templates)
├── formwidgets/ # ContentEditor, icon picker
├── console/ # renick:content:* commands
├── models/
├── schema/document-v1.json
├── assets/ # src/ editor source; dist/ and frontend/ committed bundles
└── tests/ # PHPUnit; Playwright e2e lives in /tests-e2eZačněte stránkami Hostování pole, Tvorba bloků, PHP API nebo REST API.