Site bundles, metadata and the Twig tools of the platform
This page is for developers who build or extend a Nexus site on Exponential Platform. These packages are the building blocks Nexus sites are made from. You normally do not install them by hand; the Nexus distribution requires them. Knowing what each does tells you where to look when a site behaves unexpectedly: a menu, a query type, a layout block or a legacy mapping is usually in one of them.
Repositories: se7enxweb/site-bundle, se7enxweb/site-legacy-bundle, se7enxweb/ngsymfonytools,
se7enxweb/metadata-bundle, se7enxweb/mediata-ezpage-fieldtype-bundle, se7enxweb/ez-support-tools.
What each package gives a site
| Package | What it gives a site |
|---|---|
se7enxweb/site-bundle (fork of Netgen Site Bundle) | The common features Netgen builds sites on: Menu, Layouts integration, ContentForms, InfoCollection, OpenGraph metadata, Pagerfanta paging, QueryType for content queries, RichText rendering, Relation and Topic helpers, an Imagine integration for image variations, a ContextProvider (which part of the tree is the site), a data collector for the debug toolbar, console commands. Not for standalone use; it is the base bundle of a project. |
se7enxweb/site-legacy-bundle | Glue between the new and the legacy kernel for Netgen style sites running with the legacy bridge: legacy mapper, templating, event listeners, and an ezpublish_legacy directory with the legacy extension. Admin copyright templates carry the Exponential branding since 2026-04-17. |
se7enxweb/ngsymfonytools | A legacy extension: template operators that let an Exponential .tpl template call Twig and Symfony |
se7enxweb/metadata-bundle | The metadata (SEO) field type for the platform, data compatible with the xrowmetadata legacy extension, so the same field and the same stored data work on the legacy kernel and on the new stack. Release v5.0.0 adds Ibexa 5.x and PHP 8.4 support. |
se7enxweb/mediata-ezpage-fieldtype-bundle | The page (landing page) field type for Ibexa 4, imported on 2026-03-16 as tested for 4.6, with a Twig operator so plain Symfony projects can use it |
se7enxweb/ez-support-tools | The system information page for administrators (PHP, Composer packages, platform versions). Fixed in April 2026 so a null version from InstalledVersions::getVersion() no longer breaks the page. |
The se7enxweb packages replace the upstream names through Composer replace declarations. site-bundle declares
netgen/site-bundle:* as replaced (commit of 2026-04-19, release 3.0.6), so a project cannot end up with both the
fork and the upstream copy installed side by side. See the
upgrade notes.
Call Twig from a legacy template
With ngsymfonytools active, a legacy .tpl can include a Twig template or render a Symfony controller.
Activate the extension (admin: Setup, Extensions; or in
settings/override/site.ini.append.php):[ExtensionSettings] ActiveExtensions[]=ngsymfonytoolsRegenerate the autoload array (admin: Setup, Extensions, "Regenerate autoload arrays"; or run the legacy script
bin/php/ezpgenerateautoloads.phpthroughexponential:legacy:script).Include a Twig template:
{symfony_include( 'AppBundle:Test:test.html.twig', hash( 'theAnswer', 42, 'homepage', fetch( 'content', 'node', hash( 'node_id', 2 ) ) ) )}
Operators (from the extension's usage guide):
| Operator | Purpose |
|---|---|
symfony_include( template, hash ) | Include a Twig template; eZContentObject and eZContentObjectTreeNode parameters are converted to platform Content and Location objects |
symfony_path( route, hash ) | Relative URL of a route |
symfony_url( route, hash ) | Absolute URL of a route |
symfony_controller( controller, hash, hash ) | Reference to a controller (use inside symfony_render) |
symfony_render( ... ) | Render a controller, path or URL in the legacy template |
symfony_render_esi( ... ), symfony_render_hinclude( ... ) | Emit an ESI or Hinclude tag for a controller or URL |
Changes in 2026: the operator no longer uses the templating service that Symfony 5 removed (2026-04-05); it asks the
container for the twig service. On 2026-04-16 it briefly used the Twig\Environment::class id and went back to
twig the same day, because the legacy bridge release v5.0.9 makes the twig service public (its TwigPass calls
setPublic(true)), so legacy code can fetch it again. A class_alias at the top of the content converter keeps the
old repository interface name working on Ibexa DXP 4.x and 5.0.
Limits
site-bundleandsite-legacy-bundleare not standalone: they need a project built on the Nexus pattern.- The metadata field type needs the platform kernel. On the legacy kernel use the
xrowmetadataextension, which writes the same data.
Related pages
- Extension pages: ngsymfonytools, ez-support-tools, xrowmetadata
- Platform features: Nexus starter, legacy bridge, platform administration interface, DXP skeleton, Layouts on the platform, PHP 8.5 framework forks, SQLite for Exponential Platform, AdminNeo database manager
- Specifications: platform package map, legacy bridge bundle, platform console command names, platform SQLite installer
- Upgrade notes: package forks and command renames
- Changelog: platform changelog
- History: site-bundle, site-legacy-bundle, ngsymfonytools, metadata-bundle, mediata-ezpage-fieldtype-bundle-main, ez-support-tools, ecosystem overview, ecosystem months, change ledger
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.