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

CMS developer FAQ

For CMS developers, short answers to the questions developers ask in their first weeks with Exponential. They cover the model, templates, caches, APIs, multisite, the product family and the project, each with a link to…

Download as PDF

Address: https://doc.exponential.earth/learninminutes/exphelp/viewer/help/cms-developers/cms-developer-faq.md

On this page

CMS developer FAQ

This page is for developers new to Exponential who want quick answers. Each answer is short and points to the page that has the whole story.

Warning

.htaccess slows down every request. When .htaccess files are enabled (AllowOverride anything but None), let alone used, Apache looks for them and reads and evaluates them on every request, in every directory of the path, and page loading times go up drastically (measured). The only real fix is to switch the feature off for the virtual host: AllowOverride None in the HTTPS virtual host, and the rules in the virtual host's own configuration as mod_rewrite rules. That is far faster in production speed tests and well worth the time it takes to optimize a production configuration. Switch over right away: copy the rules of the example HTTPS virtual host into your virtual host (with the static cache, also staticcache_offload.conf), set AllowOverride None, run apachectl configtest, reload Apache and test the site. The same rules for other servers: nginx, LiteSpeed, Caddy, IIS, Velocity (built in); where virtual host rules go in a control panel: Plesk, cPanel, DirectAdmin, ISPConfig. On LiteSpeed or OpenLiteSpeed, the server's own page cache can also answer anonymous visitors and crawlers without PHP: Page caching with LiteSpeed and OpenLiteSpeed.

Contents

  1. The model
  2. Templates and caches
  3. Code and APIs
  4. Sites and servers
  5. The project

The model

What is the difference between a node and an object? The object is the content, with its versions and translations; a node is a place of that object in the tree. One object can have several nodes; one of them is the main node. A page view shows a node. Objects, nodes and locations.

Where do I define content types? In Setup > Classes (/class/grouplist). Carry them to other installations in packages. Creating a content class.

Can I change a field's type later? Not directly: add a new attribute, copy the values with a script, remove the old one. Content classes and attributes.

Is there a "repeater" field? No nested repeater datatype. Use child objects of a small class, ezmatrix for small tables, or Layouts blocks. Mapping content to Exponential.

How do I make an area for members only? A section on the subtree and a role with content/read on that section, assigned to the members' group. Sections, roles and policies.

Templates and caches

My template change does not appear. Why? A cache holds the old output or lookup: the template override cache for new files and rules, the view cache, or Velocity's response cache. Caching for CMS developers and Why doesn't my change appear?.

Which template draws this part of the page? Turn on ShowUsedTemplates and ShowTemplatePathComments on a development machine. Templates and overrides for CMS developers.

Can I write PHP in templates? No. Templates call fetch functions and operators; write an operator or a fetch function in your extension when you need more. Extensions you will write.

Templates or the Layouts editor? Templates for every page of a class; Layouts for pages editors compose. They combine through template blocks. Layouts for CMS developers.

Code and APIs

How do I create content from code? eZContentFunctions::createAndPublishObject() and updateAndPublishObject(), with a remote ID per object. Content from PHP.

Is there a REST API? Yes: the ezprestapi extension serves v1 and v2 routes for nodes, children and fields, with creates and removals at v2; authentication by personal API key or OAuth2. Updates answer 501 for now. The REST API.

Is there GraphQL? Not in Exponential 6. The Exponential Platform line, on the Symfony stack, has it. Headless delivery.

Where do hooks go? Workflow events on triggers, event listeners in site.ini [Event], or template operators, depending on the need. Workflows and triggers, Extension points at a glance.

Can I import a CSV? Yes: xrowextract, with a dry run by default, or the kernel's simple ezcsvimport. Importing content.

Sites and servers

Can one installation run several sites? Yes, through siteaccesses sharing one database and tree. Siteaccesses and multisite.

Which web server should I use? Exponential Velocity is the recommended engine; FrankenPHP is the production-ready alternative; Apache or nginx with PHP-FPM work too. Deploying a site.

Which PHP and databases? PHP 8.0 to 8.5 (PHP 7.4 usable without support) per the root composer.json. Databases in the project's order of preference: SQLite 3, PostgreSQL, MongoDB, MariaDB, Oracle, MySQL. Database support, Requirements.

How do I create .htaccess and config.php? ./console exp:setup:htaccess --apply copies .htaccess_root (with --static: .htaccess_root_static), and ./console exp:setup:config --apply copies config.php-RECOMMENDED. Without --apply they only show what they would do, and an existing file that differs is shown as a diff and kept unless you add --force. Setting up .htaccess and config.php from the console.

How do I change a config.php setting without an editor? ./console exp:config:set EZP_INI_FILEMTIME_CHECK false --apply: the file is backed up, checked with php -l and written in one step. exp:config:list shows every documented setting, exp:config:get <NAME> one value, and exp:config:unset <NAME> --apply comments it out again. Setting up .htaccess and config.php from the console.

How do I start a project fast? exp:install with the default sevenx_multisite package on SQLite, then your own extension. Development environment.

The project

Who leads Exponential? 7x, the company that leads it, and the Exponential Foundation, the nonprofit. Exponential is not associated with eZ Systems or Ibexa. Who is 7x?, Who is the Exponential Foundation?.

What is the history? Exponential continues the code of a product that its creator discontinued after almost 18 years; 7x has published the 6.0.x releases since 2024. Exponential for CMS developers.

What license? The kernel is GPL 2.0 or later (root composer.json); this documentation is free under the GNU FDL 1.3. Free documentation.

Where do I ask? Asking the community.

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