Sightly not working as expected | Community
Skip to main content
ramanareddy438
New Participant
October 16, 2015
Solved

Sightly not working as expected

  • October 16, 2015
  • 10 replies
  • 3619 views

Hi All,

I am using sightly to iterate through a list and display images. The images list will be fetched from the java class. I adding the code here for your understanding.

<div  data-sly-use.img="${'GetImages' @ name='carouselimage', res=resource}" data-sly-unwrap > <!-- I am calling a java class (GetImages) to get the image information --> <div class="container-fluid"> <div class="row-fluid"> <div class="carousel slide" id="myCarousel"> <div class="carousel-inner"> <div class="item active"> <ul class="thumbnails"> <p data-sly-list.imgRef="${img.carouselImages}" data-sly-unwrap > <!-- carouselImages list is fetcted from java class --> <li class="span3"> <div class="thumbnail" data-sly-test="${!imgRef}"> <img src="http://placehold.it/260x180" alt="Alt text"> </div> <div class="thumbnail" data-sly-test="${imgRef}"> <img src="${imgRef.src}" alt="${imgRef.alt}"> </div> <div class="caption"> <h5>${imgRef.header}</h5> </div> </li> <p data-sly-test="${imgRef.breakUl == true}" data-sly-unwrap > <p>Inside checking the condition : ${imgRef.breakUl}</p> </ul> <!-- I am trying to cose the ul and start new ul. Since I need new UL after every four li tags--> </div> <div class="item"> <ul class="thumbnails"> </p> </p> </div> </div> <a data-slide="prev" href="#myCarousel" class="left carousel-control">&#60;</a> <a data-slide="next" href="#myCarousel" class="right carousel-control">&#62;</a> </div> </div> </div> </div>

Please help me on this. I explained the code in the comments. Please let me know if you need more understanding.

Thanks 
Ramana Reddy

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by francisco_ribei

Hi,

I've faced a similar case and I solved this way:

<div data-sly-test="${itemList.first || itemList.count == 5}" data-sly-unwrap> <li class="slide"> </div>

You can put some logic in you Java class to control the count. I missed the mod operator on sightly, it would be helpful in these cases.

Thanks

10 replies

Feike_Visser1
Employee
October 15, 2016

This sample works for me (aem6.2 tested):

 

<ul data-sly-list="${currentPage.listChildren}">
    <sly data-sly-test="${itemList.first}">
        <div>
    </sly>

    <li>${item.name}</li>

    <sly data-sly-test="${itemList.last}">
        </div>
    </sly>

</ul>

Feike_Visser1
Employee
October 14, 2016

Can you try data-sly-template for the elements to open or close an HTML element?

What I think you are facing is that Sighty/HTL is expecting valid HTML.

New Participant
October 14, 2016

Hi,

I am facing same issue. I tried the given solution also.

ramanareddy438
New Participant
October 16, 2015

ramanareddy438 wrote...

Hi All,

I am using sightly to iterate through a list and display images. The images list will be fetched from the java class. I adding the code here for your understanding.

  1. <div data-sly-use.img="${'GetImages' @ name='carouselimage', res=resource}" data-sly-unwrap > <!-- I am calling a java class (GetImages) to get the image information -->
  2. <div class="container-fluid">
  3. <div class="row-fluid">
  4. <div class="carousel slide" id="myCarousel">
  5. <div class="carousel-inner">
  6. <div class="item active">
  7. <ul class="thumbnails">
  8. <p data-sly-list.imgRef="${img.carouselImages}" data-sly-unwrap > <!-- carouselImages list is fetcted from java class -->
  9. <li class="span3">
  10. <div class="thumbnail" data-sly-test="${!imgRef}">
  11. <img src="http://placehold.it/260x180" alt="Alt text">
  12. </div>
  13. <div class="thumbnail" data-sly-test="${imgRef}">
  14. <img src="${imgRef.src}" alt="${imgRef.alt}">
  15. </div>
  16. <div class="caption">
  17. <h5>${imgRef.header}</h5>
  18. </div>
  19. </li>
  20.  
  21. <p data-sly-test="${imgRef.breakUl == true}" data-sly-unwrap >
  22. <p>Inside checking the condition : ${imgRef.breakUl}</p>
  23. </ul> <!-- I am trying to cose the ul and start new ul. Since I need new UL after every four li tags-->
  24. </div>
  25. <div class="item">
  26. <ul class="thumbnails">
  27. </p>
  28. </p>
  29. </div>
  30. </div>
  31. <a data-slide="prev" href="#myCarousel" class="left carousel-control">&#60;</a>
  32. <a data-slide="next" href="#myCarousel" class="right carousel-control">&#62;</a>
  33. </div>
  34. </div>
  35. </div>
  36. </div>

Please help me on this. I explained the code in the comments. Please let me know if you need more understanding.

Thanks 
Ramana Reddy

 

Please can somebody answer this question??/

Lokesh_Shivalingaiah
New Participant
October 16, 2015

Hi Ramana,

Can you tell us what is not working or what is the issue you are facing ?

Feike_Visser1
Employee
October 16, 2015

It is very hard for me to understand exactly what doesn't work here.

Are you able to provide a smaller example that I can look into?

ramanareddy438
New Participant
October 16, 2015

Feike Visser wrote...

It is very hard for me to understand exactly what doesn't work here.

Are you able to provide a smaller example that I can look into?

 

Thank you Feike Visser for your reply. Below is the code which causing the problem.

<p data-sly-test="${imgRef.breakUl}" data-sly-unwrap > <p>Inside checking the condition : ${imgRef.breakUl}</p> <!--/* Please treat this as log */--> </ul> <!-- I am trying to cose the ul and start new ul. Since I need new UL after every four li tags--> </div></p>

in the above code whenever the breakUl is true then I have to close the <ul> and <div> tags and start new <ul> and <div> tags. And this whole process is done on a list of objects. Some how the <ul> is closing but the <div> is not closing and list is continuing.

 

Thanks Regards

M. Ramana Reddy

Feike_Visser1
Employee
October 16, 2015

Can you create a small reproducible case, that isn't depending on your Java-class, use resource.listChildren or so for the list.

Then I can have a look.

ramanareddy438
New Participant
October 16, 2015

Feike Visser wrote...

Can you create a small reproducible case, that isn't depending on your Java-class, use resource.listChildren or so for the list.

Then I can have a look.

Thanks Feike Visser for reply. Here I am trying explain the code in the comments. 

<div data-sly-list.imgRef="${img.mapCarouselImages}" data-sly-unwrap > <!--/* Please think this as a list of objects are passed */ --> <span data-sly-test="${imgRefList.first}" data-sly-unwrap > <!--/* For the first time I need the css class "active" */--> <div class="item active"> </span> <span data-sly-test="${!imgRefList.first}" data-sly-unwrap > <!--/* If the element is not the first then I have to close the previous div tag and open the new tag in below condition. here I am getting the IllegalArgumentException : Invalid property name. If I remove this code then it is working but the div is not closing.*/--> </div> </span> <span data-sly-test="${!imgRefList.first}" data-sly-unwrap > <!--/* If it is other than first create the div with normal css class "item" */--> <div class="item"> </span> <ul class="thumbnails"> <!--/* Please don't bother the below code  */--> <span data-sly-list="${img.mapCarouselImages[imgRef]}" data-sly-unwrap > <li class="span3"> <div class="thumbnail" data-sly-test="${!item}"> <img src="http://placehold.it/260x180" alt="Alt text"> </div> <div class="thumbnail" data-sly-test="${item}"> <img src="${item.src}" alt="${item.alt}"> </div> <div class="caption"> <h5>${item.header}</h5> </div> </li> </span> </ul> </div>

I Tried to explain the code in the comments. Please do reply if need any further information.

 

Thanks in advance

M. Ramana Reddy

francisco_ribei
francisco_ribeiAccepted solution
New Participant
October 16, 2015

Hi,

I've faced a similar case and I solved this way:

<div data-sly-test="${itemList.first || itemList.count == 5}" data-sly-unwrap> <li class="slide"> </div>

You can put some logic in you Java class to control the count. I missed the mod operator on sightly, it would be helpful in these cases.

Thanks