Question to HTL or Sightly experts - What is wrong with the HTL expression "${'{0}' in title ? title @ format=currentPage.parent.title : title}"?

Avatar

Avatar

Sravan_Kumar_Si

Avatar

Sravan_Kumar_Si

Sravan_Kumar_Si

04-12-2020

model.title contains one of the two values - "Back to {0}" or "Back"
<sly data-sly-test.title="${model.title}"/> 

<a>${'{0}' in title ? title @ format=currentPage.parent.title : title}</a>

 

Neither

${'{0}' in title ? title @ format=currentPage.parent.title : title}

nor

${'{0}' in title ? (title @ format=currentPage.parent.title) : title}

gives the expected result. What is the correct way?

Accepted Solutions (1)

Accepted Solutions (1)

Avatar

Avatar

Anudeep_Garnepudi

MVP

Avatar

Anudeep_Garnepudi

MVP

Anudeep_Garnepudi
MVP

04-12-2020

Hi @Sravan_Kumar_Si 

I would suggest if you already have a support script(Sling Model or Use API), better write logic in the script itself like below. This will make you view simple ans clean.

Support Script:

model.title = title.contains("{0}") ? title.replace("{0}", currentPage.parent.title) : title; (JavaScript Use API example, you can try similar in Java Use API or Sling Model)

HTL:

<a>${title}</a>

-AG

Answers (3)

Answers (3)

Avatar

Avatar

Anudeep_Garnepudi

MVP

Avatar

Anudeep_Garnepudi

MVP

Anudeep_Garnepudi
MVP

04-12-2020

Hi @Sravan_Kumar_Si 

  1. We can not use options(@) in ternary operator which will results to an Exception (<a>${'{0}' in title ? title @ format=currentPage.parent.title : title}</a>)
  2. Even if you use if use it at the end, it will be ignored an @option will always execute <a>${!('{0}' in title) ? title : title @ format=currentPage.parent.title}</a>

If you want to do it from view(HTL), the best option is having two expressions

<a>${'{0}' in model.title ? model.title : "" @ format=currentPage.parent.title}  ${!('{0}' in model.title) ? model.title : ""}</a>

If you want your view(HTL) to be simple and more readable, as I mention earlier write the logic in support script.

Hope you got the Answer.

-AG

 

Avatar

Avatar

KiranVedantam1992

Avatar

KiranVedantam1992

KiranVedantam1992

04-12-2020

Hi @Sravan_Kumar_Si,

 

Here is the working code:

 

<sly data-sly-test.title="${model.title}"/> 

<a>${'{0} in title' @ format= currentPage.getParent.getTitle ? currentPage.getParent.getTitle : title} </a>

 

Put the {0} and the other strings in single quotes.

 

Thanks,

Kiran Vedantam.

Avatar

Avatar

Manjunath_K

MVP

Avatar

Manjunath_K

MVP

Manjunath_K
MVP

04-12-2020

Hi @Sravan_Kumar_Si 

Please use the below mentioned format option syntax.

 

<sly data-sly-test.containsText="${'{0}' in title}">
     ${title @format = currentPage.parent.title}
</sly>

 

<sly data-sly-test="${!containsText}">
     ${title}
</sly>

 

Hope this helps!