Extension development
Building extensions step by step: structure, settings, modules, templates, classes and contributing back.
216 pages
- The se7enxweb extension catalogue The 65 extensions the kernel's composer.json requires, grouped by purpose, with repository, license and documentation: the first place to look for ideas and examples.
- With RAD: handlers and kernel overrides The Handler wizard writes a mail transport chosen by a setting; the Kernel override wizard writes a copy with its provenance and a drift check. Both from real output.
- Dynamic properties PHP 8.2 deprecates properties a class does not declare. How the kernel handles them for persistent objects, how to find them in your own classes, and when to declare, use an array, or allow them.
- eZUser and access checks The current user and access checks from PHP and templates - eZUser::currentUser(), isAnonymous(), isLoggedIn(), hasAccessTo() and its accessWord yes, no or limited, object-level checks, and the user fetch functions.
- filelist.md5 and the upgrade check Extensions that ship share/filelist.md5 are read by the admin's file consistency check; every release must refresh the checksums of changed files, or the check lists them as modified. How to keep it right.
- Finding ideas on GitHub Search GitHub for extensions and working code: the se7enxweb organization, code search for kernel class names, history and issues, and whether a project is alive.
- Modules and views Pages with their own address: module.php and every ViewList key, a view script and a view class, POST actions, redirects and errors, from eZModule and a real extension.
- Pull request etiquette The habits that get pull requests merged and make maintainers glad to see your name - small and focused, explained, tested, patient, open to change - and what to avoid.
- The design chain: where a template is found How design:path/to/template.tpl is resolved: SiteDesign, AdditionalSiteDesignList, StandardDesign and DesignExtensions in each design, with the kernel code and a script that prints your chain.
- Where the designers' help continues The designer help goes much further than this book: the template language, theme design, theme extensions, distribution, sales and life cycle. A map from each chapter of Part 6 to the pages that continue it.
- Demo mode for developers The demo mode API for extension and installer authors - expDemoMode::enabled(), protectsPassword(), refusalText(), refused(), installing() and the store guard in eZUser::store(), the template operator exp_demo_mode()…
- By hand: the smallest extension in five minutes Three files make a complete extension - ezinfo.php, extension.xml and one settings file. Create them, check them, switch the extension on, see it in Setup > Extensions and see its setting win, then put it under Git.
- Database code for PHP 8 and every engine Bring an old extension's database code up to Exponential 6 - from mysql_* calls and MySQL-only SQL to eZDB, eZPersistentObject and .dba schema files that work on SQLite, PostgreSQL, MariaDB, MySQL, Oracle and MongoDB.
- eZHTTPTool: requests, sessions and redirects Read POST and GET variables, keep values in the session and redirect with eZHTTPTool - postVariable() with a fallback, sessionVariable(), redirect() - and the module redirects views prefer.
- Finding ideas on Packagist Packagist lists every package of the extension type: how to find them, read versions, requirements and licenses, and install one on a development installation.
- Packages (.ezpkg) and the package creator The other way to distribute: .ezpkg packages made with the package creator in the administration or ezpm.php - extension exports, content class exports, site styles - and when to use them next to Composer.
- Template overrides: the basics An override replaces one template for some content only - articles in full view, the front page, one section. The override.ini block, where the file goes, how to check it applies, and the mistakes that stop it.
- View parameters, unordered parameters and POST How an address reaches a view: ordered, unordered and user parameters as eZModule::run() parses them, and reading POST and session values safely with eZHTTPTool.
- Writing good issues Report a bug or ask for a feature in a way a maintainer can act on - versions, steps to reproduce, expected and actual result, logs without secrets - with a template and what to leave out.
- By hand: a template operator Add two template operators to mysite_hello by hand - the plug, the registration and the class - check them with php -l, switch them on and use them, with the output the template engine produced.
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