嵌套if / else语句ext:news fluid

时间:2017-02-17 15:34:55

标签: typo3 fluid

使用TYPO3 v7.6.13分机:新闻5.3.2

我创建了两个要在单个页面上使用的Detail部分,这是页面TS Config:

tx_news.templateLayouts {
        11 = HomePage Top Banners
        12 = HomePage List
}

我能写两个条件,以便使用适当的模板。

<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
    xmlns:n="http://typo3.org/ns/GeorgRinger/News/ViewHelpers"
    data-namespace-typo3-fluid="true">
<f:layout name="General" />
<!--
  =====================
    Templates/News/List.html
-->

<f:section name="content">
  <!--TYPO3SEARCH_end-->
  <f:if condition="{news}">


<f:then>
        <f:if condition="{settings.templateLayout} == 11">
            <f:then>
                    <f:for each="{news}" as="newsItem">
                       <f:render partial="List/homepagetopbanner" arguments="{newsItem: newsItem, settings:settings}"/>
                    </f:for>
            </f:then>
</f:if>


  <f:if condition="{settings.templateLayout} == 12">
    <f:then>
       <f:for each="{news}" as="newsItem">
        <f:render partial="List/homepagelist" arguments="{newsItem: newsItem, settings:settings}"/>
       </f:for>
    </f:then>
    </f:if>

</f:then>



    <f:else>
      <div class="no-news-found">
        <f:translate key="list_nonewsfound" />
      </div>
    </f:else>
  </f:if>
  <!--TYPO3SEARCH_begin-->
</f:section>
</html>

我正在努力设置一个后备选项,以便在没有其他选择的情况下使用默认的详细信息。

根据我的理解,在这种情况下你是否无法写if语句,无论如何设置一个后备选项?

3 个答案:

答案 0 :(得分:0)

elseif只能在TYPO3 8中使用。

在此之前,如果VH在其他VH中,则需要级联:

<f:if condition="{settings.templateLayout} == 11">
<f:then>
    // do template 11
</f:then>
<f:else>
    <f:if condition="{settings.templateLayout} == 12">
    <f:then>
        // do template 12
    </f:then>
    <f:else>
        // do default-template
    </f:else>
    </f:if>
</f:else>
</f:if>

或者你使用switch viewhelper:

<f:switch expression="{settings.templateLayout}">
<f:case value="11">
    // do template 11
</f:case>
<f:case value="12">
    // do template 12
</f:case>
<f:case default="TRUE">
    // do default template
</f:case>
</f:switch>

但是那个viewhelper有一些小的缺点,所以我更喜欢级联的VH。

答案 1 :(得分:0)

猫王,非常感谢你。

我使用您提供的模板遇到了一些奇怪的行为。

当我在前端选择模板11时,id为11的模板和默认模板都会呈现每个新闻项目。

但是,我使用下面的代码,它工作正常。我删除了else条件,而只是使用了三个if条件:11,12或default(0)。

<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
    xmlns:n="http://typo3.org/ns/GeorgRinger/News/ViewHelpers"
    data-namespace-typo3-fluid="true">
<f:layout name="General" />
<!--
  =====================
    Templates/News/List.html
-->

<f:section name="content">
  <!--TYPO3SEARCH_end-->
  <f:if condition="{news}">
      <f:then>
          <f:if condition="{settings.templateLayout} == 11">
              <f:then>
                <f:for each="{news}" as="newsItem">
                   <f:render partial="List/homepagetopbanner" arguments="{newsItem: newsItem, settings:settings}"/>
                </f:for>
              </f:then>
          </f:if>
          <f:if condition="{settings.templateLayout} == 12">
            <f:then>
               <f:for each="{news}" as="newsItem">
                <f:render partial="List/homepagelist" arguments="{newsItem: newsItem, settings:settings}"/>
               </f:for>
            </f:then>
          </f:if>
      </f:then>
     <!-- THIS IS THE DEFAULT -->
     <f:if condition="{settings.templateLayout} == 0">
               <f:for each="{news}" as="newsItem">
                <f:render partial="List/Item" arguments="{newsItem: newsItem, settings:settings}"/>
               </f:for>
     </f:if>

      <f:else>
        <div class="no-news-found">
          <f:translate key="list_nonewsfound" />
        </div>
      </f:else>
  </f:if>
  <!--TYPO3SEARCH_begin-->
</f:section>
</html>

希望有道理,

非常感谢您的协助。

答案 2 :(得分:-1)

  

当然,您可以在下面的脚本中使用 else

<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
    xmlns:n="http://typo3.org/ns/GeorgRinger/News/ViewHelpers"
    data-namespace-typo3-fluid="true">
<f:layout name="General" />
<!--
  =====================
    Templates/News/List.html
-->

<f:section name="content">
  <!--TYPO3SEARCH_end-->
  <f:if condition="{news}">
      <f:then>
          <f:if condition="{settings.templateLayout} == 11">
              <f:then>
                <f:for each="{news}" as="newsItem">
                   <f:render partial="List/homepagetopbanner" arguments="{newsItem: newsItem, settings:settings}"/>
                </f:for>
              </f:then>
          </f:if>
          <f:if condition="{settings.templateLayout} == 12">
            <f:then>
               <f:for each="{news}" as="newsItem">
                <f:render partial="List/homepagelist" arguments="{newsItem: newsItem, settings:settings}"/>
               </f:for>
            </f:then>
            <f:else>
               <f:for each="{news}" as="newsItem">
                <f:render partial="List/default" arguments="{newsItem: newsItem, settings:settings}"/>
               </f:for>
            </f:else>
          </f:if>
      </f:then>
      <f:else>
        <div class="no-news-found">
          <f:translate key="list_nonewsfound" />
        </div>
      </f:else>
  </f:if>
  <!--TYPO3SEARCH_begin-->
</f:section>
</html>
  

或者你可以使用默认的模板布局,就像0一样   此

<f:else condition="{settings.templateLayout} == 0">
  Add your code here ..
</f:else>