PHPackages                             se7enxweb/sevenx-themes-media - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. se7enxweb/sevenx-themes-media

ActiveEzpublish-legacy-extension

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.

10JavaScript

Since Jul 31Pushed yesterdayCompare

[ Source](https://github.com/se7enxweb/sevenx_themes_media)[ Packagist](https://packagist.org/packages/se7enxweb/sevenx-themes-media)[ RSS](/packages/se7enxweb-sevenx-themes-media/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

7x Themes: Media
================

[](#7x-themes-media)

General description
-------------------

[](#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.py` in 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 `.tpl` files directly.

> **Note on the name.** Owner decision: while sibling extensions were renamed to the `exp*` prefix, this extension deliberately keeps the `sevenx_themes_media` name. Do not rename it; the `se7enxweb/` composer vendor namespace is likewise correct and stays.

This extension implements a complete front-end theme and provides the following capabilities:

- The `media` design — ~426 hand-maintained templates (pagelayout, content views, layout/zone/block templates, parts, forms, modules, emails), stylesheets, javascript and SASS sources.
- The `sevenxThemesMediaOperators` template-operator class — 54 operators emulating the Twig functions/filters the templates were converted from.
- The `sevenxThemesMediaField` field wrapper value object returned by the `ngsite` globals.
- 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_user` siteaccess.

Features
--------

[](#features)

7x Themes: Media provides the following features:

### The `media` design (`design/media/`)

[](#the-media-design-designmedia)

- `templates/pagelayout.tpl` + `pagelayout/` — page shell, header, footer, breadcrumbs, head links/meta/title.
- `templates/content/` — node/view templates selected through the shipped `override.ini` rules (`full_*`, `embed_*`, line/listitem/card view types) plus `content/parts/` fragments (full\_header, full\_image, full\_body, ...).
- `templates/explayouts/` — `layout.tpl`, `zone.tpl` and `block/`templates rendered by the `explayouts` engine. These block templates are hand-authored and are what actually renders page content.
- `templates/nglayouts/`, `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.offer` are staged variants not yet adopted; the active file is the one without the suffix.

### Template operators

[](#template-operators)

54 operators registered via `autoloads/eztemplateautoload.php` and activated by `[TemplateSettings] ExtensionAutoloadPath[]=sevenx_themes_media`, including `ngsite`, `app`, `ibexa`, `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](doc/USAGE.md).

### Siteaccess configuration (auto-provided on activation)

[](#siteaccess-configuration-auto-provided-on-activation)

- `[DesignSettings] SiteDesign=media` with the fallback chain `standard`, `simple`, `ezwebin`, `base`.
- `[TemplateSettings] ExtensionAutoloadPath[]=sevenx_themes_media` — registers the template operators.
- `[MediaTheme] CSSFiles[]` (`explayouts.css`, `index.css`, `index-noncritical.css`) and `JSFiles[]` (`runtime.js`, `index.js`, `index-noncritical.js`) — the asset lists the `media` pagelayout loads.
- ~166 `override.ini` rules mapping content classes to the design's `full_*` / `embed_*` / `ng_*` view templates.
- The full `image.ini` alias list the templates request (`small`, `medium`, `large`, `listitem`, `i160`, `i480`, `logo`, `billboard`, ...).
- `content.ini` `[NodeSettings] RootNode` pointing at the media-site content root shipped by `expsite_data_media`.

### Key classes and parts

[](#key-classes-and-parts)

PartFilePurpose`sevenxThemesMediaOperators``autoloads/sevenxthemesmediaoperators.php`Template operators (`ngsite`, `intro`, `image`, `enhanced_link`, `content_tags`, ... — full list in [doc/USAGE.md](doc/USAGE.md))`sevenxThemesMediaField``autoloads/sevenxthemesmediaoperators.php`Field wrapper value object returned by the `ngsite` globalsOperator 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/`, `nglayouts/`, `parts/`, ...), stylesheets, javascript, sass sourcesSiteaccess 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
-------

[](#version)

- The current version of 7x Themes: Media is 1.0.0
- Last Major update: July 30, 2026

Copyright
---------

[](#copyright)

- 7x Themes: Media is copyright 1998 - 2026 7x
- See: LICENSE.md for more information on the terms of the copyright and license

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

You should have received a copy of the GNU General Public License along with 7x Themes: Media in LICENSE.md. If not, see .

Using 7x Themes: Media under the terms of the GNU GPL is free (as in freedom).

For more information or questions please contact

Requirements
------------

[](#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 matching `explayouts/` and `nglayouts/` block templates.
- `expsite_data_media` — installed; it provides the media-site content model and data the theme renders (the shipped `content.ini` `RootNode`points at its data).
- `expsite_api` / `expquery` classes — where present, the operators resolve `expSiteAPIContent` / `expSiteAPILocation` value objects transparently.

Image handling

- ImageMagick enabled in `image.ini` so the theme's image aliases can be generated.

Installation
------------

[](#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](INSTALL.md) for the complete step-by-step activation, what is auto-provided, the different-siteaccess-name procedure and verification steps.

Usage
-----

[](#usage)

### How a page renders

[](#how-a-page-renders)

1. The siteaccess design chain is `media` → `standard` → `simple` → `ezwebin` → `base` (shipped `site.ini.append.php`).
2. `override.ini` (~166 rules) picks the `full_*`/`embed_*` template for the content class being viewed.
3. Layout pages are resolved by `explayouts`; its zones/blocks render through `templates/explayouts/` and the hand-authored block templates.
4. The pagelayout loads the `[MediaTheme]` asset lists: CSS `explayouts.css`, `index.css`, `index-noncritical.css`; JS `runtime.js`, `index.js`, `index-noncritical.js`.

### Template operators

[](#template-operators-1)

`sevenxThemesMediaOperators` emulates the Twig functions/filters the templates were converted from. Complete `$Operators` list:

`absolute_url`, `app`, `asset`, `content_link`, `content_tags`, `controller`, `twig_block_template`, `layout_title`, `embed_image`, `component_content`, `enhanced_link`, `fieldRelation`, `fieldRelations`, `fieldValue`, `filterChildren`, `filterFieldRelationLocations`, `filterFieldRelations`, `getParameter`, `get_netgen_open_graph`, `hasField`, `hasParameter`, `haveToPaginate`, `ibexa`, `ibexa_path`, `ibexa_url`, `image`, `image_link`, `intro`, `item_content_link`, `item_image_link`, `item_params`, `ng_image_alias`, `ng_query`, `ng_render_field`, `ng_view_content`, `nglayouts_render_result`, `nglayouts_render_zone`, `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`.

Highlights:

- `ngsite()` — site-info globals (fields of the `ng_site_info` object, wrapped as `sevenxThemesMediaField` objects); `app()` and `ibexa()`provide request/root-location globals.
- `path` / `ibexa_path` / `content_link` / `absolute_url` / `ibexa_url` — URL generation from nodes, objects, `expSiteAPIContent` / `expSiteAPILocation` value objects or strings.
- `image` / `ng_image_alias` / `poster` — image alias URLs from `ezimage`attributes or alias handlers.
- `title` / `intro` — teaser text. `intro` reads only `teaser_intro`/`full_intro` (it never falls back to `description`); 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's `children_class_filter_include`, `page_limit` and `fetch_subtree`fields.
- `enhanced_link`, `embed_image`, `component_content` — resolve imported references from the reference data set.
- `content_tags` — tags from the imported `eztags` link tables.
- `twig_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`, `nglayouts_render_result`, `nglayouts_render_zone`.

### Image aliases

[](#image-aliases)

Shipped in `settings/siteaccess/sevenx_site_user/image.ini.append.php`(plus `i160`/`i480` globally in `settings/image.ini.append.php`):

AliasGeometry`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

[](#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](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 in `explayouts` with a matching template.

Documentation
-------------

[](#documentation)

DocumentContents[INSTALL.md](INSTALL.md)Activation (`ActiveAccessExtensions[]`), what the siteaccess settings auto-provide, using a different siteaccess name[doc/USAGE.md](doc/USAGE.md)Template structure, the full annotated operator list, image aliases, and the settings/template/PHP customization layers[doc/FAQ.md](doc/FAQ.md)Common questions — including the extension name and the retired converter[doc/TODO.md](doc/TODO.md)Honest, code-observed gaps[doc/SUPPORT.md](doc/SUPPORT.md)Support channels and security reporting[LICENSE.md](LICENSE.md)The complete GNU General Public License agreementTroubleshooting
---------------

[](#troubleshooting)

Read the FAQ

- Some problems are more common than others. The most common ones are listed in [doc/FAQ.md](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](https://github.com/se7enxweb/sevenx_themes_media/issues). 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  instead of opening a public issue.
- Commercial support, custom development and hosting for Exponential installations are available from 7x:

###  Health Score

21

—

LowBetter than 17% of packages

Maintenance65

Regular maintenance activity

Popularity2

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1083669?v=4)[7x](/maintainers/7x)[@7x](https://github.com/7x)

---

Top Contributors

[![se7enxweb](https://avatars.githubusercontent.com/u/51429274?v=4)](https://github.com/se7enxweb "se7enxweb (4 commits)")

### Embed Badge

![Health badge](/badges/se7enxweb-sevenx-themes-media/health.svg)

```
[![Health](https://phpackages.com/badges/se7enxweb-sevenx-themes-media/health.svg)](https://phpackages.com/packages/se7enxweb-sevenx-themes-media)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
