- Declaring dependencies How a site package names the packages it needs, the require element with type, name and min-version, why the list must be flat and in install order, what the setup wizard and the create sites step do with it, the errors…
- Validating a package before publishing The checks to run on a site package before it goes to the package server, in order, from xmllint and a look inside the archive to ezpm.php validate, the Validate button on the package page and the upload inspector of…
- README and repository docs What the source repository of a site package should carry besides the packages, a README that says what the package installs and how to build it, a LICENSE file, a changelog or release notes, and a repository…
- A compatibility matrix Keep a table of which theme versions were tested with which Exponential, PHP, server engine and database versions, and the browsers and widths you check - how to fill it honestly and where to publish it.
- Agentic workflows The part of the AI, agents and agentic section for people who build agents and agentic workflows against Exponential - choosing an interface, agents on the REST API and on expservices, credentials, a read-only key step…
- 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.
- Configuration managed by deployment How the ManagedByDeployment switch locks the settings, template and package screens of a live siteaccess so that every configuration change passes version control and your change board, what stays open, and how to…
- CSP reports Collecting Content Security Policy violation reports in csp.log, reading them in the log viewer and error digest, and using them to move a public-sector siteaccess from report-only to an enforced policy without breaking…
- Extending the shop The extension points of the Exponential shop in one place - shipping, VAT, basket info, shop account, confirm order and exchange rate handlers, payment gateways, price datatypes and workflow events - with how each is…
- extension.xml: the packaged description Write the extension.xml of a theme with its metadata block (name, version, copyright, license, website) and optional dependencies, check it with xmllint, and keep it equal to ezinfo.php.
- eZContentObject The eZContentObject methods extensions use - fetch(), fetchByRemoteID(), dataMap(), mainNode(), assignedNodes(), versions, access checks - with signatures and a tested example.
- Foreach loops Looping over arrays and fetch results with foreach: keys and items, offset, max and reverse, sequence for alternating classes, delimiter between items, break, continue and skip, and loop habits that keep templates fast.
- Getting the code for a bundle The three documented ways to get Exponential's code (git clone and composer install, composer create-project, composer require into your own project), which one suits which kind of bundle, and how to check the result…
- Lexical structure How the parser reads a template - the delimiters, the kinds of tags (output tags, function tags, end tags, single tags), comments, literal blocks, ldelim and rdelim, escaping a brace inside a tag, the rule that removes…
- 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.
- OAuth applications for integrations How an external application signs users in and acts for them through Exponential's OAuth 2.0 authorization server - registering the application, the authorization code flow, refreshing tokens, the oauth/authorize…
- 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.
- Project files: README, security policy and contributing in the help The README.md, SECURITY.md, CONTRIBUTING.md, COPYRIGHT.md and LICENSE.md of the repository, and the README files of its directories, are pages of the help. Where to find them, how links between them and the…
- 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.
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