I use Display Templates for rendering ContentBySearchWebPart. Nice feature, but how I can add custom properties from search results list item into Display Template?

For example, I have a template, some_listitem_template.html:

var line1 = $getItemValue(ctx, "Line 1");
var line2 = $getItemValue(ctx, "Line 2");
var line3 = $getItemValue(ctx, "Line 3");

for (var p in ctx.CurrentItem)
    console.log(p + ":" + $getItemValue(ctx, p));

<div class="news-date">_#= line3 =#_</div>
<div class="news-title">
   <a href="_#= linkURL =#_" title="_#= $htmlEncode(line1.defaultValueRenderer(line1)) =#_">_#= line2 =#_</a>

And I have Property Mapping declaration string <mso:ManagedPropertyMapping msdt:dt="string">'Link URL':'Path','Line 1':'Title','Line 2':'Description', 'Line 3':'Created'</mso:ManagedPropertyMapping>

But these properties (Description and Created) is always empty. Debug information from console.log show me that ContextItem has a pretty small collection of properties:

Title:Some title
RenderTemplateId:~sitecollection/_catalogs/masterpage/Display Templates/Search/Item_Default.js

Suppose its because Search Configuration, but where is this place exactly?

  • Great question, i would love to know the answer as well - fighting with it at the moment – Andrey Nov 19 '13 at 20:34
  • I don't fully undestand how is this mechanism works eventually, but right now I'm using fields with names CommentsOWSMTXT and ArticleStartDateOWSDATE for my purposes. These fields is indexed and mapping to ordinary Article Content Type columns and Display Tempalte works just fine. – unknownexception Dec 6 '13 at 10:28
  • how are you deploying that display template? I had the same issue as you do, and turns out I had to specify some extra stuff in element.xml. Let me know if that's the case – Andrey Dec 11 '13 at 19:04
  • What extra stuff are you talking about? Any examples? At the moment we are not using any *.wsp packages at all. In my case it's only a client-side SharePoint development (like masterpages, styles, layouts, displaytemplates, javascript libs) using Node.js and deploy process is as simple as copying *.html files via grunt deploy. Take a look, for example generator-sp2013. – unknownexception Dec 12 '13 at 2:40

Things to check:

  1. Go to /_catalogs/masterpage and find your displaytemplate's js file. View its properties and make sure you see the mappings in question in Managed Property Mappings property.
  2. Go to Centra Admin -> Manage Service Applications -> Search Application and look at your schema - make sure that Description and Created are existing managed properties and tehy have corresponding crawled properties.
  • I would add a 3rd step, which would be check in the .html file. after numerous failed attempts, it just so happen to work immediately after I checked in the file. I was seeing the updated changes (saving .html saves .js automatically) but the fields were empty – Tiago Duarte Apr 4 '19 at 16:34

One other thing to check, if you are using result types to display items:

Go to /_layouts/15/manageresulttypes.aspx?level=sitecol at the site collection level, and /_layouts/15/manageresulttypes.aspx?level=site at the site level, and click update if there is a property sync warning.

enter image description here This needs to be done every time the mappings are changed in the template

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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