Extension development
Building extensions step by step: structure, settings, modules, templates, classes and contributing back.
216 pages
- Setting up a development installation A development installation in a few commands: Git clones, Composer, exp:install on SQLite, Velocity, debug settings, and the rules that keep it apart from live.
- With RAD: a module with views The Module wizard writes a module with two views and policies; read the output, correct the template folder by hand, and know when to use Module over existing tables.
- Changing settings with exp:ini Every verb of the settings command - get, set, add, rem, clear, toggle, copy, move, move-all, where, list, scopes - with its scopes, dry runs, backups, JSON output and exit codes, and recipes for common builder tasks.
- Composer and Packagist Register an extension on Packagist so sites can install it with composer require - the composer.json it needs, submitting the repository, how versions come from tags, and how users install and update it.
- Extension load order Which extension wins when two provide the same setting or template: the written order of ActiveExtensions, how declared dependencies reorder it, extra extension folders, and how to see the real order.
- eZPersistentObject The eZPersistentObject reference - definition() keys, fetchObject(), fetchObjectList() and its parameters, count(), store(), remove(), removeObject(), attribute access - with kernel signatures.
- Part 5: Extending, forking ethically and contributing back Part 5 of the book: build on other people's extensions fairly - extend without forking, fork when you must, keep credit and licenses right, and give your work back with pull requests, issues and reviews.
- PHP 8.1 to 8.5 deprecations The deprecations each PHP release from 8.1 to 8.5 added that old extension code meets, how they show in the debug output, and the fix for each that still runs on PHP 8.0.
- Rebranding ethically What you may and may not do when you put your own name on a fork - new names, kept credit, honest descriptions, no borrowed trademarks - with a checklist and examples from extensions this project forked.
- Themes and siteaccesses Which site uses which theme - SiteDesign, AdditionalSiteDesignList and StandardDesign per siteaccess, themes that build on other themes, one theme for several sites, and how to see the chain a siteaccess really uses.
- With RAD: a workflow event The Workflow event wizard writes an event type that logs every publication: triggers and statuses, the generated class and templates, and the one method to fill in.
- Your first hour as a developer A guided hour: see who sets a setting, change and undo it, find the template behind a page, read the debug output and a log, and run PHP with the kernel loaded.
- composer.json for an extension The composer.json that installs an extension into extension/<name>: package type, installer, extension name, PHP and kernel requirements, license, authors, with two real examples.
- eZContentObject The eZContentObject methods extensions use - fetch(), fetchByRemoteID(), dataMap(), mainNode(), assignedNodes(), versions, access checks - with signatures and a tested example.
- Licenses and how they combine How the licenses you meet in extensions combine when you put code together - GPL 2 or later, GPL 2 only, GPL 3, LGPL, MIT, BSD, Apache 2.0 - which mixes are allowed, which are not, and how to record them.
- Part 6: Theme developers Part 6 of the book: themes are extensions. Build one with the RAD wizard or by hand, connect it to siteaccesses, load its assets under a Content Security Policy, support dark mode, distribute it.
- Reading the code you already have A map of an installation and four reading techniques: grep for a name, follow an address to its view, a page to its template, and ask Git why a line is there.
- Removed PHP functions and their replacements The PHP functions old extensions call that PHP 7 and 8 removed - each(), create_function(), ereg(), split(), mysql_*(), magic quotes and others - with a tested replacement for each.
- Settings in the administration Setup > Ini settings shows every setting with its value in effect, the file it comes from and the whole override chain; compares siteaccesses; changes values safely with masked secrets. How a builder uses it.
- Theme assets, the packer and CSP Load a theme's stylesheets, scripts, images and fonts the way Exponential expects - frontend lists, ezcss_load and ezscript_load, the ezjscore packer, ezimage - so they are fast and pass a CSP.
Documentation license
This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.
Exponential Copyright © 1998-2026 Exponential Foundation and 7x