Hi all,
I would like to generate script element in sightly as shown below and I've sightly list which gives me name & text.
---- SIGHTLY LOOP---
<sly data-sly-list.page="${testModel.faqs}">
name: ${page.name}
text: ${page.text}
</sly>
-------------------------------------
EXPECTED OUTPUT:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
{
"@type": "Question",
"name": "How long does it take to process a refund?",
"acceptedAnswer": {
"@type": "Answer",
"text": “description goes here”
}
}, {
"@type": "Question",
"name": "What is the policy for late/non-delivery of items ordered online?",
"acceptedAnswer": {
"@type": "Answer",
"text": “description goes here”
}
}]
}
</script>
Could you please help how can we integrate sightly list inside script ?
Solved! Go to Solution.
Views
Replies
Total Likes
@SonuR1 You can try something like:
1. Write logic in sling Model and generate JSON the way you want.
public String generateJSON(List<Page> faqs) {
JSONArray faqSchemaObject = new JSONArray();
try {
for(Page pagBean : faqs){
JSONObject faqItemObject = new JSONObject();
faqItemObject.put("@type","Question");
faqItemObject.put("name",pageBean.getName());
JSONObject answer = new JSONObject();
answer.put("@type","Answer");
answer.put("text",pageBean.getText());
faqItemObject.put("acceptedAnswer",answer);
faqSchemaObject.put(faqItemObject);
}
} catch (JSONException e) {
e.printStackTrace();
}
return faqSchemaObject.toString();
}
2. In sightly something like:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": ${ modelobjet.jsonObject }
}
Hope this should help you.
@SonuR1 I don't think you can do this way, as aem is strict xss enabled. What you can do is generate that json object in a sling model and just print a getmethod of sling model in sightly once.
@SonuR1 You can try something like:
1. Write logic in sling Model and generate JSON the way you want.
public String generateJSON(List<Page> faqs) {
JSONArray faqSchemaObject = new JSONArray();
try {
for(Page pagBean : faqs){
JSONObject faqItemObject = new JSONObject();
faqItemObject.put("@type","Question");
faqItemObject.put("name",pageBean.getName());
JSONObject answer = new JSONObject();
answer.put("@type","Answer");
answer.put("text",pageBean.getText());
faqItemObject.put("acceptedAnswer",answer);
faqSchemaObject.put(faqItemObject);
}
} catch (JSONException e) {
e.printStackTrace();
}
return faqSchemaObject.toString();
}
2. In sightly something like:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": ${ modelobjet.jsonObject }
}
Hope this should help you.
Yes it worked, thanks.
@SonuR1 We hope you found the AEM community valuable. We anticipate your return as either a learner or a contributor. The community benefits from SMEs like you. Please ask your AEM peers to join and contribute. Happy AEM learning!
Views
Replies
Total Likes
Views
Likes
Replies