The biggest "gotchas" I've had with an R5.3 to 2011 upgrade were mostly on the Content Manager side. Definitely follow the other answers for ways to confirm your final presentation-side markup, but be sure to test and synchronize your CMS-side components manually or with code.
Issues the community's helped me with:
- CM-side: Image References change, mainly for XSLT Component Templates
- CM-side: XSLT Rich Text Filter namespace change (making content "disappear")
- CD-side: Content Delivery (CD) storage (broker) database update and the impact on the CD API
These were specific to an XSLT CT with ASP.NET setup and may not apply to all upgrades.
Image References (just via XSLT CTs)
This seems to apply more if using now-legacy XSLT component templates.
- SDL Tridion R5.3, image tags in rich text fields were "available" to XSLT templates as:
<img xlink:href="tcm..." title="" alt=""/>
.
- SDL Tridion 2011 requires XSLT templates to look for a "src" attribute instead:
<img src="tcm..."/>
.
Compound Component Templates don't need changes as they seem to still use the previous xlink:href
format.
Read more about the differences on SDLTridionWorld (requires login)
XSLT Rich Text filter
It seems like SDL Tridion 2011 added a new (or changed the default) namespace for the rich text filters, specifically: http://www.sdltridion.com/ContentManager/R6
.
However we need all nodes to have: http://www.w3.org/1999/xhtml
. You can add this namespace manually to XHTML nodes in the XSLT filter, but one work-around that worked for a R5.3 to 2011 GA upgrade was to add xmlns="http://www.w3.org/1999/xhtml” in the schema's rich text filter as another attribute.
Before:
<tcm:FilterXSLT xmlns:tcm="http://www.tridion.com/ContentManager/5.0">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform”>
After:
Save & Close after you get the following, then open and save components based on the schema to confirm the fix.
<tcm:FilterXSLT xmlns:tcm="http://www.tridion.com/ContentManager/5.0">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" >
Jaime Santos Alcón added additional steps in this forum post(requires login). Specifically, he added the xhtml namespace to each paragraph node.
Quote:
<xsl:variable name="xhtmlns">http://www.w3.org/1999/xhtml</xsl:variable>
<xsl:element name="p" namespace="{$xhtmlns}">
<xsl:apply-templates mode="copy"></xsl:apply-templates>
</xsl:element>
R&D has since updated the XSLT rich text filter to fix other issues (e.g. a difference in how the enter key was interpreted), so disregard if you don't see this issue.
Warning: as with any rich text XSLT filter change, double check the changes before applying this to live content. Some content and changes might seem okay, but test a variety of nodes as well as nested nodes before changing content porting your schemas to production.
CD storage and API change
At least in R5.3, custom meta in the broker database were stored as comma-separated string in the database. This let you do Custom Broker queries with some SQL (as a string in code). 2011 doesn't allow these queries (and they wouldn't work against the new database format anyways); instead 2011 uses Criteria Filters such as:
CustomMetaValueCriteria value = new CustomMetaValueCriteria(new CustomMetaKeyCriteria("city"), "San Diego");
If you use the CD API, you probably already noticed the change. It's just worth noting a Tridion upgrade isn't just functionality and infrastructure; be sure to check any presentation-server code.
Update:
We've seen performance-related issues when setting up Criteria Filters as described below. Basically use CustomMetaValueCriteria()
to do key=value type filters; avoid using ANDs, especially followed by an OR, when matching multiple key=value filters.
Bad, serious performance impact
This looks for (States AND All) OR (States AND California). It's wrong, don't do this.
CustomMetaKeyCriteria key = new
CustomMetaKeyCriteria("states");
CustomMetaValueCriteria value = new
CustomMetaValueCriteria("* All States");
CustomMetaValueCriteria value2 = new
CustomMetaValueCriteria("California");
AndCriteria first = new AndCriteria(key,
value);
AndCriteria second = new
AndCriteria(key,value2);
OrCriteria orCriteria = new
OrCriteria(first, second);
Correction for the AND
The AND is actually the wrong approach when dealing with custom metadata keys that have multiple values.
CustomMetaKeyCriteria key = new
CustomMetaKeyCriteria("Destination");
CustomMetaValueCriteria value = new
CustomMetaValueCriteria("Lisbon");
AndCriteria notreallyamatch = new AndCriteria(key, value); // this isn't always correct
Better, if trying to match key and value
CustomMetaValueCriteria value = new
CustomMetaValueCriteria(new
CustomMetaKeyCriteria("somekeyname"), "specficvalue");
Summary
By opening (maybe tweaking content by adding a space) and saving components, you'll manually synchronize them. This will help confirm:
- XSLT rich text filters match your expectations.
- Images are saved in the latest format.
You'll then want to confirm the the template code runs against updated content, either by previewing in the CME or following the recommendations in the other answers. If not using XSLT CTs, then focus on the rich text filters, template output, and any CD API code you might have.