Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

When settings are not enough: from builder to extension developer

How to tell that a requirement needs code, and which extension point fits: a table from need to mechanism (operator, fetch function, module, datatype, event, cronjob, listener, handler) and its RAD wizard.

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/extension-development/part-2-builder/when-settings-are-not-enough.md

On this page

When settings are not enough: from builder to extension developer

Part 2, chapter 22, the last of this part. Builders can do a great deal without PHP. This chapter helps you see the point where code is the better tool, and which of the kernel's extension points fits the requirement, so your first PHP is small and in the right place.

Signs that a template is doing a program's job

  • A template has more {if}, {set} and arithmetic than HTML.
  • The same twenty lines of template logic appear in several templates.
  • You fetch hundreds of nodes to compute one number.
  • You need data that is not content: an external service, a file, a calculation, a database table of your own.
  • Something must happen without a page view: at publish time, at night, on a schedule.

From symptom to mechanism

You needMechanismPart 3 chapterRAD wizard
A value or transformation in templates ({$price|mysite_tax})template operatorTemplate operators/setup/templateoperator
A list or object that fetch() cannot expressfetch functionFetch functions/setup/templateoperator
A page with its own address, a form, a reportmodule and viewModules and views/setup/moduleextension, /setup/modulewizard
A new kind of field for editorsdatatypeDatatypes/setup/datatype
A step around publishing that can wait or askworkflow eventWorkflow event types/setup/workflowevent
Something on a schedulecronjob partCronjob parts/setup/cronjobs
A command for administratorsconsole commandCLI scripts and console commands
A reaction to a kernel event, or a filter of a valueevent listenerEvents, listeners and filters/setup/settingsextension
A different mail transport, login, session, search, VAThandler named by a settingHandlers named by settings/setup/handlerextension/<kind>
A dynamic part of a page from JavaScriptezjscore server functionAjax with ezjscore server functions/setup/handlerextension/ajaxfunction
Your own tablepersistent objectPersistent objects and your own tables/setup/modulewizard
To change a kernel class's behavior and nothing else workskernel overrideKernel class overrides: the last resort/setup/kerneloverride

The RAD catalogue at /setup/rad lists every extension point with the same information; this table is the short version.

Prefer the lightest mechanism

  1. A setting.
  2. A template or an override.
  3. An operator or a fetch function (pure functions, easy to test).
  4. A listener or a handler (registered by a setting, replaceable).
  5. A module, a datatype, a workflow event (more code, more surface).
  6. A kernel override (last).

Each step up adds code you maintain at every upgrade. Choose the lowest step that meets the requirement.

Before you write code: look for it

The extension you need may exist: check the extensions on your disk, the se7enxweb catalogue, Exponential Projects and GitHub. An operator for string replacement, a tags field, a sitemap: all exist already.

Your first PHP

Start with Part 3: The extension developer and the tutorials: the smallest extension takes five minutes, and a template operator is a good first piece of code because it is small, pure and visible at once.

Become an Exponential Partner

Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.

Something wrong on this page? Report an error

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