Tengo una matriz ('db-títulos') cuyos elementos son cadenas compuestas en la forma 'TextA * TextB'. Quiero crear la siguiente estructura HTML a partir de estos elementos de matriz: <span>TextA</span><span>TextB</span>

Para esto utilizo el siguiente script fluido:

{namespace v=FluidTYPO3\Vhs\ViewHelpers}

<f:if condition="{db-titles -> f:count()} > 1">

  <f:then>

     <!-- This works as expected, the html code will be rendered correctly -->
     <v:iterator.for from="0" to="{db-titles -> f:count()}" iteration="i">
        <span><v:format.replace content="{db-titles.{i.index}}" substring="*" replacement="</span><span>"/></span>
     </v:iterator.for>

  </f:then>

  <f:else> 
       <!-- This strangely does not work, although I - instead of running through all values of the array - just want to output the first value of it.... -->      
       <span><v:format.replace content="{v:iterator.first(haystack: db-titles)}" substring="*" replacement="</span><span>"/></span>
  </f:else>

</f:if>

Como comenté en el código fuente, todo funciona como debería en '', pero en '', donde solo quiero usar el primer valor de la matriz, la parte reemplazada (' * 'a </span><span>) se representa extrañamente como texto en lugar de HTML: <span>TextA&lt;/span&gt;&lt;span&gt;TextB</span>

¿Cómo puede ser esto?

Permítanme mencionar que utilizo la aplicación "PHPStorm" para programar. ¿Es posible que el programa represente mal el código fuente?

Gracias de antemano por cualquier ayuda!

0
Michael 28 ago. 2020 a las 16:32

1 respuesta

La mejor respuesta

Sin haber encontrado una explicación para el comportamiento extraño, he encontrado una solución: envolver <v:format.replace ... /> con <f:format.raw> ... </> evita que las etiquetas se conviertan en cadenas.

<f:if condition="{db-titles -> f:count()} > 1">

  <f:then>
     <v:iterator.for from="0" to="{db-titles -> f:count()}" iteration="i">
        <span><f:format.raw><v:format.replace content="{db-titles.{i.index}}" substring="*" replacement="</span><span>"/></f:format.raw></span>
     </v:iterator.for>
  </f:then>

  <f:else>       
     <span><f:format.raw><v:format.replace content="{v:iterator.first(haystack: db-titles)}" substring="*" replacement="</span><span>"/></(f:format.raw></span>
  </f:else>

</f:if>
0
Michael 15 sep. 2020 a las 07:14