Page tree
Skip to end of metadata
Go to start of metadata

Implementation ideas

What we have:

  • DeviceDetection which identifies the type of device with which the user is visiting the current page
    • Is done in the filter chain
    • Info is added to the aggregation state
  • Channels "A channel allows you to deliver the same content in a different format or deliver content that is exclusive to a particular type of visitor."
  • TemplateVariation that
    • "[..] can be used in a number of ways, for example to reformat content for devices like smartphones and tablets, or specific output for groups of logged in users."
    • See: Configuring variations in a page template

What we need:

  • Facet detector that adds one/or multiple facet(s) to the aggregation state (or request)
    • Should be chainable, i.e. multiple detectors can be in the filter chain depending on the needs (after/before cache)
    • Any amount of detectors can be present
    • get/setChannel in AggregationState should be deprecated and delegate to a "Channel" facet because it is actually just this  
  • Personalization-aware renderer that
    • Selects the appropriate subnode (page variant)
    • Wrapper that delegates to for example STKRenderer
  • UI Components to
    • Add/associate segments with a page (variant)
    • Create/edit segments
  • FacetManager / SegmentManager that can retrieve all available facets/segments

Sample Filter Chain & RenderingFilter details

  1. FacetDetector add facet to AggregationState or Request (possibly at different levels, i.e. before/after cache)
  2. Another FacetDetector adds more information
  3. In the RenderingFilter a ContentDecorator decides where to get personalized contents from (subnodes/mixins/properties) and wraps them
  4. AggregationState contains all facets relevant to the current rendering
  5. Renderer renders content
    1. TemplateVariationResolver resolves template configured for variant (see:  RenderableVariationResolver )
    2. DynamicContentElements are rendered by ComponentRenderer and are Facet/Segment-aware

Note: The AggregationState should only contain one specific facet (class) (i.e. channel, device, etc.) at the time.

Storage structure

How are page variants stored?
How should the difference to the "master page" be stored? As delta or as a ful copy?
How are segment-associations stored?


How are page variant handled during when activating contents/pages? tbd


Needed UX components

  • Tag selectors
  • Add audience (segment) / Choose audience (segment)
    • Create variant (adding an audience will implicitly create a variant of a page)
  • Audience/segment selector for
    • Pages
      • above green edit bar in Preview & Edit mode
        • to edit different page variants and their contents
        • to preview the different page variants (Selection will render "personalized" page)
      • in the dialog of page properties
        • to edit and compare values of page properties relevant for different segments
    • Components (for dynamic components)
      • What's the equivalent on component level? Seems to work differently in here (i.e. no preview, just visible in edit-mode)


What we need:

  • Dynamic components
    • components to be added to a page capable of displaying content targeted to different segments/audiences.


What are we caching and how?

Open Questions

Arch questions

  • How are facets stored and identified (JCR mixin)?
  • How do facets relate to tags/categories?
  • How are associations to facets stored in contents? (custom mgnl:facet property)
    • By identifier
    • By name
  • How/what are segments (reminder: a segment is actually a facet that may be just a combination of other facets) stored/managed in the system?
  • How many segments can a page variant be associated to? Just ONE or MANY?
  • How are page variants stored?
    • As subnode on the page node itself with a mixin.
    • Will we store a delta between master and variant page or will we store a full copy?
    • We need this for components/contents too
    • Syncing changes from master to variant: Meeting with Jan Schulte
  • Multi-tree vs. single-tree personalization (similar to i18n), do we support multi-tree? >> NO

UI questions

  • Tag selection clarification:
    • Tags (here: facets?) are selected and added in a separate dialog tab (no semantic layer for now)
  • Segment management app:
    • Could be content app that stores in JCR
  • Segment selector:
    • Creating a variant is not a separate action
    • Simplification
      • Adding an audience will automatically create a variant
    • Audience selector
      • In Preview mode it is sticky (it stays when switching to other page, even though it might not have a page variant)
      • In Edit mode it might disappear because on other pages there might not be a page variant
      • Dynamic Components have to be previewed in page preview modex
        • Marker (or somehow interface boolean isMarker()) interface to show special icon / highlight dynamicness
      • Page Properties Dialog won't have a switcher
        • Props of a variant are edited in edit mode of a page by switching to the audience and editing the page props. as before
      • Audience & Previev
        • If an audience(s) is(are) defined, we have (all of) them in the Preview


  • Wouldn't be handy for authors to be able to define new tags/categories right when they're tagging their content, instead of opening a new app separately, create the new category/tag and then back to the other app to use it?
  • No labels