Theme extensions
Packaging a theme as an extension: structure, settings, dependencies and the designs it adds.
23 pages
- Theme extensions: start here The map of everything about packing a design into a theme extension - folder structure, ezinfo.php and extension.xml, the settings a theme ships, the RAD design wizard, Composer packages and Exponential packages…
- The design extension wizard (Setup > RAD) Generate a complete theme extension in a few minutes with the design extension wizard at /setup/designextension - every field, the file preview, Create in extension/ and Download as zip - step by step.
- The folder structure of a theme extension Every folder and file a theme extension can hold, what reads it, and which ones are required, shown on a complete tree and compared with three published themes.
- ezinfo.php: what the About page reads Write the ezinfo.php file of a theme extension step by step, with the keys the About page and the upgrade checks read, a complete example from a real theme, and the checks to run before a release.
- 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.
- Keeping every version field in sync A theme's version number lives in up to five places; the list, the order in which to change them before a release, and a one-minute check that they agree.
- Registering the design: DesignExtensions[] The one setting that makes the template system look into a theme extension's design folder - design.ini [ExtensionSettings] DesignExtensions[] - how to write it, how to check that it works, and what goes wrong without…
- 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.
- Settings files in an extension How a theme ships settings as .ini.append.php files in its settings/ folder, the file format with its PHP comment guard, which settings belong in a theme, and how to see which file wins.
- Siteaccess settings inside a theme Ship settings that apply only while one siteaccess runs, in extension/<theme>/settings/siteaccess/<siteaccess>/, and settings for all of a theme's siteaccesses in settings/override/ - with the example of…
- Giving a theme its own settings file Give a theme its own settings file (mytheme.ini) with documented defaults, read it from templates with ezini() and from PHP with eZINI, and let installations override it safely.
- 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.
- Template operators in a theme Add a template operator to a theme - the operator class, autoloads/eztemplateautoload.php, ExtensionAutoloadPath[] and the autoload array - and avoid the one file the design wizard does not write.
- Translations in a theme Ship the interface texts of a theme in several languages - translations/<locale>/translation.ts, TranslationExtensions[], the i18n operator with the theme's own context - and keep the files complete.
- The share folder: demo images, files and seed data What a theme's share/ folder is for - demo images and files, database schema and seed data (.dba) - how real themes use it, and the rules that keep it small, legal and free of backups and personal data.
- Bundling content class packages with a theme When a theme's templates expect content classes (article, event, blog post), ship them as content class packages in the theme's packages/ folder, as sevenx_themes_simple does, and tell users how to import them.
- The design wizard's parts, one by one Reference of every part the design extension wizard can write - the files each produces, whether it is on by default, and what to change in the result.
- composer.json for a theme Write the composer.json that makes a theme installable with composer require - name, description, type ezpublish-legacy-extension, license, authors, support, require, suggest and the extension name - with a complete…
- The Composer installer and the extension's folder name How the legacy extension installer decides the folder a theme lands in - extra.ezpublish-legacy-extension-name, else the package name - why installer-name is not read, and how to check the result before publishing.
- require and suggest: what a theme depends on Decide what goes into require and what into suggest in a theme's composer.json - PHP versions, the installer plugin, layouts or site API extensions - with the real choices of sevenx_themes_media and ezwebin, and version…
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