Typo3 Fluid - Como faço para verificar se dois ou mais colPos possuem conteúdo e depois imprimir HTML

StackOverflow https://stackoverflow.com//questions/25006224

Pergunta

Desejo imprimir o seguinte HTML apenas se um ou mais colPos contiver conteúdo.Se nenhum tiver elementos de conteúdo, não quero imprimir este bloco (toda a "linha") de HTML.

<div class="row">
  <div class="col-sm-4">
      <f:cObject typoscriptObjectPath="lib.dynamicContent" data="5" />
  </div>
  <div class="col-sm-4">
      <f:cObject typoscriptObjectPath="lib.dynamicContent" data="6" />
  </div>
  <div class="col-sm-4">
      <f:cObject typoscriptObjectPath="lib.dynamicContent" data="7" />
  </div>
</div>

Pensei em pegar o colPos e tentar fazer uma condição OR no Fluid.Mas não tenho ideia de como fazer isso.Eu sei que posso verificar um por um assim:

<f:if condition="{f:cObject(typoscriptObjectPath: 'lib.dynamicContent', data: '5')}">
   ...HTML for colPos 5 HERE...
</f:if>

Mas eu não quero fazer isso.No meu template tenho quase 50 colPos diferentes e eles estão organizados por blocos (linhas).Como colPos 1 a 5 é um bloco (linha).colPos 10 a 25 em outro bloco (linha).Mas algumas páginas não usarão alguns blocos (linhas) de colPos, portanto não há razão para imprimir o código HTML para esses blocos (linhas) de colPos não utilizados.

Obrigado pela ajuda!

Foi útil?

Solução

Uma solução apenas de fluido seria atribuir os resultados do <f:cObject>-ViewHelpers cada um para uma variável e, em seguida, use a concatenação dessas variáveis ​​em uma condição.O v:-namespace no exemplo é o namespace da extensão vhs:

<v:variable.set name="col-5" value="{f:cObject(typoscriptObjectPath: 'lib.dynamicContent', data: '5')}"/>
<v:variable.set name="col-6" value="{f:cObject(typoscriptObjectPath: 'lib.dynamicContent', data: '6')}"/>
<v:variable.set name="col-7" value="{f:cObject(typoscriptObjectPath: 'lib.dynamicContent', data: '7')}"/>

<f:if condition="{col-5}{col-6}{col-7}">
    <div class="row">
        <div class="col-sm-4">{col-5}</div>
        <div class="col-sm-4">{col-6}</div>
        <div class="col-sm-4">{col-7}</div>
    </div>
</f:if>

É claro que você deve mover esse material para parcial, que obtém uma matriz de colunas para imprimir como parâmetro.Então você precisa escrever a lógica apenas uma vez.

Além disso, você deve pensar novamente, se você realmente preciso de 25 colunas.

Outras dicas

Desde o TYPO3 8.6, isso é possível sem a extensão "vhs":

<f:variable name="col-5">
    <f:cObject typoscriptObjectPath="lib.dynamicContent" data="5" />
</f:variable>
<f:if condition="{col-5}">
     <f:format.raw>{col-5}</f:format.raw>
</f:if>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top