Extension development
Building extensions step by step: structure, settings, modules, templates, classes and contributing back.
216 pages
- Commit messages the project can build a changelog from The commit message format of Exponential - Added, Updated, Fixed, Removed, Renamed - why it exists, how the kernel's commit-msg hook checks it, and how to write a subject and body that explain what changed and why.
- eZSys and eZExtension Paths and the environment with eZSys (varDirectory, cacheDirectory, serverURL, isShellExecution) and active extensions with eZExtension (activeExtensions, expandedPathList, getHandlerClass).
- Modernizing ezinfo.php and extension.xml Bring an old extension's ezinfo.php and extension.xml up to date - quoted keys, a readable name, the release version, the license, the website and credit for included software - and check what the about page shows.
- Override conditions: class, node, section, view mode and more Every Match key an override can use - for full views, for node_view_gui lists and embeds, and for fields drawn with attribute_view_gui - taken from the kernel code that sets them, with examples and combination rules.
- Policy functions and access checks Protect a module: policy functions and limitations in module.php, views that require them, eZUser::hasAccessTo() with its yes, no and limited answers, and granting through roles.
- Share Exponential (share.exponential.earth) The community portal: forums for extensions and developers, tutorials, books, code standards, blogs and chat channels, and how to cite what you use there.
- Testing before a release What to run before you tag: lint on the oldest and newest PHP, the extension's tests, metadata checks, a clean install from the repository with Composer, and every feature by hand - a tag cannot be corrected.
- Announcing a release Tell the people who use your extension about a release - the GitHub release itself, share.exponential.earth, the project page on projects.exponential.earth, ezpedia - what to write, and what to leave out.
- By hand: a fetch function Give templates fetch( 'hello', 'newest', ... ): register a module folder, write function_definition.php and the collection class, and call it from a template, verified.
- Exponential Projects (projects.exponential.earth) Exponential Projects, the forge that replaced projects.ez.no: thousands of projects by type, how to read an entry, and how to reuse what you find without breaking copyright.
- eZTemplate from PHP Render templates from PHP with eZTemplate - factory(), setVariable(), fetch('design:...'), hasErrors() - in module views, cronjobs and mail, and how template operators and functions are registered.
- Modernizing composer.json Give an old extension a composer.json that installs it into Exponential 6, or bring an old one up to date - PHP constraint, installer, license, authors and support - with the change expchangeclass made for PHP 8.0.
- Reviewing other people's work How to review a pull request to an Exponential extension usefully - what to check in order (purpose, safety, behavior, tests, style), how to try it locally, and how to write comments that help.
- View modes for builders A view mode is one way of drawing content - full page, line in a list, embed in rich text. The modes the kernel ships, how a page and a list choose one, adding your own mode, and which modes are cached.
- View results, the path and the pagelayout What a view returns in $Result - content, path, navigation part, a different or no pagelayout - how the pagelayout receives it as $module_result, and how to answer with JSON or a file instead of a page.
- Adopting an abandoned extension How to tell whether an extension is really abandoned, how to ask its author for maintenance or a hand-over, and how to take it on fairly when nobody answers - with the steps and the notices to keep.
- By hand: a module with a view The page /hello/world/<name>: module.php with a policy, a view that validates its parameter and uses the fetch function, a template in the standard design, all verified.
- CSP: moving inline scripts into files Move an old extension's inline script blocks into JavaScript files loaded with ezscript, pass template values through data attributes, and keep the page working under a Content Security Policy without unsafe-inline.
- eZModule and module results The module.php arrays, the $Params a view gets, the $Result it returns, and the eZModule methods views use - redirectTo(), redirectToView(), handleError(), isCurrentAction(), actionParameter().
- eZpedia (ezpedia.exponential.earth) eZpedia, the free community encyclopedia under the GNU FDL: the articles that matter to extension developers, how old they are, and how to reuse them with credit.
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