Условное скрытие div tt_content для плагина во Frontend

Я использую TYPO3 8 и fluid_styled_content.

Я разрабатываю расширение со следующими требованиями: Если выполняются определенные условия (в зависимости от параметра запроса URL), ничего не должно отображаться для плагина во Frontend. В этом случае вывод жидкости плагина будет пустым (в зависимости от переменной, установленной в контроллере). Но TYPO3 по-прежнему - по умолчанию - визуализирует обертку div и заголовок.

Итак, по сути, я получаю что-то вроде:

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

Как мне (динамически) предотвратить это?


Об этом уже спрашивали, но найденные мной решения не будут работать с fluid_styled_content:


person Sybille Peters    schedule 05.01.2018    source источник
comment
Вы можете включить JavaScript, когда ничего не должно отображаться, и удалить нежелательный HTML. Тоже не очень красивое решение.   -  person Heinz Schilling    schedule 05.01.2018


Ответы (2)


Вам следует использовать метод FSC.
Весь контент отображается с помощью шаблонов, в которых используются макеты и частичные элементы. Помимо простых CE, у вас есть шаблон для плагинов, который запрашивает макет, который отображает заголовок.

Улучшите (глобальный) макет с помощью специального условия для вашего плагина, чтобы избежать заголовка (убедитесь, что вы визуализируете заголовок самостоятельно) или избегайте заголовка, если ваш плагин не будет отображать какой-либо вывод.


РЕДАКТИРОВАТЬ:

добавить пути переопределения шаблонов в FSC:

lib.fluidContent {
   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>    
person Bernd Wilke πφ    schedule 07.01.2018
comment
Так вы имеете в виду, переопределить макет по умолчанию? Вот что я сделал. - person Sybille Peters; 08.01.2018
comment
Вы реализовали переопределение только для своего плагина. почему бы не улучшить FSC полностью? (см. мою правку выше) хорошо: вам нужно создать условие в вашем переопределении, которое оценивается каждый раз, но копировать все FSC для вашего плагина не намного проще. - person Bernd Wilke πφ; 08.01.2018
comment
Бернд, я постараюсь убрать эту путаницу вопроса. Я постараюсь сделать это так, чтобы ваш ответ не нарушился. - person Sybille Peters; 21.02.2018
comment
Начиная с TYPO3 V8, используется lib.contentElement вместо lib.fluidContent. - person Tobias Gaertner; 01.08.2019

Мое решение

Мне удалось найти рабочее решение: я переопределил гибкий шаблон 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>
 ....

Контроллер / MyController.php: необходимо добавить данные tt_content (поскольку требуются header, header_layout, uid и т. Д.)

$data = $this->configurationManager->getContentObject()->data;
$this->view->assign('data', $data);
person Sybille Peters    schedule 21.02.2018