Pregunta

Quiero imprimir el siguiente HTML solo si uno o más de los colPos tienen contenido.Si ninguno tiene elementos de contenido, entonces no quiero imprimir este bloque (la "fila completa") 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>

Pensé en obtener colPos e intentar realizar una condición OR en Fluid.Pero no tengo idea de cómo hacerlo.Sé que puedo comprobar uno por uno así:

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

Pero no quiero hacer eso.En mi plantilla tengo casi 50 colPos diferentes y están organizados por bloques (filas).Como colPos 1 a 5 es un bloque (fila).colPos 10 a 25 en otro bloque (fila).Pero algunas páginas no usarán algunos bloques (filas) de colPos, por lo que no hay razón para imprimir el código HTML para esos bloques (filas) de colPos no utilizados.

¡Gracias por tu ayuda!

¿Fue útil?

Solución

Una solución basada únicamente en fluidos sería asignar los resultados de la <f:cObject>-ViewHelpers cada uno a una variable, y luego usa la concatenación de estas variables en una condición.El v:-namespace en el ejemplo es el espacio de nombres de la extensión 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>

Por supuesto, deberías mover esto a un parcial, que obtiene una matriz de columnas para imprimir como parámetro.Entonces necesitas escribir la lógica solo una vez.

Además, deberías pensarlo de nuevo, si en realidad Necesito 25 columnas.

Otros consejos

Dado que TYPO3 8.6, esto es posible sin la extensión "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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top