Automatic Linking is Great When Making Links Automatically

When I explain Tridion dynamic linking, I sometimes get the "but I want to link to a specific page" response. See my post on how to understand dynamic linking from a manually-curated authoring view; otherwise read on to see how dynamic linking really shines when the links are created or otherwise generated automatically.

Here's a hypothetical scenario that I've worked through at an actual client with the team. In the end, we didn't need to implement this use case, but keep it in mind as an approach and example for dynamic linking.
  • The website has content that will be "tagged" with various topics (e.g. industries or interests)
  • These tags may apply to content on pages in different sections of the website
  • We want to display dynamically or generate a list of these topics such that each topic links to the content that matches in that section (let's assume one piece of content per topic, but this could be applied to many items)
How would you do this with Tridion?

The simple case of one dynamic display and a single set of content could be:
  • A Tridion Category called "Topic" lets CMS editors tag Components
  • Developers generate dynamic component links for the keywords so CMS editors don't have to do anything to get the list automatically aside from maybe placing a "widget" on a page (a Component Presentation that adds the server-side code for this functionality)
  • The widget would either generate the links on publish (template them) or pass the tag or control and parameters to the Web application (e.g. <somenamespace:tagorcontrolname topic="sometopic">)
  • Default delivery-side dynamic linking rules will resolve the links so that each Component + Component Template combination becomes a hyperlink on request
Now, what happens when you have another section in the website that uses the same topics, but with different destinations?

Options include:
  • Assume categories won't work. Manage these manually instead.
  • Use different Component Templates, so that one section resolves links to pages with its template. You might optionally use template priorities.
  • Leverage dynamic linking, by generating the Tridion Content Delivery Library (tcdl) tags or controls and letting dynamic linking proximity rules resolve these to the correct location.
With dynamic linking, you might have section-specific links for things like:
  • Help (with this topic, product, or section)
  • Support (for this department)
  • Map (for this region, as organized in structure groups)
Then using the proximity rules, if you don't have Structure Group specific pages for help, support, or the map, you would get the closest version. All you have to do is organize your pages from general at the higher levels to more detailed as you go into the Structure Groups. Based on what's published, when a visitor clicks on "Help," they'll the page for Help for that section (Structure Group), but if not available, they'll get a more general Help page. Based on parameters, the dynamic link could also disable the link and even hide the text if no pages are available with that content.

If making a manual link, from an editorial perspective you have to think in terms of "adding a link to my section's set of special pages." Just make sure these references are on your target pages as Component Presentations and maybe place them in a special "references" folder. But again, it's much better when it's automatic.

Anyways, knowing the proximity rules earned me a beer in Paris--use this knowledge to demonstrate your Tridion resolve at understanding Tridion resolving behavior (in delivery).

Oh and by the way, the dynamic linking proximity rules explain why Tridion cannot cache a dynamic link with an invalid page id. If you don't know where to start, how can you cache the destination for the next request?

Tridion Permissions Quick Check

As 2014 winds down, I'm revisiting the odd draft post left in my blogging queue. This one was a quick email answer to a colleague on how to troubleshoot not being able to read or see a folder in Tridion.

The first "gotcha" is we have two “inheritances” with folder permissions:
  • The settings from the item’s (BluePrint) parent, if any. These will match the shared, parent item if the item is not localized (i.e. shared from above).
  • The settings from the item’s in-context (same Publication) organizational parent. The "Inherit Security Settings from Parent"* checkbox in the folder’s permissions in properties control this. Removing this lets us change the permissions within that branch for the given Publication, which is then inherited down.

*Peter Kjaer explained the "Inherit Security Settings from Parent" is stored as "IsInheritanceRoot=false" and Dominic Cronin points out that you're responsible for managing the difference when you create such Inheritance Roots (good stuff, thanks guys). I'd say this is akin to localization where the flexibility's great, but has overhead costs in terms of maintenance for the variations.

Also when reviewing permissions, to double check:
  • Are the folders localized in any of the Publications?
  • Is the Inherit Security Settings from Parent setting set?
  • Click on Show Exceptions to see if anything else is explicitly restricted
  • Does the user or its groups have rights in the Publication?
The Show Exceptions feature is somewhat hidden (and probably for good reason--it's hard enough giving permissions and managing the results without also considering exceptions). 

Finally hiding folders users don't have access to is controlled by a server setting (in Tridion's MMC Snap In on the Content Manager server). Whether you choose this depends on what you value. Personally, I prefer hiding folders users don’t have access to—it makes it easier to choose and navigation from the given options. But I understand there’s a (possibly slight) performance impact because the system can’t simply show you all the folders at a given level. It must check each folder to know what to show.

My professional recommendation is to start with one approach or the other and adjust if one aspect hurts more (finding items, versus waiting for folders to appear). When in doubt, at least start with something.

SDL Tridion Reference Implementation Auto Documented

I've been working towards "automated" documentation for awhile and it's challenging to really show how the existing Tridion community tools work. The code and examples are easy enough to share, but it's hard to create full, working examples to run these tools against.

But since the Tridion Reference Implementation (TRI) is open source, here are two TRI "auto-documented" pieces and a bonus.

1. TRI Authorization

TRI's Organization and Authorization generated with my Tridion BA Toolkit core service program.

2. TRI Schemas

TRI's Schemas Exported with the Tridion Powertools 2013 (credit to colleague "Double-Oh" Stan with Contributions from Team PowerTools).

Note: I haven't run these against TRI, but Tridion Community MVP Pankaj Guar, just shared a Schema report generator.

3. Bonus: Cleaner Schema Designs

When I hear agile in a CMS project, I envision:
  • Content- and business-driven website design and development
  • Content Always, where content structure and meaning (dare I say semantics) drive the visitor experience
  • Rapid application prototyping (RAD is back!) in the back office (i.e. let's build Tridion Schemas, together!)
Instead what I see is:
  • Design-led requirements sometimes based on user stories, requirements, or user journeys (great to see in my more recent projects)
  • The back-office keeps up with changing front-end or application-side requirements, meaning:
    • BluePrint changes, sometimes involving scripts
    • Schema changes, sometimes involving scripts
    • Additional care with editor training and expectations
I also see customers know they don't or actually can't know the final solution. Proof-of-concepts, scoped builds, (and working closely with your vendor) are great ways to work out what actually works, especially if CMS is new for an organization.

So it's not so RAD and I don't always get to interactively design Schemas with the client. Instead, I've come up with a Spreadsheet for designing Tridion Web Schemas.

Now I just need a catchy meme that connects the New Year with this auto-documenting goodness... Creative laziness for the win? BAToolkit4Tridion--BAT4T? Functionally fit in 2015?