Как скрыть название страницы из списка, если у него нет дочерних вложенных страниц в поле зрения? - PullRequest
0 голосов
/ 09 января 2019

Я хочу отображать только те страницы в заголовке, которые имеют дочерние страницы внутри них. Используя следующий код

<nav class="wsmenu clearfix" data-sly-use.nav="in.gov.odishatourism.core.models.HeaderNavigation">
<ul class="wsmenu-list"  >
    <li aria-haspopup="true"  data-sly-repeat="${nav.root.listChildren}" ><span class="wsmenu-click" ><i class="wsmenu-arrow fa fa-angle-down"></i></span>
        <a class="" href="javascript:void(0);" data-sly-test="!${item.hasChild}">${item.title}</a>
        <div class="wsmegamenu clearfix ">
            <div class="container paddingmenu">
                 <div class="row">
                     <div class="menuimgdiv"  data-sly-repeat.subcategory="${item.listChildren}">
                         <h3 class="title" data-sly-test.subcat="${subcategory.title}" >${subcat}</h3>
                         <ul>
                             <li data-sly-repeat.page="${subcategory.listChildren}"><a class="" href="${page.path  @ extension='html'}">${page.title}</a></li>
                         </ul>
                     </div>
                 </div>
             </div>
         </div>
     </li>
     <li aria-haspopup="true"><a href="http://dot.odishatourism.gov.in/" target="_blank"> Dept of Tourism</a></li>
</ul>
<a class="wsdownmenu-animated-arrow"><span></span></a>
<div class="wsdownmenu-text">Navigation</div>
</nav>

дает следующий вывод

enter image description here

Но этот код -

<nav class="wsmenu clearfix" data-sly-use.nav="in.gov.odishatourism.core.models.HeaderNavigation">
    <ul class="wsmenu-list"  >
        <li aria-haspopup="true"  data-sly-repeat="${nav.root.listChildren}" ><span class="wsmenu-click" ><i class="wsmenu-arrow fa fa-angle-down"></i></span>
            <a class="" href="javascript:void(0);" data-sly-test="${item.hasChild}">${item.title}</a>
                <div class="wsmegamenu clearfix ">
                    <div class="container paddingmenu">
                        <div class="row">
                            <div class="menuimgdiv"  data-sly-repeat.subcategory="${item.listChildren}">
                                <h3 class="title" data-sly-test.subcat="${subcategory.title}" >${subcat}</h3>
                                <ul>
                                    <li data-sly-repeat.page="${subcategory.listChildren}"><a class="" href="${page.path  @ extension='html'}">${page.title}</a></li>
                                </ul>
                            </div>
                        </div>
                    </div>
                </div>
            </li>
            <li aria-haspopup="true"><a href="http://dot.odishatourism.gov.in/" target="_blank"> Dept of Tourism</a></li>
        </ul>
        <a class="wsdownmenu-animated-arrow"><span></span></a>
        <div class="wsdownmenu-text">Navigation</div>
    </nav>

дает вывод, как показано ниже

enter image description here

код

<a class="" href="javascript:void(0);" data-sly-test="${item.hasChild}">${item.title}</a>

не работает должным образом.

Структура моего сайта показана ниже

enter image description here

И фактический желаемый результат равен

enter image description here

1 Ответ

0 голосов
/ 09 января 2019

Вы не можете использовать ${item.hasChild} в своих условиях тестирования, поскольку метод hasChild () API страницы требует, чтобы вы передали параметр. AFAIK, HTL не поддерживает вызов параметризованных методов.

Поскольку прямого API для проверки наличия у страницы дочерних страниц нет, может потребоваться выполнить следующее, чтобы проверить, есть ли у страницы дочерние страницы

<a class="" href="javascript:void(0);" data-sly-test="${item.listChildren && item.listChildren.hasNext}">${item.title}</a>

Однако я бы предпочел построить все дерево навигации, используя модели Sling или WCM Use API, и не вызывать так много методов в HTL. Это сделало бы код легче поддерживать, изменять и тестировать. YMMV

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...