Welcome to eZpedia!

The free eZ Publish encyclopedia that anyone can edit. eZpedia has accumulated 722  english articles since 2006. We encourage you to create an account and create or edit a page yourself. Some folks create an article in the people namespace with their full name as the article name with a brief description of who they are, their interests, goals and objectives.

Ask A Question

Do you have an eZ Publish question, do you need an eZ Publish answer? Simply login and ask your question in our discussion forum. We publicly write free documentation based on your submissions. Posting on eZpedia is a great way to get answers you need and contribute to our freely available community documentation for eZ Publish.

Chat with other eZ Publish Developers LIVE from around the World!

Ecosystem

Read about what is going on within the various eZ Publish related websites on internet.

Recent development activity

Track the development progress through the roadmap by reviewing recent Exponential Git activity from the github repository.

github.com/ezsystems/ezpublish-legacy commit log rss feed
Last updated: 2026-09-14T16:06:42Z
2026-09-14T16:06:42Z
Added: Added the settings, extension root and siteaccess customisation points that arrived with 6.0 to the RAD catalogue, the survey and the settings wizard.

Reading the last three releases back, six extension points had been added to
this system and written down nowhere the RAD tools could see them: additional
extension roots and the filter hook behind them, the site extension pattern
those make possible, extension resident icon themes, the Redis and Valkey cache
hooks, and writing settings from code now that a direct access write keeps the
comments of the file it edits.

Two of those are now written by the settings wizard as well as documented. It
declares a second extension root and leaves a note in it saying what the root
is for, how shadowing works, and why nothing should ever build a path out of
extension/ and a name again. And it writes an icon theme: the ini that makes a
directory a theme, a size directory per size with a file in it so the directory
survives being copied, and an icon.ini that adds the theme to the search rather
than making it current - so everything the site already draws keeps drawing.

The survey was looking at the wrong tree. Its sweep for places the kernel
searches knew five variable names and not the ones added since: it could not
see AdditionalExtensionDirectories, IconExtensions or ActiveAccessExtensions,
which is to say it could not see the newest extension points at all. It now
finds 1027 points where it found 924.

AdditionalExtensionDirectories was in the API, in the tests and in a document,
and in no ini file on this installation - so nobody would find it by reading
the configuration, which is how everything else here is found. settings/site.ini
now carries it, declared empty and documented, which changes no behaviour: the
roots resolve to extension alone exactly as before.

One fault found while writing it: the wizard was taking the leading slash off
an absolute path rather than refusing it, so /etc was quietly read as a request
for ./etc. A typo should not become a root nobody meant.
2026-09-14T15:49:24Z
Added: Added a module wizard, so every one of the forty eight written extension points now has a tool behind it.

A module is three things that have to agree with each other - a declaration, a
script per view, a template per view - plus the two ini lines that make the
kernel look for any of it. When they disagree the failure is quiet: a view with
no script is a blank page, a view naming a policy no module declares can be
reached by nobody, and a module the ini does not list is not there at all. The
wizard writes all of it from one line per view, and refuses the third of those
by name rather than letting it be discovered later.

Views are described in the shape eZ already uses: a word in lower case is a
policy, a word starting with a capital is a parameter in the address, and a
capital word ending in a question mark is a named parameter that may be left
out. The page shows the address each view will answer at as it is typed.

The suite writes the module to disk, hands it to eZModule, and checks the
kernel accepts it, finds every view, and runs one - rather than only checking
that the file it wrote parses.

Forty eight of forty eight. The survey beside the list still counts nine
hundred and twenty four points on this installation, which is the honest
number; the forty eight are the ones worth explaining.
2026-09-14T15:40:53Z
Added: Added a content extension wizard that writes a content class as a script rather than as an afternoon of clicking, and renamed the copyright holder to 7x / Exponential Foundation.

A content class built in the admin exists on the machine it was built on and
nowhere else, and the only record of how it was made is whatever somebody wrote
down. Written as a script it is reviewable, re-runnable, and the same on every
installation it is run on. The same extension carries custom tags for rich text
and a translation file, because all three are about the content rather than
about the machinery under it.

Two faults in the generated script, both found by running it rather than by
reading it. eZContentClass::fetchByIdentifier() answers null and not false when
there is no such class, so the guard meant to stop a second run was true every
time and the script would never have run at all - and the page refused every
identifier for the same reason. And the class has to be built as temporary and
promoted at the end: storeDefined() recreates the class group links from the
version before it, so a group added to a class that is already defined is wiped
by the very call meant to finish it, leaving a class that exists and appears
nowhere.

The suite now runs the script it writes, checks the class, its attributes, its
flags and its group are really there, runs it a second time to see it refuse,
and takes the class away again.

Forty five of the forty eight written points now have a tool.
2026-09-14T15:28:39Z
Added: Added a settings extension wizard, and a login handler to the handler wizard, taking the written points with a tool to forty one of forty eight.

A good deal of what this system can be told to do differently is told in
settings rather than in code. None of it is hard; all of it is in a shape
nobody remembers, spread over half a dozen files, with a rule about where the
file has to live for anything to read it at all. The new wizard writes six of
them: image aliases with their filters, event listeners with the class behind
them, view cache clearing rules, what happens when a visitor fills in a form,
which operations a workflow may be bound to, and settings that apply to one
siteaccess only.

It refuses to redefine an image alias the site already has, because writing one
again does not add it - it replaces it, and every image served through it
changes size without anything saying so. It writes AliasList[] and
Listeners[] and AvailableOperationList[] as additions rather than as
replacements, because a bare Key[] line above any of those would throw away
what the kernel said and unbind content_publish, silence every listener, or
leave every template asking for an alias that no longer exists.

The login handler is the same shape as the notification ones: the class name,
the file name and the ini value are all worked out from one word, and a handler
whose three names disagree is reported missing while the default quietly
answers instead. Its examples lead on failing closed, because a handler that
lets people in when the directory it asks is unreachable is a site opened by an
outage.
2026-09-14T15:12:29Z
Updated: Updated the extension surface survey to tell an alias from a broken registration, so sixteen healthy settings stop being reported as faults.

Several of these settings take an alias rather than a class name, and the two
cannot be told apart by looking at the setting - only by looking at the value.
Every class in this system has a capital in it somewhere and every alias is one
lower case word, so a lower case value naming no class is an alias doing its
job rather than a registration nobody wired up.

That takes this installation from seventeen apparent faults to one: an
ExchangeRatesUpdateHandler set to eZECB, which is shaped like a class and is
in fact an alias for eZECBHandler. Being told about that one is the point; being
told about the other sixteen was noise.
2026-09-14T15:09:46Z
Added: Added a survey that reads this installation's extension surface off disk, because forty eight written points is not the size of eZ Publish.

The RAD tools page lists what somebody thought to write down. This lists what
is actually here, and on this installation that is nine hundred and twenty one
points: three hundred and sixty seven settings across three hundred and eighty
one ini files whose value names a class, ninety eight directories the kernel
searches for a handler, forty one interfaces and abstract classes declared for
somebody else to implement, and four hundred module views across fifty seven
modules. It is read fresh on every request, so an extension installed this
morning is in it this afternoon and nothing in it can go stale.

It reads without loading. Nothing in it calls class_exists, interface_exists or
reflects on anything: a class name is resolved through the autoload maps
instead. That is not tidiness - the first version used class_exists and was
brought down by one installed extension whose class php refuses, which is
exactly the sort of thing a survey ought to be able to report rather than die
of. It now reports seventeen settings on this site that name a class nothing
declares.

Two parsing faults found while building it and fixed: a bare Key[] line, which
is how eZ says "forget what anything before said about this array", was being
skipped, so every unfilled handler directory was missing; and a module was
being identified by the title it declares for people to read rather than by
its directory, so the list agreed with nothing else in the system.

The page can be searched and paged, and the whole thing is also written out to
doc/bc/6.0/rad-extension-surface.md.
2026-09-14T14:56:31Z
Updated: Rewrote the two RAD tools that had stood unchanged since 2003, so each writes a working extension rather than handing back one php file.

The datatype wizard asked four questions and downloaded a class. eZDataType
declares over ninety methods and which of them a datatype needs depends
entirely on what it is for, so the page now asks what it has to do - editing,
class settings, searching, sorting, files, information collection, packages,
diffs, relations, cleanup, batch initialisation and the rest - and writes only
the methods that answer to that, each with a note saying what the kernel calls
it for. It also writes the templates, which the old one did not: a datatype
whose templates cannot be found loads, registers, appears in the class editor
and draws an empty field. That is what the design.ini it now writes prevents.

The template operator wizard asked five questions and ignored three of them -
the input, output and parameter answers were overwritten with constants before
the file was generated, so every operator it ever produced had the same shape.
In its place is a template extension wizard covering all four things a
template can be taught to call: operators, functions, fetch functions and
fetch aliases, in any mixture, with the registration each needs. Registration
is where this usually goes wrong, and the tool now says so: an operator lives
in an autoload array rather than an ini, and being active is not the same as
being in ExtensionAutoloadPath.

Both carry worked examples and both are covered by suites that load the class
they wrote, parse the ini they wrote with the real ini reader, compile the
templates they wrote, and run the generated operator through the template
engine.

Three catalogue entries were wrong and are corrected: the datatype one named
the wrong ini, the operator one claimed an ini registers the class, and a
template function was missing as a point of its own. Thirty four of the forty
eight extension points now have a tool.

Recent discussions

Read what others are discussing

Recently updated articles

Read recently modified articles

ezpedia.org updated content rss feed
  1. eZ : Main page
  2. Solution : Read-only site
    • @5 | 2025/01/25 @ 17:17:56 : Graham Brookins : History - based on version 4, republishing in attempt to regain example settings display
  3. Solution : Reseting the admin password in eZ publish
    • @15 | 2024/10/25 @ 21:09:06 : Graham Brookins : History - based on version 14 added missing comma to example copy and paste code.
  4. Learning : Extensions
  5. Learning : Standard Events
  6. Learning : Standard Triggers
  7. Learning : A workflow
  8. Learning : Events
  9. Learning : Workflow
  10. Learning : Roles
  11. Learning : Policies
  12. Learning : User Groups
  13. Learning : Site Access
  14. Learning : Design Structure
  15. Learning : Default Design
  16. Learning : Access Control
  17. Learning : Designs
  18. Learning : Template Override System
  19. Learning : Pagelayout.tpl
  20. Learning : Custom System Templates