Foros del Web » Programando para Internet » PHP » Symfony »

[SOLUCIONADO] Recorrer array anidado en twig

Estas en el tema de Recorrer array anidado en twig en el foro de Symfony en Foros del Web. Hola a todos. Soy novato en Symfony2. Estoy tratando de mostrar todos los valores de un array anidado en otro array (trabajo con MongoDB pero ...
  #1 (permalink)  
Antiguo 06/06/2014, 08:02
 
Fecha de Ingreso: junio-2012
Mensajes: 46
Antigüedad: 12 años, 4 meses
Puntos: 0
Recorrer array anidado en twig

Hola a todos.

Soy novato en Symfony2. Estoy tratando de mostrar todos los valores de un array anidado en otro array (trabajo con MongoDB pero el sistema pienso que sería igual para un array obtenido por medio de DQL). El array es el siguiente:

Código:
array (size=1)
  0 => 
    object(Dariboo\CursosBundle\Document\Cursos)[348]
      protected 'id' => string '5384c3ca5e5c3bc8cc152f4d' (length=24)
      protected 'nombre' => string 'Curso de PHP + MySQL con certificado' (length=36)
      protected 'slug' => string 'curso-php-mysql-con-certificado' (length=31)
      protected 'keywords' => 
        array (size=3)
          0 => string 'curso php' (length=9)
          1 => string 'curso' (length=5)
          2 => string 'MySQL' (length=5)
      protected 'descripcionCorta' => string 'bla bla bla...' (length=14)
      protected 'descripcion' => string 'bla bla larga bla bla bla bla bla bla bla bla bla bla bla' (length=57)
      protected 'fechaInicio' => string '-2012' (length=5)
      protected 'fechaFinal' => string '-2001' (length=5)
      protected 'telefono' => string '915604234' (length=9)
      protected 'fax' => string '915690948' (length=9)
      protected 'direccion' => string 'C/ Atapuerca, 12 1º-C' (length=22)
      protected 'horas' => int 15
      protected 'numeroPlazas' => string '50' (length=2)
      protected 'onlinePresencial' => string 'online' (length=6)
      protected 'precio' => string '32.4' (length=4)
      protected 'rutafoto' => string 'curso1.jpg' (length=10)
      protected 'ciudad' => string 'Madrid' (length=6)
      protected 'provincia' => string 'Madrid' (length=6)
      protected 'pais' => string 'España' (length=7)
      protected 'codigoPostal' => string '28255' (length=5)
      protected 'organizador' => string 'Academia de informática Escorial'
Y lo que trato de obtener son los valores de "keywords".

El controlador es el siguiente:

Código PHP:
public function tagsAction($tags)
    {    
        
$repository $this->get('doctrine_mongodb')
            ->
getManager()
            ->
getRepository('CursosBundle:Cursos');
        
        
$cursos $repository->findByKeywords($tags);
        
        if (!
$cursos) {
            throw 
$this->createNotFoundException('No curso found for id '.$tags);
        }
        
        return 
$this->render('CursosBundle:Etiquetas:cursosTags.html.twig', array('cursos' => $cursos));
    } 
Y el twig:

Código HTML:
{% for curso in cursos %}
		<div class="floatleft" id="curDetWrapper">			
			<section class="box" id="curDetBox">					
				<div class="floatleft" id="curDetImg">
					<img alt="{{ curso.nombre }}" src="{{ asset('images/cursos/' ~ curso.rutafoto) }}" />
				</div>									
				<div class="floatleft" id="curDetCarac">
					<ul>	
						<h2 class="curDetNom">{{ curso.nombre }}</h2>
						<li><span class="curDetOrg"></span><span class="curDetOrgDesc">{{ curso.organizador }}</span></li>
						<li><span class="curAmbito"></span><span class="curAmbitoDesc">{{ curso.onlinePresencial }} ({{ curso.horas }} horas)</span></li>
						<li><span class="curDetHor"></span><span class="curDetHorDesc">Del <strong>{{ curso.fechaInicio }}</strong> al <strong>{{ curso.fechaFinal }}</strong> </span></li>
					</ul>
					<div class="curDetObj"><ul><li>Aprenderás los conocimientos necesarios para convertirte en el Brand Management que las empresas necesitan. Todos los alumnos tienen acceso a un tutor online para cualquier tipo de consulta de carácter académico.</li></ul></div>							
					
						{{dump(cursos)}}
						
				</div>
			</section>			
		</div>
    {% endfor %}
Si siempre tuviera el mismo número de valores los podría obtener con {{ curso.keywords[0]}}{{ curso.keywords[1]}}{{ curso.keywords[2]}}, pero el número de éstos es variable, debería iterar para obtenerlos de forma dinámica. Lo he intentado de muy diferentes formas entre ellas:

Código HTML:
{% for cur in curso %}
		{{cur.keywords}}							
	{% endfor %}
Pero obtengo valores vacíos.

Llevo atascado bastante en esto y no creo que deba ser tan difícil. ¿Alguien podría echarme una mano?

Gracias.
  #2 (permalink)  
Antiguo 06/06/2014, 09:44
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 4 meses
Puntos: 379
Respuesta: Recorrer array anidado en twig

Puedes probar algo como esto
Código PHP:
Ver original
  1. {% for curso in cursos %}
  2.     {#.. HTML, etc..#}
  3.    {% if curso.keywords|length > 0 %}
  4.         <ul>
  5.             {% for keyword in curso.keywords %}
  6.                <li>{{ keyword }}</li>
  7.             {% endfor %}
  8.         </ul>
  9.        {% endif %}
  10. {% endfor %}
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 06/06/2014, 10:35
 
Fecha de Ingreso: junio-2012
Mensajes: 46
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Recorrer array anidado en twig

Es cuando veo algo tan sencillo y funcional como esto cuando me dan ganas de tirarme de los pelos. Algo tan sencillo como no iterar sobre el objeto cursos, sino sobre el array contenido en este (curso.keywords). La verdad que estuve probando varias cosas y probablemente lo "rodeé", no sabía que pudiera hacerse así.
Lo único que no me hará falta el condicional ya que en MongoDB se guardan documentos y es perfectamente escalable, si hay datos serán para mostrarse, en caso contrario no se mostrará nada (no sé si me explico).

En cualquier caso mil gracias por la ayuda, llevaba atascado desde ayer en esta nimiedad.

Saludos!

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:22.