前端插件有条件隐藏 tt_content div

问题描述 投票:0回答:2

我正在使用 Extbasefluid_styled_content

正在开发一个具有以下要求的 Extbase 插件:如果满足特定条件(取决于 URL 查询参数),则前端中不应为该插件显示任何内容。在这种情况下,插件的流体输出将为空(取决于控制器中设置的变量)。但 TYPO3 仍然 - 默认情况下 - 渲染一个包装 div 和标题。

所以,本质上,我得到的是这样的:

<div id="c217" class="...">
  <header>
    <h2 class="...">Header</h2>
  </header>
  <p> <!-- plugin output here is empty -- > </p>
</div>

我如何(动态)防止这种情况?


以前曾问过这个问题,但我找到的解决方案不适用于fluid_styled_content:

typo3 fluid extbase fluid-styled-content
2个回答
4
投票

您应该使用FSC方式。
所有内容均通过使用布局和部分的模板呈现。除了简单的 CE 之外,您还有一个插件模板,它请求渲染标题的布局。

使用插件的特殊条件增强(全局)布局,以避免标头(请确保自己渲染标头),或者如果您的插件不会渲染任何输出,则避免标头。


编辑:

将覆盖模板路径添加到 FSC:

lib.contentElement {
   templateRootPaths {
      200 = EXT:your_extension_key/Resources/Private/FSC/Templates/
   }
   partialRootPaths {
      200 = EXT:your_extension_key/Resources/Private/FSC/Partials/
   }
   layoutRootPaths {
      200 = EXT:your_extension_key/Resources/Private/FSC/Layouts/
   }
}

现在您可以将默认布局从 FSC 文件夹复制到您的布局文件夹,并在该布局中添加一个条件,如果您的插件被渲染,该条件将跳过标题和全局换行。

<f:if condition="{data.CType} == 'list' && {data.list_type} == 'myPlugin'">
  <f:then>
    <f:comment> only plugin output </fcomment>

  </f:then>
  <f:else>
    <f:comment> original output with headers and wrap </fcomment>

  </f:else>
</f:if>    

1
投票

我的解决方案

我设法找到了一个可行的解决方案:但是它似乎过于复杂:(

我所做的是覆盖我的插件的 List.html 流体模板。


我的详细解决方案

TypoScript:将fluid_styled_content部分路径添加到我的视图中,覆盖我的插件的列表模板:

plugin.tx_myext.view.partialRootPaths < lib.contentElement.partialRootPaths
plugin.tx_myext.view.partialRootPaths.100 = EXT:myext/Resources/Private/Partials/


tt_content.list.templateRootPaths.50 = EXT:myext/Resources/Private/Templates/Override/
  

tt_content.list.templateName = TEXT
tt_content.list.templateName.stdWrap {
    cObject = TEXT
    cObject {
        data = list_type
        override.field = list_type
        if.isInList.field = list_type
        if.value = myext_plugin1,myext_plugin2
        split {
            token = myext_
            1.current = 1
            1.wrap = |
        }
    }
    ifEmpty = List
}

EXT:myext/Resources/Private/Templates/Override/Plugin1.html:覆盖默认列表模板,复制粘贴 List.html,不带布局。

<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<f:cObject typoscriptObjectPath="tt_content.list.20.{data.list_type}" data="{data}" table="tt_content" />
</html>

EXT:myext/Resources/Private/Templates/MyController/View.html:使用覆盖/默认布局

<f:layout name="Override/Default" />
<f:section name="Main" />

EXT:myext/Resources/Private/Layout/Override/Default.html:是具有隐藏功能的fluid_styled_content默认布局的副本。

....
<f:if condition="{hidden}">
    <f:then>

    </f:then>
    <f:else>
 ....

Controller/MyController.php:必须添加tt_content数据(因为需要header、header_layout、uid等)

$data = $this->configurationManager->getContentObject()->data;
$this->view->assign('data', $data);
© www.soinside.com 2019 - 2024. All rights reserved.