Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.
SOLVED

Page properties not producing output

Avatar

Level 3

I'm trying to get data from page properties into a data- attribute in the HTML, so I can access the data from front-end code. I've tried two styles of property name -- one "bare" name defaultTitle and one with a dot to help organize it, contact.defaultTitle -- and two styles of access, referencing properties and inheritedPageProperties. I've authored both properties and verified the keys & values in the JCR.

When I use data-sly-list to loop over both the properties and inheritedPageProperties, I see all the properties I expect, including my two title props.

But when I try to refer to the properties directly -- in an HTML attribute, or as the content of an HTML element -- only one of the four styles produces output. Why? 

 

Markup:

<div class="get-in-touch-form"
    data-default-titleIPropDef="inheritedPageProperties.defaultTitle: ${inheritedPageProperties.defaultTitle}"
    data-default-titleIPropContactDef="inheritedPageProperties.contact.defaultTitle: ${inheritedPageProperties.contact.defaultTitle}"
    data-default-titlePropDef="properties.defaultTitle: ${properties.defaultTitle}"
    data-default-titlePropContactDef="properties.contact.defaultTitle: ${properties.contact.defaultTitle}"
>
<pre>
'defaultTitle'
iprop default: ${inheritedPageProperties.defaultTitle}
 prop default: ${properties.defaultTitle}

'contact.defaultTitle'
iprop default: ${inheritedPageProperties.contact.defaultTitle}
prop default: ${properties.contact.defaultTitle}
</pre> <h3>inheritedPageProperties</h3> <ul data-sly-list.iprop="${inheritedPageProperties}"> <li>iprop ${iprop} - ${inheritedPageProperties[iprop]} ;</li> </ul> <h3>properties</h3> <ul data-sly-list.prop="${inheritedPageProperties}"> <li>prop ${prop} - ${inheritedPageProperties[prop]} ;</li> </ul>

Output (I removed all the properties produced by the loop except the ones in question; the entire list of properties renders correctly):

<div class="get-in-touch-form" 
    data-default-titleIPropDef="inheritedPageProperties.defaultTitle: Winnie the Pooh" <-- OK
    data-default-titleIPropContactDef="inheritedPageProperties.contact.defaultTitle: " <-- MISSING
    data-default-titlePropDef="properties.defaultTitle: "                              <-- MISSING
    data-default-titlePropContactDef="properties.contact.defaultTitle: "               <-- MISSING
    data-page-title="WorkLife at Irvine Towers®" foo="bar">

<pre>
'defaultTitle'
iprop default: Winnie the Pooh  <-- OK
 prop default:                  <-- MISSING

'contact.defaultTitle'
iprop default: <-- MISSING
prop default: <-- MISSING
</pre> <h3>inheritedPageProperties</h3> <ul> <li>iprop defaultTitle - Winnie the Pooh ;</li> <-- OK <li>iprop contact.defaultTitle - And Tigger, Too! ;</li> <-- OK </ul> <h3>properties</h3> <ul> <li>prop defaultTitle - Winnie the Pooh ;</li> <-- OK <li>prop contact.defaultTitle - And Tigger, Too! ;</li>. <-- OK </ul>

 

1 Accepted Solution

Avatar

Correct answer by
Level 3

So I had a syntax error, and an error in my test harness. It turns out both inheritedPageProperties and pageProperties work, as expected. 

When I referenced the property contact.defaultTitle, I just added that string to the container name, e.g. pageProperties.contact.defaultTitle -- but the dot is an operator in that context. To treat it as part of the property name, I needed to address it in bracket notation: pageProperties['contact.defaultTitle']

The other error was simply a copy/paste bug in the test markup; I used the same global in both cases.

View solution in original post

4 Replies

Avatar

Employee Advisor

Please make use of global sightly object: pageProperties

This will return you the properties relevant to the page where you are having the markup/ component.

 

Refer this tutorial : https://www.youtube.com/watch?v=GEiGIAgV0NY

for more understanding on global objects in sightly.

 

Avatar

Level 3

Thanks for the video link -- I normally don't like them for documentation but this one is short, to the point and has clear explanation and examples.

Avatar

Correct answer by
Level 3

So I had a syntax error, and an error in my test harness. It turns out both inheritedPageProperties and pageProperties work, as expected. 

When I referenced the property contact.defaultTitle, I just added that string to the container name, e.g. pageProperties.contact.defaultTitle -- but the dot is an operator in that context. To treat it as part of the property name, I needed to address it in bracket notation: pageProperties['contact.defaultTitle']

The other error was simply a copy/paste bug in the test markup; I used the same global in both cases.