Typo3 Fluid - Como faço para verificar se dois ou mais colPos possuem conteúdo e depois imprimir HTML
-
20-12-2019 - |
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!
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>