Multi-Channel Content Visibility
Define contexts — domain, GET parameter, IP range, HTTP header, session value, or a logical combination — and switch pages, menu entries, and single content elements on or off per context. One page tree, many channels.
No Duplicated Page Trees
Editors maintain one page and mark per context where it appears, instead of keeping a parallel tree per channel in sync by hand.
Six Context Types
Domain, GET parameter, IP range, HTTP header, and session value, plus a combination type that joins them with AND, OR, and NOT.
Enforced In The Query Layer
Visibility is applied as a Doctrine query restriction, so restricted records never reach the rendering stage — not in menus, not in listings, not in search.
Cache-Aware
The active context combination is part of the page cache identifier, so each channel gets its own cache entry instead of the first-rendered variant being served to everyone.
Live demo
A context of type GET parameter named "Demo channel" matches when nrdemo=mobile is present. The two blocks below sit on this very page:
- Open /extensions/contexts — the default channel block is rendered.
- Open /extensions/contexts?nrdemo=mobile — the mobile channel block replaces it.
Default channel
You are seeing the default channel variant. This element has the "Demo channel" context set to disable, so it disappears as soon as nrdemo=mobile is present.