Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

SOLVED

Checking an url if it contains specific text

Avatar

Level 2

There is a requirement in our project where i have to check if the current page path contains a specific text or not. How to write sightly code for this.

 

for ex:- <sly data-sly-test.pagepath=${currentPage.path}/> 

this will returns path as "/content/project/ab/cd/home/" now i want to check if it has " /cd/ " text in it.
Thanks in advance.

Topics

Topics help categorize Community content and increase your ability to discover relevant content.

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

Hi @sai_santhosht50,

HTL is for direct mark up rendering only. For any manipulation or conditional checks like this has to be done either in Use JS(make use of currentPage or request implied objects and "includes" javascript function for contains check) or Sling Model/WCMUsePojo.

 

View solution in original post

9 Replies

Avatar

Community Advisor

The sightly does not support this, you need to write java code, refer below link for writing the sling model

http://www.aemcq5tutorials.com/tutorials/adobe-aem-cq5-tutorials/sling-model-sightly-aem/

1. your class adaptable from SlingHttpServletRequest

2 add the following inject 

@inject

private Page currentPage;

3: check path contains /cd/

 

 

currentPage.path.contains("/cd/")

 

 

 

Avatar

Correct answer by
Community Advisor

Hi @sai_santhosht50,

HTL is for direct mark up rendering only. For any manipulation or conditional checks like this has to be done either in Use JS(make use of currentPage or request implied objects and "includes" javascript function for contains check) or Sling Model/WCMUsePojo.

 

Avatar

Community Advisor

In the activate method of WCMUsePojo, use the below snippet to get the current page path and hence contains check on it.

String actualPagePath = getCurrentPage().getPath();
if(actualPagePath.contains("retail")) {
LOG.info("It is a we-retail page !!");
}

Perform any manipulations or further logic here and expose things that are needed in HTL via getters from POJO.

Avatar

Level 5

Hello @sai_santhosht50,

 

Instead of HTL (Sightly), you can use plain JavaScript or the JavaScript Use API to check if your string contains a specific keyword.

 

code.html

<div data-sly-use.info="${'checkString.js' @ pagePath=currentPage.path}">
   <h1>String contains /cd/: ${info.result}</h1>
</div>

 

 

 

checkString.js

"use strict";
use(function () {
    var result;
    var pagePath = this.pagePath;
    if(pagePath.includes('/cd/'))
       result=true;
    else
       result=false;
    return result;
});

 

 

Hope this helps!

Jineet

Avatar

Level 2

Hi @Jinnet_Vora ,

Thanks for your reply.

The above mentioned concept i have already tried but the thing the js will apply after the css rendered on the page which shows some lag to the end user.

It will be help ful if you let me know java script use API with an example. 🙂

Avatar

Level 1

Hi @sai_santhosht50 you can use a 'in' operator instead.. you can do it like

${'cd' in currentPage.path}

Hope that helps

Avatar

Administrator

@RajarshiRoy Good to have AEM SME like you in the community. Looking forward to more contribution from you. 

Avatar

Level 3

Hi RajarshiRoy

 

${'cd' in currentPage.path}

above correct if char exist in String. How we check not in. Because 'not' or '!' is not working.