Use GUI Extension to Solve for Content Re-Ordering

GUI Extension: Components Re-Ordering Dialog

  • SDL Best Practices recommend not localizing pages.
  • We originally used Container Components so that Editors can re-order components without needing page localization.
    • The use of Container Components introduced other issues as explained in this blog about Container Components.
    • The solution outlined below does not rely on containers.
  • SDL can store additional data on each component using Application Data. Application Data is applied to items across the blueprint and don’t require items localization.

Application Data to store components order

  • A GUI extension can update page application data to store components ordering.
  • Page Application Data is naturally local to each page
  • At publishing time, Application Data is also published within the page.
  • The Web Application can use the Page Application data to retrieve the components ordering and show them in the right order.

Known Issues

  • Where used does not show where the data has been localized and changed. Here are some possible solutions:
    • The GUI extension could flag these application data changes and display them back through the GUI
    • The GUI extension puts a component on the page with the ordering data and localize that component.
    • Where use functionality is extended to look for the page application data.

The diagram below shows how the components involved in the solution work together

fOeiCBr6oYK-

Problems with Container Based Content Model

Containers are a common approach when designing CMS content models. They allow Authors and Content Editors to organize content hierarchically. While containers allow contributors to group, reorder, and organize content easily, they also add a lot of dependencies to the content across the system.

Containers add complex scenarios for simple tasks, including:

  • Publishing
  • Delete + Unpublish + Localize + Unlocalize
  • Workflow
  • Translation

Effects of using a container model:

  • “Where Used” filters are used extensively
  • Large amount of content dependencies lead to performance issues
  • Large amount of content manager transactions while publishing to ensure content integrity lead to stability issues
  • Multiple Database Transactions during Publishing
  • Complex content unpublish and deletion
  • Complex Experience Manager implementations (Experience Manager is not designed to use Containers)

Content Integrity Example:

In the scenario below, Tridion will attempt to maintain content integrity by publishing all pages using component instances. This example would cause a link propagation issue if the following conditions were met:

  1. Text Block – With image component is published within a page
  2. Application Include Container component is published within a page
  3. Buttons Actions tray component is published within a page
  4. Button App Include is published within a page

containerImage

Quick Tip: Getting Audience Manager working in an MVC site for Web 8

I recently implemented an Audience Manager integration in a Web 8 DD4T (.NET) project. I was scratching my head for a long time about an error message that didn’t seem to make sense:

Unable to determine the current Publication. Please make sure the Ambient Data Framework is running, or configure a DefaultPublicationId in the cd_audience_manager_conf.xml configuration file

Continue reading

DXA Model Mapping Cheatsheet

I recently started working on a new project using the DXA. One of the site types was a rebuild; using an existing content model rather than creating schemas from scratch. Part of the DXA philosophy is to enable MVC developers to use simple view models which hide the complexity of the underlying domain (CM) model. This article shows some tricks you can use to do help take this approach. Its based on the .NET implementation but the same concepts should apply to the Java version.

Continue reading

Caching In: Revisiting Data Sharing across Templates

A while back I wrote a post on using Context Variables as a templating cache. When I came across some requirements to cache data between templates on a recent project I revisited this concept, but found some limitations with Context Variables which I had not realized before. As such I ended up implementing a different approach to caching

Continue reading

Custom Renderer – Index Keyword Key in SmartTarget

keywords in SmartTargetI found out how to use a new CM-side extension point today; Renderers. I had been struggling for a while with the fact that SmartTarget does not index the Keyword key – which was precisely what I wanted to set up some promotion content selection filters on. It turns out to be quite easy, and indeed gives a generic method for messing with the content that SmartTarget indexes without having to fiddle about on the Delivery side with Java or Kettle.

Continue reading

Intro to the Event System

rear-view-mirrorAn event, in any computer system, is an interruption in the current process. The computer is busy doing what it should be doing, and then something happens to stop it and send it in a different direction. In old systems this was limited to the user clicking a keyboard key or a mouse button. Now, with much more complex systems, it can include state changes, network events, new data, and nearly everything else. Continue reading

My first Alchemy Plugin

abort-publishing-iconSo I wanted to make a really simple Alchemy plugin to test out the amazing new SDL Web plugin store that my colleagues have been working on this year.  It’s a simple plugin where I inject a little bit of javascript into the publish dialog to permanently check the ‘Abort Publishing’ check-box button, but it’s a great learning experiment plus its a nice example if you’re looking to write a plugin that simply adds a bit of javascript or css etc.

Continue reading

SDL Web Design Pattern: “Slicing”

As a Tridion an SDL Web developer, you’ve very likely converted a single block of HTML design into appropriate Tridion Building Blocks. The idea of breaking a page into types of content, represented in Tridion as Component Presentations, is not new to you. But have you “sliced” a Component by sets of fields?

A few months back, Damian Jewett, explored the idea of multiple Template Layout Building blocks. I’m following up with a potential use case for this approach along with a parallel idea with Component Templates instead. We can call this slicing, where we have a consistently used subset of fields out of a collection of Component fields.*

*I first heard the term “slice,” in a slightly different context, from a French design agency after they learned how Tridion worked.

First read Damian’s post. Continue reading