- ORM and active record: eZPersistentObject The Exponential answer to Eloquent, Doctrine, the Django ORM and ActiveRecord for your own tables - eZPersistentObject with a definition() array, fetchObject, fetchObjectList, count, store and remove, function…
- Packages for export For administrators and developers - how Exponential packages carry content objects, classes and files out of an installation (the package wizard, .ezpkg in classic XML or JSON, download, ezpm.php export), the…
- Packages for import and export Moving content classes, content subtrees and settings between installations with packages - ezpm.php on the command line, the JSON package format for tools, installing large packages, remote ids in packages, and when…
- PHPUnit without a database How Exponential's PHPUnit setup works for PHP developers - phpunit.xml, tests/bootstrap.php, the test suites and excluded groups, PHPUnit 10 to 13 across PHP 8.1 to 8.5, writing a DB-less test for kernel or extension…
- Policy functions and limitations Make an application's permissions manageable in the role editor - declaring policy functions and limitations in module.php, checking them in views and code with hasAccessTo, content permissions with canRead and canEdit…
- Reading a node Read one item for a detail screen through the REST API - by node id or object id, the metadata keys, the links map, locations and fields on request, and how to follow links without building URLs by hand.
- Read the error digest Step by step - the daily five-minute look at Setup > Log files > Error digest - what is new, what grows, how to open a group, when to mark it as known and how to hand a real fault to developers.
- Removing inline scripts and styles Move a maintained theme toward a strict Content Security Policy - find inline script blocks, event handler attributes, javascript: links and style attributes, move them into files and data attributes - following how the…
- Runbook: demo mode does not show, or the demo build fails with a generated password What to check when a public demo runs without demo mode (no banner, an administrator password could be changed, no demo/mode line in security.log), when its build fails because the installer generated an administrator…
- Running a team on Git How a project team works on an Exponential site with Git: repositories, branches, pull requests and reviews, commit messages, settings in version control, deployments, and why a published tag is permanent.
- Siteaccesses and configuration How Exponential is configured - INI files read through eZINI, the order in which override directories win, siteaccess matching, per-environment variants with EXP_ENV, configuration managed by the deployment, secrets in…
- Template operators Give templates new operators: the registration, the four methods the engine calls, named parameters and piped input, a complete verified example, testing, and the PHP 8 pitfalls.
- The design settings a theme ships Which design settings belong in the theme extension and which belong to the installation - SiteDesign, AdditionalSiteDesignList[], StandardDesign and the stylesheet and script lists - with a recommended split.
- The maintenance life cycle An extension's life from the first release to the last - supported versions, following PHP and kernel releases, deprecating before removing, branches for old versions, and ending maintenance honestly.
- The pagelayout: your site's frame What pagelayout.tpl does, the variables it gets ($module_result, $site, $current_user), a minimal CSP-friendly pagelayout to start from, cache blocks and the mistakes that make a site slow or blank.
- Third-party components and their licenses How a bundler finds every component inside a bundle and its license - Composer packages, extensions, JavaScript and CSS libraries, site packages, the runtime and the operating system - how to build the third-party list…
- Bulk data exchange with xrowextract Using the xrowextract extension as a file-based integration - exports of one or many classes as CSV, JSON or XML, imports with a dry run, content packages, schedules with delta runs, delivery to SFTP, FTP, S3, WebDAV or…
- By hand: a module protected by a policy An admin page with a form: a policy with a limitation, POST actions, input validation, a limited access check in PHP and an admin4 template, checked with php -l and the engine.
- CSP: event handler attributes to data attributes Replace onclick, onchange, onmouseover and other event handler attributes with data attributes and one delegated listener in a script file, with the context menu fixes of ezownerchange and expchangeclass.
- Custom locales for unlisted languages How to add a language Exponential does not ship a locale for: write share/locale/<code>.ini with names, HTTP tag, direction, formats and day and month names, choose the code, add it as a custom content language, and…
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