A guide for developers who build themes, plugins or integrations with CMS39. The examples come from the actual core code and work as shown.
Before you start
- The code is PHP 8.5, with strict types where possible, and the database is MariaDB through Doctrine DBAL.
- A site is not changed by its theme: anything that belongs to the core or to a plugin is updated automatically.
- In the admin, Theme → Site fields · Guide has the same material with the current values of your site.
Sections
Getting started
Installation, settings, updates.
Architecture
Folders, request lifecycle, database.
Themes & templates
Theme structure, templates, Twig, CSS / JS.
Site fields
Your own fields for texts, images, repeaters.
Menus
Menus and lists with unlimited depth.
Blocks
Sliders, cards, repeating parts.
Hooks
Filters and actions for themes and plugins.
Routing & URLs
Routes, language in the URL, custom pages.
Translations
The __() function, language files, overrides.
Cache & external APIs
Redis, tags, cms39_remember_external.
Pagination
Paginated lists in one call.
Plugin development
Structure, admin pages, ajax, database tables.
CLI & cron
Command line and scheduled tasks.
Webhooks
Notifications from external services.
Search
Search and autocomplete hooks.
E-shop
Products from the theme, cart hooks.
E-MAIL or by phone at (+30) +30.2152151245-8