Recent changes
Wednesday November 04 2026
-
Tests for extensions Updated Markdown page
Tests that ship with an extension and need no database: phpunit.xml.dist and bootstrap, unit and file tests, the kernel's own suite, and the other checks before every commit.
-
Translations in an extension Updated Markdown page
Every text in every language: i18n in templates and ezpI18n::tr() in PHP, translation.ts files, TranslationExtensions, the cache, fallbacks between locales, and coverage checks.
-
Triggers and workflows for developers Updated Markdown page
How operations, triggers and workflows connect: operation definitions, making more operations triggerable, running an operation from PHP, and what happens to deferred processes.
-
Tutorials: build real extensions step by step Updated Markdown page
Step-by-step tutorials that build real small extensions, first with the RAD wizards of Setup > RAD, then by hand, ending with a complete extension from idea to release. Every file shown was checked with php -l and run.
-
By hand: an ezjscore server function Updated Markdown page
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.
-
By hand: a cronjob part Updated Markdown page
Add a nightly digest to mysite_hello - a CronjobPart class, the one-line script, a part of its own in cronjob.ini, running it with runcronjobs.php and scheduling it in the crontab. All PHP files passed php -l.
-
By hand: a rich text custom tag Updated Markdown page
A custom tag for rich text: AvailableCustomTags, a custom attribute with an online editor control, and the ezxmltags template that renders it with $content, verified.
-
By hand: a datatype Updated Markdown page
Add the rating datatype by hand: the four files and two settings in build order, a check after each step, and a test plan in the class editor.
-
By hand: a fetch function Updated Markdown page
Give templates fetch( 'hello', 'newest', ... ): register a module folder, write function_definition.php and the collection class, and call it from a template, verified.
-
By hand: help pages for your extension Updated Markdown page
Put an extension's documentation into the admin help center: doc/ pages with front matter, shown while the extension is active (ExtensionDocDirs only for an inactive one), context help for its views, and checking with…
-
By hand: the smallest extension in five minutes Updated Markdown page
Three files make a complete extension - ezinfo.php, extension.xml and one settings file. Create them, check them, switch the extension on, see it in Setup > Extensions and see its setting win, then put it under Git.
-
By hand: a module protected by a policy Updated Markdown page
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.
-
By hand: a module with a view Updated Markdown page
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.
-
By hand: your own table with eZPersistentObject Updated Markdown page
A greetings table: an engine-neutral db_schema.dba, the SQL the kernel generates from it for three databases, installing it, the class, and using it from a page.
-
By hand: a PHPUnit test for your extension Updated Markdown page
Tests that run without a database: phpunit.xml.dist, a bootstrap, operator tests and a file test against inline CSS and scripts, green on the kernel's PHPUnit.
-
By hand: a template operator Updated Markdown page
Add two template operators to mysite_hello by hand - the plug, the registration and the class - check them with php -l, switch them on and use them, with the output the template engine produced.
-
By hand: translating an extension Updated Markdown page
Translate an extension into German: collect the texts, write the translation.ts files, register them with TranslationExtensions, clear the cache and see the German texts.
-
By hand: a workflow event Updated Markdown page
A workflow event type "Log publishing" by hand: the class, the registration, the view template, a workflow and a trigger, and the log line it writes.
-
Capstone: a complete extension from idea to release Updated Markdown page
All tutorials in one releasable extension: a plan, the full file tree, composer.json, README, tests, the checks before a release, version 0.1.0, publishing and announcing.
-
With RAD: a datatype Updated Markdown page
The Datatype wizard writes a rating datatype: form, storage and abilities, the files, what you still write, and two corrections to make by hand, from the wizard's real output.