获取 SilverStripe 页面的所有子页面,特定页面类型除外
Get all children of a SilverStripe page except those of a certain page type
我正在开发 SilverStripe 页面类型,该类型旨在获取父导航项的所有子项,但可能属于页面类型 PDFTemplate
的任何子项除外。我习惯于获取所有子元素,但是当涉及到基于模板类型排除特定子元素时,我不确定如何进行。
这是获取父导航项的子项的函数:
<% if $Children %>
<div class=“Centers-Links-Area”>
<% loop $Children %>
<div class="Centers-Ex-Block clearfix">
<a href="$Link">
<% if $CentersSubpageImage %>
<img class="image" src="$CentersSubpageImage.URL" />
<% end_if %>
<p>$H1</p>
</a>
</div>
<% end_loop%>
</div>
<% end_if %>
我想做的是,如果任何子项的页面类型为 PDFTemplate
,我想完全隐藏 "Centers-Links-Area" div。在哪里可以放置 if 语句来根据页面类型进行此类检查?
<% loop $Children %>
<% if $ClassName != "PDFTemplate" %>
(your link html goes here)
<% end_if %>
<% end_loop %>
虽然 Jono 的回答涵盖了 class 名称的精确匹配(听起来它适用于您的确切场景),但它不处理另一个 class 扩展 PDFTemplate
的继承情况并且您想阻止 PDFTemplate
的 任何版本 显示(这对某些人来说可能是一个有效的问题)
下面是扩展各种classes
的页面模板示例
- Page
- HomePage
- PDFTemplate
- SpecialPDFTemplate
- ContactPage
Jono 的回答不会阻止显示 SpecialPDFTemplate
,因为 $ClassName != 'PDFTemplate'
将通过。
为了防止这种情况,我们可以利用函数 Object::is_a()
。这是扩展 Object
的所有 classes 上的实例函数,可以像模板中的 $is_a('PDFTemplate')
一样使用。
您的代码段最终将如下所示:
<% if $Children %>
<div class=“Centers-Links-Area”>
<% loop $Children %>
<% if not $is_a('PDFTemplate') %>
<div class="Centers-Ex-Block clearfix">
<a href="$Link">
<% if $CentersSubpageImage %>
<img class="image" src="$CentersSubpageImage.URL" />
<% end_if %>
<p>$H1</p>
</a>
</div>
<% end_if %>
<% end_loop%>
</div>
<% end_if %>
同样,虽然 Jono 的回答没有错,但这是一个可能会影响某些人的用例。
我正在开发 SilverStripe 页面类型,该类型旨在获取父导航项的所有子项,但可能属于页面类型 PDFTemplate
的任何子项除外。我习惯于获取所有子元素,但是当涉及到基于模板类型排除特定子元素时,我不确定如何进行。
这是获取父导航项的子项的函数:
<% if $Children %>
<div class=“Centers-Links-Area”>
<% loop $Children %>
<div class="Centers-Ex-Block clearfix">
<a href="$Link">
<% if $CentersSubpageImage %>
<img class="image" src="$CentersSubpageImage.URL" />
<% end_if %>
<p>$H1</p>
</a>
</div>
<% end_loop%>
</div>
<% end_if %>
我想做的是,如果任何子项的页面类型为 PDFTemplate
,我想完全隐藏 "Centers-Links-Area" div。在哪里可以放置 if 语句来根据页面类型进行此类检查?
<% loop $Children %>
<% if $ClassName != "PDFTemplate" %>
(your link html goes here)
<% end_if %>
<% end_loop %>
虽然 Jono 的回答涵盖了 class 名称的精确匹配(听起来它适用于您的确切场景),但它不处理另一个 class 扩展 PDFTemplate
的继承情况并且您想阻止 PDFTemplate
的 任何版本 显示(这对某些人来说可能是一个有效的问题)
下面是扩展各种classes
的页面模板示例- Page
- HomePage
- PDFTemplate
- SpecialPDFTemplate
- ContactPage
Jono 的回答不会阻止显示 SpecialPDFTemplate
,因为 $ClassName != 'PDFTemplate'
将通过。
为了防止这种情况,我们可以利用函数 Object::is_a()
。这是扩展 Object
的所有 classes 上的实例函数,可以像模板中的 $is_a('PDFTemplate')
一样使用。
您的代码段最终将如下所示:
<% if $Children %>
<div class=“Centers-Links-Area”>
<% loop $Children %>
<% if not $is_a('PDFTemplate') %>
<div class="Centers-Ex-Block clearfix">
<a href="$Link">
<% if $CentersSubpageImage %>
<img class="image" src="$CentersSubpageImage.URL" />
<% end_if %>
<p>$H1</p>
</a>
</div>
<% end_if %>
<% end_loop%>
</div>
<% end_if %>
同样,虽然 Jono 的回答没有错,但这是一个可能会影响某些人的用例。