如果列表中没有 child 个子页面,如何从列表中隐藏该页面的名称?
How to hide the name of a page from a list if it has no child sub pages in sightly?
我只想显示 header 中包含 child 个页面的那些页面。使用以下代码
<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>
给出以下输出
但是这段代码-
<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>
给出如下所示的输出
代码
<a class="" href="javascript:void(0);" data-sly-test="${item.hasChild}">${item.title}</a>
工作不正常。
我的网站结构如下图
实际需要的输出是
您不能在测试条件中使用 ${item.hasChild}
,因为页面 API 的 hasChild() 方法需要您传递一个参数。 AFAIK,HTL 不支持参数化方法的调用。
由于无法直接API检查页面是否有子页面,您可能需要执行以下操作来验证页面是否有子页面
<a class="" href="javascript:void(0);" data-sly-test="${item.listChildren && item.listChildren.hasNext}">${item.title}</a>
但是,我更愿意使用 Sling 模型或 WCM 使用 API 构建整个导航树,而不是在 HTL 中调用那么多方法。这将使代码更易于维护、更改和测试。 YMMV
我只想显示 header 中包含 child 个页面的那些页面。使用以下代码
<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>
给出以下输出
但是这段代码-
<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>
给出如下所示的输出
代码
<a class="" href="javascript:void(0);" data-sly-test="${item.hasChild}">${item.title}</a>
工作不正常。
我的网站结构如下图
实际需要的输出是
您不能在测试条件中使用 ${item.hasChild}
,因为页面 API 的 hasChild() 方法需要您传递一个参数。 AFAIK,HTL 不支持参数化方法的调用。
由于无法直接API检查页面是否有子页面,您可能需要执行以下操作来验证页面是否有子页面
<a class="" href="javascript:void(0);" data-sly-test="${item.listChildren && item.listChildren.hasNext}">${item.title}</a>
但是,我更愿意使用 Sling 模型或 WCM 使用 API 构建整个导航树,而不是在 HTL 中调用那么多方法。这将使代码更易于维护、更改和测试。 YMMV