You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Current »

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
    $webResourceManager.requireResource("info.magnolia.sys.confluence.artifact-info-plugin:javadoc-resource-macro-resources") RenderingFilter
    a
    $webResourceManager.requireResource("info.magnolia.sys.confluence.artifact-info-plugin:javadoc-resource-macro-resources") ContentDecorator
    decides where to get personalized contents from (subnodes/mixins/properties) and wraps them
  4. $webResourceManager.requireResource("info.magnolia.sys.confluence.artifact-info-plugin:javadoc-resource-macro-resources") AggregationState
    contains all facets relevant to the current rendering
  5. $webResourceManager.requireResource("info.magnolia.sys.confluence.artifact-info-plugin:javadoc-resource-macro-resources") Renderer
    renders content
    1. TemplateVariationResolver resolves template configured for variant (see: 
      $webResourceManager.requireResource("info.magnolia.sys.confluence.artifact-info-plugin:javadoc-resource-macro-resources") 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?

Activation

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

UI / UX

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)

Rendering

What we need:

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

Caching

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

Others

  • 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