Foros del Web » Programando para Internet » PHP »

Menu Recursivo de PHP solo imprime primer articulo

Estas en el tema de Menu Recursivo de PHP solo imprime primer articulo en el foro de PHP en Foros del Web. Estoy creando un menu recursivo el cual al dar click en cada elemento abrira un PDF en un objeto Embed, q se encuentra en la ...
  #1 (permalink)  
Antiguo 02/04/2013, 13:25
 
Fecha de Ingreso: marzo-2013
Mensajes: 26
Antigüedad: 11 años, 8 meses
Puntos: 0
Pregunta Menu Recursivo de PHP solo imprime primer articulo

Estoy creando un menu recursivo el cual al dar click en cada elemento abrira un PDF en un objeto Embed, q se encuentra en la parte inferior de la pagina, todo funciona con el primer elemento, pero cuando debe crear el segundo elemento de cada año no lo hace, ese es mi problema, yo se no es algo complicado pero no encuentro solucion a esto, aqui mi codigo PHP:

Código PHP:
<?php
echo "<div id='cssmenu'>";
echo 
"<ul>";
echo 
"<li class='has-sub last'><a href='#'><span>Please select a Year</span></a>";
echo 
"<ul>";
$dir = new DirectoryIterator('/usr/apps/webdata/backend/assets/newsletters/temp');
$list = array();
foreach(
$dir as $file)
{
    if(
$file->isDot())
        continue;

        
$string $file;                            
                    if(
preg_match_all("#(\d{1,})#"$string$matchesPREG_SET_ORDER)) 
                    {
                            foreach(
$matches as $match
                              {
                            
$issue $match[0];
                            
                                while (list(
$key$value) = each($match)) 
                                {
                                
//TOMA EL AÑO
                                    
if (strlen ($value) == 4)
                                    {
                                    
$uyear $value;
                                    
//echo "Year: $uyear \n";
                                    
}
                                
// TOMA EL NUMERO DE ARTICULO
                                    
elseif (strlen ($value) == 1)
                                    {
                                    
$uissue $value;
                                    
//echo "Issue: $uissue \n";
                                    
}
                            
                                 }
                        
                            }
                    }    
//CREA EL BUCLE POR CADA AÑO
    
if(!isset($list[$uyear]))
    {
        
$list[$uyear] = array();
        echo 
"<li class='has-sub'><a href='#'><span>" $uyear " </span></a>";
    }    
    echo 
"<ul>";
//CREA EL BUCLE POR CADA ARTICULO DE CADA AÑO
    
if(!in_array($uissue$list[$uyear]))
    {
           
$list[$uyear][] = $uissue;
        
$a count($uissue);
        for(
$i=0;$i<$a$i++)
            {
                echo 
"<li class='last'><a href='#' onclick=myPDF('".$file."')> Issue# ".$uissue."</a></li>";
            }            
    }
            
    echo 
"</ul>";
    echo 
"</li>";
}
echo 
"</ul>";
echo 
"</li>";
echo 
"</ul>";
echo 
"</div>";    
                               
?>
Mi problema esta en el bucle donde se deberia imprimir cada Numero de Articulo, especificamente aqui:

Código PHP:
if(!in_array($uissue$list[$uyear]))
    {
           
$list[$uyear][] = $uissue;
        
$a count($uissue);
        for(
$i=0;$i<$a$i++)
            {
                echo 
"<li class='last'><a href='#' onclick=myPDF('".$file."')> Issue# ".$uissue."</a></li>";
            }            
    } 
Mi Foreach termina en el primer articulo q encuentra y deja de crear las ramas del menu, esta es mi impresion de pantalla:

Código:
Array
(
    [2014] => Array
        (
            [0] => 2
        )

    [2013] => Array
        (
            [0] => 1
        )

    [2015] => Array
        (
            [0] => 2
        )

)
Cuando en realidad deberia ser esta:
Código:
Array
(
    [2014] => Array
        (
            [0] => 2
            [1] => 4
            [2] => 3
            [3] => 1
        )

    [2013] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 4
            [3] => 2
        )

    [2015] => Array
        (
            [0] => 2
            [1] => 4
            [2] => 3
            [3] => 1
        )

)
Y tambien necesito ordenar mi respuesta por Año y por Numero de Articulo, he intentado con asort(), pero no he obtenido el resultado q ando buscando, alguien q me puede ayudar? gracias amigos!!!

Última edición por cyberjas2001; 02/04/2013 a las 13:31
  #2 (permalink)  
Antiguo 02/04/2013, 13:35
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: Menu Recursivo de PHP solo imprime primer articulo

tienes errores en el HTML, usa atributos debidamente encerrados entre comillas, y parsea url's con url_encode
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 02/04/2013, 13:39
 
Fecha de Ingreso: marzo-2013
Mensajes: 26
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Menu Recursivo de PHP solo imprime primer articulo

Cita:
Iniciado por maycolalvarez Ver Mensaje
tienes errores en el HTML, usa atributos debidamente encerrados entre comillas, y parsea url's con url_encode
Hola y gracias por contestar, pero en donde exactamente estan mis errores? no entiendo tu respuesta
  #4 (permalink)  
Antiguo 02/04/2013, 14:28
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: Menu Recursivo de PHP solo imprime primer articulo

Cita:
Iniciado por cyberjas2001 Ver Mensaje
Hola y gracias por contestar, pero en donde exactamente estan mis errores? no entiendo tu respuesta
en varios lados, recuerde que debe de generar un HTML estándar que el navegador pueda comprender, consulte un manual de HTML, para programar aplicaciones Web no sólo basta conocer PHP

<tag attribute="value"></tag>
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 02/04/2013, 14:34
 
Fecha de Ingreso: marzo-2013
Mensajes: 26
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Menu Recursivo de PHP solo imprime primer articulo

Cita:
Iniciado por maycolalvarez Ver Mensaje
en varios lados, recuerde que debe de generar un HTML estándar que el navegador pueda comprender, consulte un manual de HTML, para programar aplicaciones Web no sólo basta conocer PHP

<tag attribute="value"></tag>
Hice los cambios en todo las comillas y estoy seguro q ese no es el problema, ya q el codigo funciona con el primer elemento generado, mi problema no son las comillas, es el Foreach
  #6 (permalink)  
Antiguo 02/04/2013, 14:38
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 8 meses
Puntos: 270
Respuesta: Menu Recursivo de PHP solo imprime primer articulo

Código PHP:
Ver original
  1. if(!in_array($uissue, $list[$uyear]))
  2.     {
  3.            $list[$uyear][] = $uissue;
  4.         $a = count($uissue);
  5.         for($i=0;$i<$a; $i++)

En la primera y tercera linea, ( y en el código que precede), parece que $uissue es un valor...pero luego le haces un count() como si fuera un array?
Investiga por ahi...
  #7 (permalink)  
Antiguo 02/04/2013, 19:22
 
Fecha de Ingreso: marzo-2013
Mensajes: 26
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Menu Recursivo de PHP solo imprime primer articulo

Cita:
Iniciado por dashtrash Ver Mensaje
Código PHP:
Ver original
  1. if(!in_array($uissue, $list[$uyear]))
  2.     {
  3.            $list[$uyear][] = $uissue;
  4.         $a = count($uissue);
  5.         for($i=0;$i<$a; $i++)

En la primera y tercera linea, ( y en el código que precede), parece que $uissue es un valor...pero luego le haces un count() como si fuera un array?
Investiga por ahi...
La variable $uissue es un string. Y yo se q esa parte la tengo mal. Y x eso mi contador siempre dará 1 y no avanza a la siguiente posicion
Código PHP:
Ver original
  1. $a = count($uissue);
. Pero no se como hacerle para q tome el siguiente $uissue y lo imprima como elemento dentro del menu. Alguna idea de como podria mejorar mi condicion?

Última edición por cyberjas2001; 03/04/2013 a las 11:15
  #8 (permalink)  
Antiguo 03/04/2013, 13:37
 
Fecha de Ingreso: marzo-2013
Mensajes: 26
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Menu Recursivo de PHP solo imprime primer articulo

Despues de analizar mejor aun mi codigo, me he dado cuenta q el error se genera aqui:
Código PHP:
Ver original
  1. $a = count($uissue);
  2. for($i=0;$i<$a; $i++)
  3. {
  4.  
  5. }

Entonces trate de borrar ese For y crear el siguiente evento:
Código PHP:
Ver original
  1. $value = each($uissue);
  2. echo "<li class=last><a href=# onclick=myPDF('".$file."')> Issue# ".$value."</a></li>";

Pero me sale un error diciendome q $uissue no es un array, entonces como puedo hacerle avanzar a mi proceso, sin q solo imprima el primer articulo?
Necesito parsear el resto de articulos q estan dentro
  #9 (permalink)  
Antiguo 04/04/2013, 14:16
 
Fecha de Ingreso: marzo-2013
Mensajes: 26
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Menu Recursivo de PHP solo imprime primer articulo

Bueno al menos ya q no recibo ayuda en el foro, pude resolver uno de mis otro problemas q era el de ordernar mi lista de articulos, he podido crear una funcion para poder ordenarlos:

Código PHP:
/////// FUNCION PARA ORDENAR ARCHIVOS /////////////////
function mySortedFunction($thisfile)
{
    
$depths = array();
        
/*Explode todo los archivos para crear un array multidimensional */
    
foreach( $thisfile as $path )
    {
        
$depths[] = explode"_"$path );
    }
       
/*Ordena mi array multidimensional*/
    
sort$depths );
       
/*Implode los archivos ordenados a su estado original */
    
foreach( $depths as $path )
    {
    
/*Para probar la salida
        echo implode( "_", $path ) . "<br/>"; */
    
$mySortedFile =implode"_"$path );
    return 
$mySortedFile;
    }    

Mis archivos estan formados de la siguiente manera:
Newsletter_2013_1.pdf

Con mi funcion lo q se hace es obtiene todos los archivos de esa carpeta los desarma con mi delimitador (_) y luego de eso los vuelve a armar para q los pueda utilizar.

Con esto obtengo una lista ordenada, ahora estoy trabajando en agregar esta funcion a mi metodo recursivo.

Etiquetas: bucle, foreach, menu-dinamico, php+javascript, recursivo
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 14:50.