TYPO3动态渲染模板中的流体使用

时间:2016-07-01 11:01:17

标签: php jquery arguments typo3 fluid

我使用EXTbase和TYPO3 v7 +的液体烹饪扩展。 我在这里..因为我根据某些控制器条件渲染流体模板。在某种情况下,我想要从用户提供的模板文件中呈现html代码。

我已经使用jQuery来绕过这种情况..

    <script>
        $(function(){
            $("#some_div_id").load("template_file.html");
        });
    </script>

猜猜是什么......我得到了我期望的结果,但不是真的......

<div class="clearfix">
    <ul id="image-gallery" class="gallery list-unstyled cS-hidden">
       <f:for each="{slider}" as="user" key="label" iteration="iterator">
          <li data-thumb="{user.src}"> 
              <f:image crop="{user.crop}" treatidasreference="true" src="{user.filepath}" alt="{user.title}" style="width:100%; height:auto;"></f:image>
                <f:if condition="{config.metadata.switch}!= 0">
                  <f:if condition="{user.title}">
                    <p class="light-caption" style="background: {config.metadata.opacity}; color: {config.metadata.color}; font-size: {config.metadata.size}%; text-align:{config.metadata.align};">{user.title}</p>
                  </f:if>
                </f:if>
          </li>
      </f:for>
    </ul>
</div>

以上是产生的代码..看,TypoScript变量没有变化。小尴尬。!!
全天候搜索答案。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您正在从服务器加载普通模板 - 没有涉及可以呈现模板的PHP代码。您需要以执行控制器操作的方式发送请求,呈现模板,然后将呈现的结果发送给您。

最简单的方法是使用扩展程序typoscript_rendering。要使用它,请使用扩展程序提供的ViewHelper呈现指向控制器操作的链接。它看起来像这样:

{namespace helhum=Helhum\TyposcriptRendering\ViewHelpers}

// Other stuff

<helhum:uri.ajaxAction action="actionName" controller="YourController"/>

也许您需要添加其他参数 - ViewHelper采用与其他f:uri.*相同的参数 - ViewHelpers。在您的JS中,您可以向该链接发送请求(可能将链接放入某个数据属性),并将接收呈现的模板。

答案 1 :(得分:1)

在您的控制器操作中,您可以使用$this->view->setTemplate('myDynamicTemplateName');使用与操作名称建议的模板不同的模板。

请参阅:https://typo3.org/api/typo3cms/class_t_y_p_o3_1_1_c_m_s_1_1_fluid_1_1_view_1_1_template_view.html#a9c46c7bfe6a39b26478a2f37aec38d80

答案 2 :(得分:1)

您需要的是部分:https://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Render.html

在Fluid模板中,您将根据控制器提供的变量添加条件

<f:if condition="{showPartial1}">
    <f:render partial="SomePartial1" arguments="{_all}" />
</f:if>
<f:if condition="{showPartial2}">
    <f:render partial="SomePartial2" arguments="{_all}" />
</f:if>

部分通常会添加到Partials文件夹中(应该与Templates文件夹位于同一文件夹中),就像那样

  1. Partials / SomePartial1.html
  2. 局部模板/ SomePartial2.html