【问题标题】:Get all children of a SilverStripe page except those of a certain page type获取 SilverStripe 页面的所有子页面,但特定页面类型的页面除外
【发布时间】:2015-12-16 06:26:37
【问题描述】:

我正在研究一种 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 语句来根据页面类型进行此类检查?

【问题讨论】:

    标签: silverstripe


    【解决方案1】:
    <% loop $Children %>
        <% if $ClassName != "PDFTemplate" %>
            (your link html goes here)
        <% end_if %>
    <% end_loop %>
    

    【讨论】:

      【解决方案2】:

      虽然 Jono 的答案涵盖了类名的完全匹配(听起来它适用于您的确切场景),但它不处理另一个类扩展 PDFTemplate 并且您想阻止 任何版本的继承情况 PDFTemplate 中的 em> 来自显示(这对某些人来说可能是一个有效的问题)

      以下是扩展各种类的页面模板示例

      - Page
        - HomePage
        - PDFTemplate
          - SpecialPDFTemplate
        - ContactPage
      

      Jono 的回答不会阻止 SpecialPDFTemplate 显示为 $ClassName != 'PDFTemplate' 将通过。

      为了防止这种情况,我们可以使用函数Object::is_a()。这是所有扩展 Object 的类上的实例函数,可以像模板中的 $is_a('PDFTemplate') 一样使用。

      您的 sn-p 最终将如下所示:

      <% 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 的回答没有错,但这是一个可能会影响某些人的用例。

      【讨论】:

      • 很好的提示,这可能会更好,具体取决于您的设置。将其添加到我的工具包中。
      • 好点!幸运的是,我不相信会有任何扩展 PDFTemplate 的类,因为它很少会被使用。但是,对于将来可能更复杂的任何事情,请注意这一点。
      猜你喜欢
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      相关资源
      最近更新 更多