se7enxweb / sevenx-themes-media
7x Themes : Media - the 'media' site design for Exponential Legacy / Exponential 6, converted from the Netgen media-site Twig theme and now hand-maintained as native eZ4 templates, with the sevenxThemesMediaOperators template operators and siteaccess-scoped theme settings.
Package info
github.com/se7enxweb/sevenx_themes_media
Language:JavaScript
Type:ezpublish-legacy-extension
pkg:composer/se7enxweb/sevenx-themes-media
Fund package maintenance!
Requires
- php: ^8.0 || ^8.1 || ^8.2 || ^8.3 || ^8.4
Requires (Dev)
None
Suggests
- se7enxweb/explayouts: Renders the layout/zone/block structure the theme's explayouts templates are written for
- se7enxweb/expsite-api: Provides the expSiteAPIContent / expSiteAPILocation value objects the theme operators resolve
- se7enxweb/expsite-data-media: Ships the media-site content model and data this theme renders
Provides
None
Conflicts
None
Replaces
None
- dev-main
- v1.5.96
- v1.5.95
- v1.5.94
- v1.5.93
- v1.5.92
- v1.5.91
- v1.5.90
- v1.5.89
- v1.5.88
- v1.5.87
- v1.5.86
- v1.5.85
- v1.5.84
- v1.5.83
- v1.5.82
- v1.5.81
- v1.5.80
- v1.5.79
- v1.5.78
- v1.5.77
- v1.5.76
- v1.5.75
- v1.5.74
- v1.5.73
- v1.5.72
- v1.5.71
- v1.5.70
- v1.5.69
- v1.5.68
- v1.5.67
- v1.5.66
- v1.5.65
- v1.5.64
- v1.5.63
- v1.5.62
- v1.5.61
- v1.5.60
- v1.5.59
- v1.5.58
- v1.5.57
- v1.5.56
- v1.5.55
- v1.5.54
- v1.5.53
- v1.5.52
- v1.5.51
- v1.5.50
- v1.5.49
- v1.5.48
- v1.5.47
- v1.5.46
- v1.5.45
- v1.5.44
- v1.5.43
- v1.5.42
- v1.5.41
- v1.5.40
- v1.5.39
- v1.5.38
- v1.5.37
- v1.5.36
- v1.5.35
- v1.5.34
- v1.5.33
- v1.5.32
- v1.5.31
- v1.5.30
- v1.5.29
- v1.5.28
- v1.5.27
- v1.5.26
- v1.5.25
- v1.5.24
- v1.5.23
- v1.5.22
- v1.5.21
- v1.5.20
- v1.5.19
- v1.5.18
- v1.5.17
- v1.5.16
- v1.5.15
- v1.5.14
- v1.5.13
- v1.5.12
- v1.5.11
- v1.5.10
- v1.5.9
- v1.5.8
- v1.5.7
- v1.5.6
- v1.5.5
- v1.5.4
- v1.5.3
- v1.5.2
- v1.5.1
- v1.5.0
- v1.4.0
- v1.3.0
- v1.2.1
- v1.2.0
- v1.1.1
- v1.1.0
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
This package is auto-updated.
Last update: 2026-11-11 15:38:02 UTC
README
General description
7x Themes: Media (extension directory: sevenx_themes_media) provides the
media site design for Exponential 6 / eZ Publish Legacy: the Netgen
media-site theme, originally written in Twig, converted to native eZ4
.tpl templates and now hand-maintained — every template under
design/media/templates/ is first-class source code, not build output.
Important — the converter is retired. The templates were originally produced by a Twig-to-TPL conversion script (
ai/bin/convert_media_site_twig.pyin the project tree). That script is retired and must never be run again: the templates have since received extensive hand fixes, and a re-run would destroy them. Edit the.tplfiles directly.
Note on the name. Owner decision: while sibling extensions were renamed to the
exp*prefix, this extension deliberately keeps thesevenx_themes_medianame. Do not rename it; these7enxweb/composer vendor namespace is likewise correct and stays.
This extension implements a complete front-end theme and provides the following capabilities:
- The
mediadesign — ~426 hand-maintained templates (pagelayout, content views, layout/zone/block templates, parts, forms, modules, emails), stylesheets, javascript and SASS sources. - The
sevenxThemesMediaOperatorstemplate-operator class — 54 operators emulating the Twig functions/filters the templates were converted from. - The
sevenxThemesMediaFieldfield wrapper value object returned by thengsiteglobals. - Siteaccess-scoped settings that configure the design chain, ~166
template override rules, image aliases, theme asset lists and the
content root for the
sevenx_site_usersiteaccess.
Features
7x Themes: Media provides the following features:
The media design (design/media/)
templates/pagelayout.tpl+pagelayout/— page shell, header, footer, breadcrumbs, head links/meta/title.templates/content/— node/view templates selected through the shippedoverride.inirules (full_*,embed_*, line/listitem/card view types) pluscontent/parts/fragments (full_header, full_image, full_body, ...).templates/explayouts/—layout.tpl,zone.tplandblock/templates rendered by theexplayoutsengine. These block templates are hand-authored and are what actually renders page content.parts/,pages/,forms/,modules/,emails/,error(s)/,user/,themes/— supporting views.stylesheets/+javascript/— the compiled theme assets loaded via[MediaTheme];sass/nexus/holds the SCSS sources they were built from.- Files ending in
.tpl.offerare staged variants not yet adopted; the active file is the one without the suffix.
Template operators
54 operators registered via autoloads/eztemplateautoload.php and
activated by [TemplateSettings] ExtensionAutoloadPath[]=sevenx_themes_media, including ngsite, app,
exponential, path, content_link, image, ng_image_alias, intro,
title, enhanced_link, embed_image, component_content,
content_tags, ng_query, ng_render_field and ng_view_content — the
full annotated list is in doc/USAGE.md.
Siteaccess configuration (auto-provided on activation)
[DesignSettings] SiteDesign=mediawith the fallback chainstandard,simple,ezwebin,base.[TemplateSettings] ExtensionAutoloadPath[]=sevenx_themes_media— registers the template operators.design.ini [StylesheetSettings]: themediapagelayout loads the theme's own stylesheets (listed inpagelayout/head/style.tpl) and then everyCSSFileList[]andFrontendCSSFileList[]entry other extensions add, in one packed bundle;MediaReplacedCSSFileList[]names the entries the theme replaces and never loads (see doc/USAGE.md).- ~166
override.inirules mapping content classes to the design'sfull_*/embed_*/ng_*view templates. - The full
image.inialias list the templates request (small,medium,large,listitem,i160,i480,logo,billboard, ...). content.ini[NodeSettings] RootNodepointing at the media-site content root shipped byexpsite_data_media.
Key classes and parts
| Part | File | Purpose |
|---|---|---|
sevenxThemesMediaOperators |
autoloads/sevenxthemesmediaoperators.php |
Template operators (ngsite, intro, image, enhanced_link, content_tags, ... — full list in doc/USAGE.md) |
sevenxThemesMediaField |
autoloads/sevenxthemesmediaoperators.php |
Field wrapper value object returned by the ngsite globals |
| Operator registration | autoloads/eztemplateautoload.php |
$eZTemplateOperatorArray binding; activated via [TemplateSettings] ExtensionAutoloadPath[]=sevenx_themes_media |
The media design |
design/media/ |
~426 hand-maintained templates (pagelayout, content/, explayouts/, parts/, ...), stylesheets, javascript, sass sources |
| Siteaccess settings | settings/siteaccess/sevenx_site_user/ |
site.ini (design chain, operator autoload path, [MediaTheme] asset lists), override.ini (~166 template override rules), image.ini (alias list incl. i160/i480), content.ini (RootNode), design.ini |
| Global settings | settings/ |
design.ini.append.php (design source registration), image.ini.append.php (i160/i480 aliases), site.ini.append.php (intentionally contentless — see file comment) |
Version
- The current version of 7x Themes: Media is 1.0.0
- Last Major update: July 30, 2026
Copyright
- 7x Themes: Media is Copyright (C) 1998 - 2026 Exponential Foundation and 7x. All rights reserved.
- See: LICENSE.md for more information on the terms of the copyright and license
License
7x Themes: Media is licensed under the GNU General Public License.
The complete license agreement is included in the LICENSE.md file.
7x Themes: Media is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License or at your option a later version.
7x Themes: Media is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
The GNU GPL gives you the right to use, modify and redistribute 7x Themes: Media under certain conditions. The GNU GPL license is distributed with the software, see the file LICENSE.md.
It is also available at https://www.gnu.org/licenses/gpl.txt
You should have received a copy of the GNU General Public License along with 7x Themes: Media in LICENSE.md. If not, see https://www.gnu.org/licenses/.
Using 7x Themes: Media under the terms of the GNU GPL is free (as in freedom).
For more information or questions please contact info@se7enx.com
Requirements
The following requirements exist for using the 7x Themes: Media extension:
Exponential / eZ Publish version
- Make sure you use Exponential 6 (eZ Publish Legacy) or higher.
PHP version
- Make sure you have PHP 8.1 or higher.
Sibling extensions
explayouts— active; it renders the layout/zone/block structure, while this theme provides the matchingexplayouts/block templates.expsite_data_media— installed; it provides the media-site content model and data the theme renders (the shippedcontent.iniRootNodepoints at its data).expsite_api/expqueryclasses — where present, the operators resolveexpSiteAPIContent/expSiteAPILocationvalue objects transparently.
Image handling
- ImageMagick enabled in
image.iniso the theme's image aliases can be generated.
Installation
In short: copy or check out the extension into
extension/sevenx_themes_media and add the single bootstrap line to your
siteaccess settings —
[ExtensionSettings] ActiveAccessExtensions[]=sevenx_themes_media — listed
before more generic theme extensions. Everything else (design chain,
override rules, image aliases, [MediaTheme] asset lists, content root) is
auto-provided by the extension's own
settings/siteaccess/sevenx_site_user/ files. Then regenerate autoloads
and clear caches.
Note that the scoped settings only merge for a siteaccess literally named
sevenx_site_user; for another name, copy the scoped settings directory as
described in the install guide.
See INSTALL.md for the complete step-by-step activation, what is auto-provided, the different-siteaccess-name procedure and verification steps.
Usage
How a page renders
- The siteaccess design chain is
media→standard→simple→ezwebin→base(shippedsite.ini.append.php). override.ini(~166 rules) picks thefull_*/embed_*template for the content class being viewed.- Layout pages are resolved by
explayouts; its zones/blocks render throughtemplates/explayouts/and the hand-authored block templates. - The pagelayout loads the theme's stylesheets (
pagelayout/head/style.tpl) and then thedesign.iniCSSFileList[]/FrontendCSSFileList[]entries of other extensions, in one packed bundle; JSruntime.js,index.js,index-noncritical.js.
Template operators
sevenxThemesMediaOperators emulates the Twig functions/filters the
templates were converted from. Complete $Operators list:
absolute_url, app, asset, content_link, content_tags,
controller, tpl_block_template, layout_title, embed_image,
component_content, enhanced_link, fieldRelation, fieldRelations,
fieldValue, filterChildren, filterFieldRelationLocations,
filterFieldRelations, getParameter, get_netgen_open_graph,
hasField, hasParameter, haveToPaginate, exponential, exp_path,
exp_url, explayouts_render_result, explayouts_render_zone, image,
image_link, intro, item_content_link, item_image_link,
item_params, ng_image_alias, ng_query, ng_render_field,
ng_view_content, ngsite, ngsite_group_fields,
ngsite_language_name, ngsite_topic_path, pagerfanta, parameter,
parent, path, player, player_slide, poster, poster_slide,
redirect_to_site_root, render, render_esi, saveXML, title,
trans, exp_focal_point.
Deprecated aliases, still registered so that other designs keep working:
ibexa (now exponential), ibexa_path (exp_path), ibexa_url
(exp_url), nglayouts_render_result (explayouts_render_result) and
nglayouts_render_zone (explayouts_render_zone). Each runs the same code
as its new name. Likewise path('ibexa.url.alias', ...) and
asset(<id>, 'ibexa_file') are still understood next to exp.url.alias
and exp_file.
Highlights:
ngsite()— site-info globals (fields of theng_site_infoobject, wrapped assevenxThemesMediaFieldobjects);app()andexponential()provide request/root-location globals.path/exp_path/content_link/absolute_url/exp_url— URL generation from nodes, objects,expSiteAPIContent/expSiteAPILocationvalue objects or strings.image/ng_image_alias/poster— image alias URLs fromezimageattributes or alias handlers.exp_focal_point( $image, $alias )— the focal point an editor set on an image (Exponential 6.0.15 and later), asxandyin whole percent of what the alias shows, or false. The card, hero, gallery and slide templates print it asdata-focal-x/data-focal-y, andstylesheets/exp-focal-point.cssturns those intoobject-position, so an image cut byobject-fit: coverkeeps the chosen part in the frame. Without a focal point (or on an older kernel) nothing is printed.title/intro— teaser text.introreads onlyteaser_intro/full_intro(it never falls back todescription); pass an explicit field list as the third argument to intro from another field.ng_render_field/ng_view_content— attribute/content rendering.ng_query('subtree')— child fetch driven by the category'schildren_class_filter_include,page_limitandfetch_subtreefields.enhanced_link,embed_image,component_content— resolve imported references from the reference data set.content_tags— tags from the importedeztagslink tables.tpl_block_template,layout_title,item_params,redirect_to_site_root— layout-support helpers.- Compatibility no-ops that intentionally return an empty string:
pagerfanta,haveToPaginate,controller,render,render_esi,player,player_slide,poster_slide,ngsite_group_fields,ngsite_language_name,ngsite_topic_path,explayouts_render_result,explayouts_render_zone.
Image aliases
Shipped in settings/siteaccess/sevenx_site_user/image.ini.append.php
(plus i160/i480 globally in settings/image.ini.append.php):
| Alias | Geometry |
|---|---|
small |
100x160 scaledown |
medium |
200x290 |
large |
360x440 |
i160 |
160x106 scaledown |
i480 |
width 480 scaledown |
listitem, articleimage, articlethumbnail, gallerythumbnail, galleryline, imagelarge, rss, logo, infoboximage, billboard |
See the shipped image.ini |
Use them from templates via the shipped operators
(image( $field, 'i480' )) or the standard
attribute_view_gui/image_alias mechanisms.
Customization
All customization happens from outside the extension — do not edit the shipped templates or settings in place unless you are maintaining the theme itself. See doc/USAGE.md for the full guide to the three customization layers:
- Settings layer — the INI cascade: extend or replace the
[MediaTheme]asset lists, add or redefine image aliases, add or redefine template override rules, or point the theme at a different content root. - Template layer — the design override cascade: prepend your own design to the chain and shadow any shipped template at the same relative path.
- PHP layer — register your own operator class side by side, shadow an
operator name via autoload-path order, hand wrapped or raw
eZContentObject(TreeNode)values to the theme, or add new block types inexplayoutswith a matching template.
Documentation
| Document | Contents |
|---|---|
| INSTALL.md | Activation (ActiveAccessExtensions[]), what the siteaccess settings auto-provide, using a different siteaccess name |
| doc/USAGE.md | Template structure, the full annotated operator list, image aliases, and the settings/template/PHP customization layers |
| doc/FAQ.md | Common questions — including the extension name and the retired converter |
| doc/TODO.md | Honest, code-observed gaps |
| doc/SUPPORT.md | Support channels and security reporting |
| LICENSE.md | The complete GNU General Public License agreement |
Troubleshooting
Read the FAQ
- Some problems are more common than others. The most common ones are listed in doc/FAQ.md.
Use our support systems
- If you have any questions not handled by this document or the FAQ, or if you find a bug or defect, please report it to the 7x Themes: Media Issue Tracker. Include your Exponential and PHP versions, the siteaccess name, the template path involved and a URL that reproduces the rendering problem.
- If you discover a security issue, please responsibly report it privately by e-mail to info@se7enx.com instead of opening a public issue.
- Commercial support, custom development and hosting for Exponential installations are available from 7x: https://se7enx.com