arrow-down
    1. Overview
    2. Core concepts
    3. Using docs
    4. Intro Videos
    5. Tutorials
    1. Intro
    2. GraphQL API
    3. Media API
    4. Extending the API
    5. Component API
    1. Content Studio
      1. Branches
    2. Layers
      1. Lifecycle
      2. Media
      3. Attachments
      4. X-data
        1. Page templates
        2. Fragments
      5. Variants
      6. Permissions
      7. Versions
    3. Sites
      1. Visual editor
    4. Publishing
    1. Introduction
      1. Controllers
      2. Globals
      3. Events
      4. HTTP Request
      5. HTTP Response
      6. Error handler
      7. Filters
      8. Templating
      9. Localization
      10. Websocket
      11. Tasks
      12. Main controller
      13. Java bridge
      1. Admin Lib
      2. Application Lib
      3. Auditlog Lib
      4. Authentication Lib
      5. Cluster Lib
      6. Common Lib
      7. Content Lib
      8. Context Lib
      9. Event Lib
      10. Export Lib
      11. Grid Lib
      12. I18N Lib
      13. IO Lib
      14. Mail Lib
      15. Node Lib
      16. Portal Lib
      17. Project Lib
      18. Repo Lib
      19. Scheduler Lib
      20. Schema Lib
      21. Tasks Lib
      22. Value Lib
      23. VHost Lib
      24. Websocket Lib
    2. Other Libraries
      1. CLI
      2. Sandboxes
      3. Code
      4. Building
      5. Configuration
      6. TypeScript
    3. Building APIs
      1. Mappings
      2. Components
      3. Processors
      4. Contributions
    4. Building Webapps
      1. ID providers
      2. Admin Apps
      3. Admin Widgets
    1. Architecture
      1. TODO
      1. Navigating
      2. Users
      3. Applications
      4. Data management
      5. System info
      6. Audit Logs
      7. Task management
      1. Portal
      2. IDprovider
      3. Management
      4. Statistics
      1. Nodes and repos
      2. Properties
      3. Indexing
      4. Branches
      5. Editors
      1. DSL Queries
      2. NoQL Queries
      3. Filters
      4. Aggregations
      5. Highlighting
      1. ID providers
      2. System ID provider
      3. Users and groups
      4. Roles
      1. Strategies
      2. Distributions
      3. Docker
      4. Kubernetes
      5. Systemd
      6. Vhosts
      7. Configuration
      8. Backup & restore
      9. Clustering
      10. Observability
      1. Notes
      2. Upgrade
      3. Upgrading Apps
        1. Asset service
        2. HTTP service
        3. Image service
    1. Best practice
        1. AttachmentUploader
        2. Checkbox
        3. Combobox
        4. ContentSelector
        5. ContentTypeFilter
        6. CustomSelector
        7. Date
        8. DateTime
        9. Double
        10. GeoPoint
        11. HtmlArea
        12. ImageSelector
        13. Long
        14. MediaSelector
        15. Radiobutton
        16. Tag
        17. TextArea
        18. TextLine
        19. Time
        1. Field set
        2. Item set
        3. Option set
      1. Mixins
      2. Localization
      3. Styles
    2. Content Types
    3. X-data
    4. Macros
      1. Pages
      2. Regions
      3. Part component
      4. Layout component
      5. Text component
      6. Component Filtering
      7. Component Indexing
    1. Marketplace
    2. Market guidelines

Site engine

Contents

The Site engine enables development and delivery of content driven web apps AKA sites.

Sites vs webapps

Sites are essentially content driven webapps. This means that URLs and the content within the application can be controlled by non-technical editors. In XP this boils down to a mapping between content (from the Content API) and a controller. Unlike webapps, sites do not have a default controller.

Another important difference from webapps is that sites may be powered by multiple apps. The apps may even collaborate on processing and responding to a single request. Similar to webapps, sites also enable developers to take control over URL patterns when needed, through filters and mappings (as described below).

For more details on building site specific applications, check out the CMS documentation.

Endpoint

The site engine is responsible for processing of requests on the endpoint :8080/site/<project>/<branch>/*. <project> and <branch> refer to CMS specific projects and branches, for instance :8080/site/default/draft

Request pipeline

The site pipeline is executed as a subset of the common pipeline:

Site rendering pipeline

This section describes the standard pipeline involved in processing a page request i.e. :8080/site/<project>/<branch>/<path-to-page>.

Mappings

Uses path and content based mappings from site descriptor to trigger filters and controllers

Page resolver

Looks up content in path, and resolves its controller + config (optionally via page template).

For two content types Page resolver does not resolve any controller. - For base:shortcut the referenced content path is returned with status code 307 Temporary Redirect. - For portal:fragment controller is not applicable. A fragment is rendered directly.

For the rest of content types controllers are considered in the following order:

  • Controller that is set directly on content.

  • Controller that is set on a page template for content. If set page template is unavailable (i.e. deleted), Page resolver considers it as if page template was not set.

  • Controller that is set on the first found page template (in {site}/_templates folder) that supports content’s content type.

If no controller is found, response status code is set to 404 Not Found.

In inline rendering mode response status code is set to 418 instead of 404, so Content Studio can switch to alternative rendering. In edit rendering mode status code is 200 instead of 404 to allow Content Studio to render in-place Controller selector.
Page renderer

Resolves controller and optional configuration (could also come from page template).

  • If controller is missing, returns 404 (Not found)

  • If controller exists, executes it and returns 200 (OK) by default. Output may potentially include component placeholders

Component renderer

For text/html responses, any component placeholders in the response body are processed. Each component’s controller is executed and the output replaces the component placeholder in the response body. Layouts components may leave new placeholders, as such, this step will be repeated until no placeholders remain to be processed.

Response processors

For text/html responses, any response processors defined in the site descriptor will be executed. Processors may manipulate the result, for instance by adding pageContributions

Contributions filter

For text/html responses, any pageContributions in the response object will now be merged into the response body.

Response filters

Any filters registered through a mapping may now execute their final processing before the response is returned from the pipeline.

Image service

Requests for the _/image/ URL pattern activate the image service, which will process and return images on demand.

Component service

Requests for the _/component/ url pattern trigger direct access to the component service, enabling direct HTTP request processing on a single component. This is effectively a subset of the site engine itself.


Contents

Contents

AI-powered search

Juke AI