【问题标题】:How to pass a value from a fluid page template into a ext:mask content element template?如何将流体页面模板中的值传递到 ext:mask 内容元素模板?
【发布时间】:2017-03-10 21:37:21
【问题描述】:

在带有 ext:mask 的 TYPO3 7 LTS 中,我想将一个值从我的页面模板传递到通过掩码扩展呈现的 FLUIDTEMPLATE。

我想要实现的一个例子:

内容元素包含描述汽车的内容:沃尔沃、四轮驱动...

在页面模板中,我想以不同的方式显示“汽车” 颜色。所以页面模板将能够命令:“获取第一个 车,并以绿色显示。然后第二辆车显示为黄色”。 (不,它与 css 无关..)

如果必须在整个页面上执行一次,我可以使用

`tt_content.default.mask_car.settings.color = green`

或者(作为记录)如果该变量的目的是修改演示文稿,我可以使用:

`tt_content.default.mask_car.settings.file = path/to/Mask/Content/Templates/car_green.html`

但是如果页面上有多个相同内容元素的实例,那么这种方法就不好了。

如何将不同的值传递给页面上同一CE的不同实例?

【问题讨论】:

    标签: typo3 typoscript fluid typo3-7.6.x tx-mask


    【解决方案1】:

    您可以添加以下 TypoScript:

    lib.set_register = LOAD_REGISTER
    lib.set_register.color = TEXT
    lib.set_register.color.current = 1
    
    lib.get_register.color = TEXT
    lib.get_register.color.data = register:color
    
    lib.mask_car < styles.content.get
    lib.mask_car.select.where = colPos=123
    

    在您的页面模板中,您可以使用 Fluid 设置颜色

    <f:cObject typoscriptObjectPath="lib.set_register.color" data="green"/>
    

    使用 Fluid 获取您的内容元素

    <f:cObject typoscriptObjectPath="lib.mask_car"/>
    

    然后用 Fluid 切换你的面具模板中的内容元素输出

    <f:if condition="{f:cObject(typoscriptObjectPath: 'lib.get_register.color')} == 'green'">
        <f:then>
            green
        </f:then>
        <f:else>
            not green
        </f:else>
    </f:if>
    

    我希望这可以帮助您解决问题。

    【讨论】:

    • 哇哦!我已经测试过了,效果很好,谢谢!
    【解决方案2】:

    我遇到了类似的问题: 掩码内容元素的集合;同一页面上同一元素的两种不同渲染:

    • 一个随机掩码呈现为预告片,链接到页面底部的详细信息

    • 所有掩码 ce 的列表呈现为列表项(详细)

      我的解决方案:

    随机预告片的渲染:

    lib.qa_random_teaser_community < styles.content.get
    lib.qa_random_teaser_community.select{
      where = colPos=12
      pidInList = {$pidCommunityQAStorage}
      max = 1
      orderBy = rand()
    }
    

    详细列表的渲染:

    lib.qa_list_community < styles.content.get
    lib.qa_list_community{
      renderObj < tt_content
      renderObj.default.mask_qa_community.settings.renderListItems = 1
      select {
        where = colPos=12
        pidInList = {$pidCommunityQAStorage}
      }
    }
    

    我将 tt_content 复制到 renderObj,然后我可以对其进行修改,为 mask 元素添加一个专用设置,仅用于此内容渲染:

    renderObj.default.mask_qa_community.settings.renderListItems = 1
    

    在遮罩模板中,我只需要检查设置并触发适当的渲染:

    <f:if condition="{settings.renderListItems}">
      <f:then>
        <f:render section="qa-detail" arguments="{data:data}"/>
      </f:then>
      <f:else>
        <f:render section="qa-teaser" arguments="{data:data}"/>
      </f:else>
    </f:if>
    

    另一种方法是选择一个专用的流体模板,而不是仅仅提供一个设置:

    renderObj.default.mask_qa_community.settings.file = .......
    

    在掩码 3.0.1 中使用 TYPO3 8...

    renderObj.mask_qa_community.settings.file = .......
    

    希望对其他人有用。

    【讨论】:

      【解决方案3】:

      我正在重新审视这个问题,在 TYPO3 9 中使用掩码 4.x,这有效:

      lib.my_content_element {
        renderObj.mask_content_text.settings.test = 123
      }
      

      【讨论】:

      • 完全不知道怎么切换模板文件。不确定它是否仍然有效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 2012-01-16
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多