3

On the content delivery side I have filtered my components using metadata query, and now I have a list of components that need to be displayed. To get from component to component presentation next step is to choose CT.

As CT Id's will be different across environments, I would like "not to hardcode" id, but instead find CT "by Name".

This is possible through OData

...odata.svc/Templates?$filter=PublicationId eq 5 and Title eq 'Top News'

so the question is, can it be done through API ?

5
  • It definitely can be done... Can't look it up now, don't we have a TemplateTitleCriteria or something like that?
    – Nuno Linhares
    Commented Mar 16, 2015 at 14:21
  • Can't do it. Tried to solve this for the DD4T Smart Target integration. Commented Mar 16, 2015 at 14:30
  • possible duplicate of How to get CT Title and custom metadata in DD4T for a DCP? Commented Mar 16, 2015 at 14:37
  • Hmm. I can get the list of Component Templates... but not their titles. OK, definitely jumped the gun on this one.
    – Nuno Linhares
    Commented Mar 16, 2015 at 15:02
  • @NunoLinhares: After trying couple of possible ways, I got solution to retrieve component templates by their titles. Commented Mar 16, 2015 at 15:23

1 Answer 1

6

After going through all possible API's, I got a solution to retrieve component template based on component template names.

Mainly you need to use ItemTitleCriteria to retrieving the component templates by names.

Thanks to @NickoliRoussakov for the clue given.

    using (ItemTypeCriteria mItemTypeCriteria = new ItemTypeCriteria(32))
    {
        using (ItemTitleCriteria mItemTitleCriteria = new ItemTitleCriteria("My Component Template"))
        {
            using (PublicationCriteria mPublicationCriteria = new PublicationCriteria(123))
            {
                AndCriteria mTitleCriteria = CriteriaFactory.And(mItemTypeCriteria, mItemTitleCriteria);
                AndCriteria mTemplateCriteria = CriteriaFactory.And(mTitleCriteria, mPublicationCriteria);
                Tridion.ContentDelivery.Meta.IItem[] result = new Query(mTemplateCriteria).ExecuteEntityQuery();

                if (result.Any())
                {
                    Tridion.ContentDelivery.Meta.IItem template = result.FirstOrDefault();
                    String templateTitle = template.Title;
                    String templateId = template.Id.ToString();
                }
            }
        }
    }

Note that above solution might have performance impact. Please test it throughly before using.

Better option would be, by maintaining Component Template ID's in a configuration file with all the required template id's according to the environment and retrieve the component presentations.

3
  • Yep. Take a look at this Q&A. It is basically the same question: tridion.stackexchange.com/questions/7762/… Commented Mar 16, 2015 at 14:38
  • @NickoliRoussakov: Thanks for the clue. To achieve OP criteria, we need to use ItemTitleCriteria Commented Mar 16, 2015 at 15:20
  • @Siva, it seems that ItemTitleCriteria is replacing missing TemplateTitleCriteria nicely. This is exactly what I need. Tnx Commented Mar 17, 2015 at 9:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.