动态呈现模板中的 TYPO3 流体使用
TYPO3 Fluid usage in dynamically rendered template
我正在使用 EXTbase 和 fluid 为 TYPO3 v7+ 做一个扩展。
我在这里.. 因为我正在根据某个控制器 conditions.Under 渲染我的流体模板,我想要从用户提供的模板文件中渲染类似 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 变量untouched.Little 令人尴尬。!!
全天候搜索 answer.Any 个想法?
您正在从服务器加载普通模板 - 不涉及可以呈现您的模板的 PHP 代码。您需要以执行控制器动作,渲染模板,然后将渲染结果发送给您的方式发送请求。
最简单的方法是使用扩展 typoscript_rendering
。要使用它,请使用扩展提供的 ViewHelper 将 link 渲染到您的控制器操作。它看起来像这样:
{namespace helhum=Helhum\TyposcriptRendering\ViewHelpers}
// Other stuff
<helhum:uri.ajaxAction action="actionName" controller="YourController"/>
也许您需要添加其他参数 - ViewHelper 使用与其他 f:uri.*
-ViewHelper 使用的参数相同的参数。在您的 JS 中,您可以向 link 发送请求(也许将 link 放入某些数据属性中),并将接收呈现的模板。
在您的控制器操作中,您可以 $this->view->setTemplate('myDynamicTemplateName');
使用与操作名称建议的模板不同的模板。
您需要的是部分: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 文件夹位于同一文件夹中)
- Partials/SomePartial1.html
- Partials/SomePartial2.html
我正在使用 EXTbase 和 fluid 为 TYPO3 v7+ 做一个扩展。 我在这里.. 因为我正在根据某个控制器 conditions.Under 渲染我的流体模板,我想要从用户提供的模板文件中渲染类似 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 变量untouched.Little 令人尴尬。!!
全天候搜索 answer.Any 个想法?
您正在从服务器加载普通模板 - 不涉及可以呈现您的模板的 PHP 代码。您需要以执行控制器动作,渲染模板,然后将渲染结果发送给您的方式发送请求。
最简单的方法是使用扩展 typoscript_rendering
。要使用它,请使用扩展提供的 ViewHelper 将 link 渲染到您的控制器操作。它看起来像这样:
{namespace helhum=Helhum\TyposcriptRendering\ViewHelpers}
// Other stuff
<helhum:uri.ajaxAction action="actionName" controller="YourController"/>
也许您需要添加其他参数 - ViewHelper 使用与其他 f:uri.*
-ViewHelper 使用的参数相同的参数。在您的 JS 中,您可以向 link 发送请求(也许将 link 放入某些数据属性中),并将接收呈现的模板。
在您的控制器操作中,您可以 $this->view->setTemplate('myDynamicTemplateName');
使用与操作名称建议的模板不同的模板。
您需要的是部分: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 文件夹位于同一文件夹中)
- Partials/SomePartial1.html
- Partials/SomePartial2.html