我正在处理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 %>
Run Code Online (Sandbox Code Playgroud)
我想要做的是,如果任何一个孩子是页面类型PDFTemplate,我想完全隐藏"Centers-Links-Area"div.我可以在哪里放置if语句来根据页面类型进行检查?
<% loop $Children %>
<% if $ClassName != "PDFTemplate" %>
(your link html goes here)
<% end_if %>
<% end_loop %>
Run Code Online (Sandbox Code Playgroud)
虽然Jono的答案涵盖了类名的完全匹配(听起来它适用于您的确切场景),但它不处理继承情况,其中另一个类扩展PDFTemplate并且您希望阻止任何版本的PDFTemplate显示(这可能是一个有效的问题一些)
下面是扩展各种类的页面模板的示例
- Page
- HomePage
- PDFTemplate
- SpecialPDFTemplate
- ContactPage
Run Code Online (Sandbox Code Playgroud)
Jono的回答不会阻止SpecialPDFTemplate显示为$ClassName != 'PDFTemplate'将通过.
为了防止这种情况,我们可以使用一个功能Object::is_a().这是扩展的所有类的实例函数Object,可以像$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 %>
Run Code Online (Sandbox Code Playgroud)
同样,虽然Jono的答案没有错,但这是一个用例,它们可能会影响某些人.
| 归档时间: |
|
| 查看次数: |
966 次 |
| 最近记录: |