cris98
Esto es probablemente relativamente fácil de hacer, pero soy nuevo en Twig y estoy frustrado.
Estoy adaptando el código de esta respuesta: https://stackoverflow.com/a/24058447
la matriz está hecha en PHP a través de este formato:
$link[] = array(
'link' => 'http://example.org',
'title' => 'Link Title',
'display' => 'Text to display',
);
Luego, a través de twig, le agrego html, antes de implosionar:
<ul class="conr">
<li><span>{{ lang_common['Topic searches'] }}
{% set info = [] %}
{% for status in status_info %}
{% set info = info|merge(['<a href="https://stackoverflow.com/questions/32633853/{{ status[\"link\'] }}" title="https://stackoverflow.com/questions/32633853/{{ status[\"title\'] }}">{{ status[\'display\'] }}</a>']) %}
{% endfor %}
{{ [info]|join(' | ') }}
</ul>
Pero estoy recibiendo:
error [8] Conversión de matriz a cadena en F:\localhost\www\twig\include\lib\Twig\Extension\Core.php en la línea 832
Se soluciona cuando elimino esta línea, pero no se muestra:
{{ [info]|join(' | ') }}
¿Alguna idea de cómo puedo implosionar esto correctamente?
** actualizar **
Usando la función de volcado de Twig no devuelve nada. Parece que ni siquiera lo está cargando en la matriz en primer lugar. ¿Cómo puedo cargar información en una nueva matriz?
info es una matriz, por lo que debe escribir simplemente
{{ info|join(', ') }}
para mostrar su matriz de información.
[info] es una matriz con un valor: la información de la matriz.
-
NB: solo se trabaja con valores en el caso de una matriz asociativa
– Delfina
17 de noviembre de 2017 a las 15:39
-
@Delphine Si desea unir las claves de una matriz asociativa, puede pasar la matriz a través del
keys
filtrar primero, es decir{{ info | keys | join(', ') }}
– Dan Abrey
14 de diciembre de 2017 a las 11:31
Realmente no debería estar construyendo estructuras de datos complejas dentro de las plantillas de Twig. Puede lograr el resultado deseado de una manera más idiomática y legible como esta:
{% for status in status_info %}
<a href="https://stackoverflow.com/questions/32633853/{{ status.link }}" title="{{ status.title }}">{{ status.display }}</a>
{% if not loop.last %}|{% endif %}
{% endfor %}
-
El problema es, sin embargo, implosionarlo. Necesito cada elemento separado por un ‘ | ‘ pero cuando hago esto manualmente, hay un “|” extra en el lado derecho de la página. Esa es la única forma que se me ocurre para obtener solo la cantidad necesaria.
– Chris98
17/09/2015 a las 15:40
-
Uhm… eso es lo que
if not loop.last
se supone que previene…!?– deceze
♦17/09/2015 a las 15:41
-
De acuerdo. Gracias. Nunca había oído hablar de eso. Soy bastante nuevo en Twig.
– Chris98
17/09/2015 a las 15:41
Desarrollador
Puede usar json_encode para serializar la matriz como cadena, luego mostrar bastante – construir en ramita
{{ array|json_encode(constant('JSON_PRETTY_PRINT')) }}
-
Explique eso más: ¿qué hace su código? Tenga en cuenta que otros deberían poder aprender de ese código.
–Nico Haase
28 de junio de 2019 a las 14:48
-
Esta es la mejor respuesta, porque convertirá toda la estructura en una cadena, mientras que
join
fallará si la variable es una matriz anidada (por ejemplo, intente['a', ['b'] ]
). Útil para la depuración.– Fabien Snauwaert
2 de abril de 2020 a las 8:52
Jorge
si necesita una matriz asociativa:
{{info|json_encode(constant('JSON_PRETTY_PRINT'))|raw}}
si estás leyendo esto en 2023,
join
admite dos parámetros:glue
,and
(“and
: El separador para el último par de elementos de entrada […] Eland
El argumento se agregó en Twig 1.37.“)– Sandra
18 de enero a las 11:35