Skip to content

Architektura ​

Renick.Content ma trzy warstwy:

  1. Treść. Dokument to lista typowanych bloków zapisana jako JSON w polu hosta: we wpisie Tailora, atrybucie modelu, stronie RainLab.Pages lub wpisie RainLab.Blog. Format definiuje JSON Schema v1; każdy zapis jest walidowany.
  2. Edytor. Wyspa TipTap 3 / React 19 montowana przez form widget contenteditor. Paczka w assets/dist jest zacommitowana, więc instalacja nigdy nie uruchamia toolchaina JS.
  3. Renderowanie. BlockRenderer zamienia JSON na HTML przy każdym żądaniu (przez renickContent, content_render() lub |rc_blocks) i stosuje reguły widoczności po stronie serwera.

Mapa komponentów ​

Przy zapisie DocumentSaveGuard normalizuje dokument, ściśle go waliduje i sprawdza BlockRules. Naruszenia reguł, które zapisany dokument już miał, nie blokują zapisu. Po zapisaniu hosta zapisywana jest wersja i odświeżany indeks użycia mediów.

Dokument żyje w hoście. Własne tabele wtyczki są pomocnicze: renick_content_versions (snapshoty, dziennik audytu), renick_content_templates, renick_content_media_usage, renick_content_shared (Treść współdzielona), renick_content_scripts (Skrypty niestandardowe), renick_content_api_tokens (hashowane) i renick_content_ai_usage (miesięczny budżet AI).

Gdzie co się znajduje ​

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-e2e

Zacznij od Hostowanie pola, Tworzenie bloków, API PHP lub API REST.