Content Bloom Experience

Tridion and PHP Don’t Mix
…or Do They?
• Using PHP and Dynamic Publishing, the
considerations and the limitations of using
PHP via OData v.s. .NET or Java.
• I will show some sample code and discuss the
kind of TCDL handlers that need to be
developed, and the difficulty/ease of doing so.
About Us
• A lot of credit goes to Jon Primmer for getting much of the
technical detail
• Feel free to reach out:
– Jon Primmer: @jonnybeemud ; [email protected]
– Nick Roussakov: @nroussakov ; [email protected]
Why PHP, all of a sudden?
We recently had a few customers request Tridion integrations with their PHP front-end
PHP is free and has a plethora of open-source products starting to seep into the enterprise. For
Magento e-comm platform
CodeIgniter MVC framework
Has frameworks to do just about everything (even LINQ -
PHP version 5.3 has very robust OOP capability
Coding PHP doesn’t suck any more.
Eclipse with IntelliSense works great
So how do you integrate a PHP solution
with SDL Tridion?
• Our first thought: “Static Publishing”
– Render any kind of text file and place it on the host server.
– Get creative with “include” files.
• For example, a Page in Tridion with a set of Component Presentations published as an
“include” file gives another level for nesting Component Presentations.
• What if we need to have the ability to target content based on, say,
taxonomy (keywords or custom metadata)?
– Have taxonomy-driven navigation
– Quicker (more efficient) way to update and publish content
– Share published content from a single source
• … and so we explore Tridion’s Dynamic Content Delivery
Dynamic Content Delivery Options for
non-Java/.NET Web Apps
• Traditionally, Tridion’s Dynamic Delivery was
available for Java and .NET -based applications
• This meant having to create a custom wrapper
around the Java or .NET APIs
• With SDL Tridion 2011 a new Content Delivery
Web service is available (a.k.a. Tridion Odata)
• (There is also REL)
"You mean I finally have frickin'
sharks with frickin' laser beams
attached to their frickin' heads?"
Odata Sample Output
Consuming the Dynamic Content
• In our page template we frequently use this code:
• When the output format and delivery target
language are set to REL, we get the following on our
php page:
Consuming the Dynamic Content (cont.)
• All we need now is a Tridion Building Block that will catch this
during publishing and replace it with PHP code to call oData
Optimizing oData Calls
• Odata querying just the right amount of data:
– Does filtering via LINQ require sending too much across the wire (e.g.
/ComponentPresentations returns all the CPs from the Broker and filtering on
application side)?
• No. See
• What about with Java or PHP?
– Need to fine-tune our Odata queries using $filter, $expand
– E.g. Get Component Presentations where CustomMeta key = “foo”, such that
the fewest number of HTTP Requests go out.
• The answer: caching
– Tridion’s Cache Channel Service on top of oData
– A caching appliance
– Application-level caching, e.g. CodeIgniter Cache
Make the Odata Query as Drilled Down as
QueryOne: ComponentPresentations based on component custom meta field
QueryTwo: All custom meta of componet presentations based on a specific template
-----------------localhost:82/odata.svc/ComponentPresentations?$filter=TemplateId eq 666 and publicationId eq
Sample Output
What About Add-on Modules and
• Tridion Experience Manager (the new SiteEdit)
• Profiling and Personalization
• Fredhopper
Tridion Experience Manager
• The staging site runs in an iFrame, so technically it can
be on any language platform (PHP, python, whatever)
• The caveat is Session Preview, which requires the
staging site to be able to run Java (Content Delivery API
and Ambient Data Framework jars).
– Possible to run PHP on a Java App server, e.g.:
– Tomcat AJP Connector:
– or PHP to Java Bridge:
– This is still in experimental stages
Profiling and Personalization
• Tridion offers the ability to set up Target
Groups based on keyword tracking and other
• Unfortunately this requires storing cookies on
the client machine. The Contenet Delivery
Web Service can’t do that.
• Good news: we can build our own…
Profiling and Personalization
• A custom TCDL handler can be created to translate the target
group syntax into PHP code, which talks to the Broker
• SmartTarget is the product that integrates
Fredhopper with Tridion.
• The Ambient Data Framework is used in between
• For PHP integration, a custom solution can be
built on top of Fredhopper’s web service APIs.
• Probably can’t make it as good as SDL’s ADF, but
possible to make it good-enough for the
immediate functionality required.
• Questions?
About Content Bloom
• Offices in Toronto, Brussels and UK
• Certified SDL Tridion consultancy and partner
• Strong knowledge and deep roots within the
SDL Tridion product suite

similar documents