- Workflow event types Add a step to workflows: an eZWorkflowEventType class, its registration and triggers, execute() and the statuses it can return, process parameters, a verified example.
- admin4 styling for extension pages Make an old extension's admin pages look like the rest of admin4 - shared a4 components, tokens only, dark mode, no inline CSS - with the explayouts_ui template editor as a real before and after.
- Array operators Building and working with arrays and hashes in templates: array, hash, append, prepend, merge, contains, extract, extract_left, extract_right, implode, explode, reverse, unique, insert, remove, repeat, begins_with…
- By hand: an ezjscore server function Answer an ajax call: ezjscServer settings, a server function class, a script that calls it with Exp.io and writes with textContent, a policy for it, and testing the address.
- Choosing datatypes for your fields Which of the 35 shipped datatypes to choose for each kind of field - text, rich text, dates, numbers, choices, relations, media, prices, users - with what each stores and how it is shown.
- Code for every supported database Writing PHP and SQL that works on all six databases Exponential supports - SQLite 3 (the default), PostgreSQL, MongoDB, MariaDB, Oracle and MySQL - the driver classes, the portable helpers of eZDBInterface, schema files…
- Console, cronjobs and background work How work runs outside a web request in Exponential - the console and its command discovery, eZScript, cronjob parts run by runcronjobs.php, content jobs for large content operations, the expqueue job queue for…
- Debug output and logs for developers See what the system does while it builds a page: the Exp Debug bar and its settings, used templates, path comments, the log files under var/log, and your own debug lines and logs from PHP.
- Declaring dependencies in extension.xml The dependencies block of extension.xml - extends, requires and uses - what each does to the loading order, a real example, and how it relates to Composer's require.
- Dependency injection and services: what exists An honest answer to "where is the service container?" - the legacy kernel has none of its own; classes are found through a generated class map, singletons and handler classes named in INI settings; how to write testable…
- Errors and status codes Every HTTP status the REST API of Exponential answers, with its JSON body and what an app should do - 200, 201, 400, 401 with and without a body, 403 access_denied and insufficient_scope, 404, 405 with Allow, 429 with…
- Handling security reports What to do from the moment a security report arrives - acknowledge, reproduce privately, assess, fix, release, credit - and what to do when the report arrives in a public issue.
- Outgoing webhooks from the audit trail Using the audit trail's signed webhook sink as an outgoing event feed - what it sends, how to route content events such as content.object.publish to it, the HMAC signature and how a receiver checks it, delivery with…
- PHP function operators How template.ini [PHP] PHPOperatorList turns one-argument PHP functions into template operators through eZTemplatePHPOperator, the operators it gives on a development installation (urlencode, urldecode, rawurlencode…
- Submitting a theme to Packagist Publish a theme as a Composer package on Packagist - prerequisites, the Submit page, checking the package page, and testing composer require from a clean installation.
- The content API in PHP Read content from PHP - eZContentObject, eZContentObjectTreeNode and eZContentObjectAttribute, fetching by id, remote id and URL alias, subtree queries with filters, data maps, versions and languages, and…
- The three installers, from a bundler's view The setup wizard, the kickstarter and exp:install run the same install steps; what differs is where the answers come from. Which one a bundle should call, what each writes, how each guards against overwriting a site…
- Triggers and workflows for developers How operations, triggers and workflows connect: operation definitions, making more operations triggerable, running an operation from PHP, and what happens to deferred processes.
- Workflows for builders Make something happen around publishing: workflows, events, triggers, processes and the workflow cronjob, explained for builders, with an approval workflow and the event types that need no code.
- API versions v1 and v2 Which REST API version an app should call - reads identical at v1 and v2, writes at v2 only, links that stay in their version, the ezpl alias, the deprecated ezprestapiprovider shim, what 6.0.15 changed for existing…
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