Comunidad de diseño web y desarrollo en internet online

Navegacion especifica sobre directorios con PHP (importante)

Citar            
MensajeEscrito el 18 Oct 2006 04:26 am
Hola a todos, estoy en medio de una polemica, y es que mi jefe me ordeno hacer un trabajito (una aplicacion) que me permita navegar en tiempo real sobre una estructura de directorios, me explico a continuacion:

Sucede que no se para que lo necesita, ni el uso que le va a dar, etc. solo se que me ha hecho un hincapie extremo, pero en fin, las carpetas responden a cierta y determinada fecha como nombre, ejemplo: 30/01/2006, bien, PHP tiene que entender esas fechas, de manera tal que, yo pueda crear un calendario y cuando haga click en determinada fecha, se me liste en el navegador las o la carpeta que correspondan a la fecha seleccionada.

En fin, en la raiz del sitio va a haber un index.php y una carpeta que contiene en su interior todas las carpetas que poseen como nombre fechas en el formato 00/00/0000 [dia, mes, año]. Bien, visualmente en la pagina web debe aparecer un calendario (el cual tampoco se como hacerlo) y cada dia es un vinculo a las o a la carpeta que corresponda con el mismo.

Como logro eso?????

Es de extrema urgencia por favor.

El grano de arena de cada cual me sera muy util.

Gracias mil desde ya.

Saludos

Por kaze

6 de clabLevel



Genero:Masculino  

Ciudad de la Habana, Cuba.

firefox
Citar            
MensajeEscrito el 18 Oct 2006 01:18 pm
1.- Hay como hacer un calendario en la sección de tutoriales

2.- La mejor forma de organizar el tema es hacerlo justo al contrario año/mes/día
Así tendrías muy pocas carpetas en un principio 2006,2007
12 carpetas dentro de ellos y 28-31 en el siguiente nivel
A fin de organizarse es más intuitivo, por ejemplo si llegado el momento te dice de listar todas los archivos de un determinado es de un determinado año, aunque para hacer estricta y únicamente lo que pides no hay diferencia alguna

3.- Mira la funcion readdir de php (link allí) hay varios ejemplos, pero dependerá de qué quieres hacer exactamente. Por ejemplo, en este código de la web, se puede modificar ligeramente para hacer algo como :

Código :

<?php
// Note that !== did not exist until 4.0.0-RC2

$directorio_a_leer = $_GET["directorio"];

if ($handle = opendir($directorio_a_leer)) {
   echo "Directory handle: $handle\n";
   echo "Files:\n";

   /* This is the correct way to loop over the directory. */
   while (false !== ($file = readdir($handle))) {
       echo "$file\n";
   }

   /* This is the WRONG way to loop over the directory. */
   while ($file = readdir($handle)) {
       echo "$file\n";
   }

   closedir($handle);
}
?> 


Si al php lo llamamos "leerdir.php", sólo tendríamos que llamarlo de la siguiente forma

leerdir.php?directorio=/año/mes/día/

por ejemplo

leerdir.php?directorio=/2006/10/12/

Y nos daría el listado de archivos de esa carpeta

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

clabbrowser
Citar            
MensajeEscrito el 18 Oct 2006 01:44 pm
Quizás te sirva

http://www.cristalab.com/foros/viewtopic.php?t=25697

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 20 Oct 2006 06:03 pm
Esto es lo que hasta ahora he logrado:

Código :

<?php

function generate_calendar($year, $month, $days = array(), $day_name_length = 3, $month_href = NULL, $first_day = 0, $pn = array()){
    $first_of_month = gmmktime(0,0,0,$month,1,$year);

#mktime va a corregir automaticamente si se pone alguna fecha INCORRECTA

    $day_names = array(); #generate all the day names according to the current locale
    for($n=0,$t=(3+$first_day)*86400; $n<7; $n++,$t+=86400)
        $day_names[$n] = ucfirst(gmstrftime('%A',$t));

    list($month, $year, $month_name, $weekday) = explode(',',gmstrftime('%m,%Y,%B,%w',$first_of_month));
    $weekday = ($weekday + 7 - $first_day) % 7; #adjust for $first_day
    $title   = htmlentities(ucfirst($month_name)).'&nbsp;'.$year;

    @list($p, $pl) = each($pn); @list($n, $nl) = each($pn);
    if($p) $p = '<span class="calendar-prev">'.($pl ? '<a href="'.htmlspecialchars($pl).'">'.$p.'</a>' : $p).'</span>&nbsp;';
    if($n) $n = '&nbsp;<span class="calendar-next">'.($nl ? '<a href="'.htmlspecialchars($nl).'">'.$n.'</a>' : $n).'</span>';
    $calendar = '<table class="calendar">'."\n".
        '<caption class="calendar-month">'.$p.($month_href ? '<a href="'.htmlspecialchars($month_href).'">'.$title.'</a>' : $title).$n."</caption>\n<tr>";

    if($day_name_length){ #if the day names should be shown ($day_name_length > 0)
        foreach($day_names as $d)
            $calendar .= '<th abbr="'.htmlentities($d).'">'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'</th>';
        $calendar .= "</tr>\n<tr>";
    }

    if($weekday > 0) $calendar .= '<td colspan="'.$weekday.'">&nbsp;</td>'; #initial 'empty' days
    for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){
        if($weekday == 7){
            $weekday   = 0; #start a new week
            $calendar .= "</tr>\n<tr>";
        }
        if(isset($days[$day]) and is_array($days[$day])){
            @list($link, $classes, $content) = $days[$day];
            if(is_null($content))  $content  = $day;
            $calendar .= '<td'.($classes ? ' class="'.htmlspecialchars($classes).'">' : '>').
                ($link ? '<a href="'.htmlspecialchars($link).'">'.$content.'</a>' : $content).'</td>';
        }
        else $calendar .= "<td>$day</td>";
    }
    if($weekday != 7) $calendar .= '<td colspan="'.(7-$weekday).'">&nbsp;</td>'; 

    return $calendar."</tr>\n</table>\n";
}

   $date = date(omd);
   $dia = date(d);
   $day = array();
   for ($i = 1; $i <= date(d); $i++)
   {
      $link = array('http://proxystats.gcc.cu/' . date(om) . $i . '/diario.html','linked-day');
      $days[$i]=$link;
   };
   
    echo generate_calendar(date(o), date(m), $days, 3, NULL);

?>


El trabajo consta de que en cada dia se autohaga un vinculo a las estadisticas de navegacion de ese dia, la cual esta en un fichero .html dentro de una carpeta con el nombre de 20061020, en este caso correspondiente a hoy dia 20 de octubre de 2006, y asi sucesivamente y regresivamente, o sea, para el dia de 10 de septiembre de 2006 seria 20060910, estas carpetas con el fichero .html se crean diariamente y automaticamente, bien, el fichero index.php debe tener en su interior la manera de detectar eso y cuando suceda, automaticamente hace un vinculo en el calendario sobre el dia correspondiente al que detecto.

Bien esa es la filosofia.

Ahora bien, hasta ahora he logrado crear el calendario, y logro que se hagan los vinculos, pero hay un problemita, logro que se me haga el vinculo a todos los dias de hoy hacia atras, o sea, del presente hacia atras le crea el vinculo a todos los dias, pero no es eso precisamente lo que busco lograr, sino que se cree el vinculo, siempre que en el servidor detecte que esta el fichero .html, de lo contrario, no haga nada.

Espero haberme explicado bien.

Saludos.

PD: Por favor, lo que sea que me vayan a decir, necesito que si no es mucha molestia, me lo ejemplifiquen, para ir mas al grano, gracias.

Por kaze

6 de clabLevel



Genero:Masculino  

Ciudad de la Habana, Cuba.

firefox
Citar            
MensajeEscrito el 20 Oct 2006 06:11 pm
A mi manera de ver, no creo que necesites crear un fichero para cada dia. En verdad yo manejaria eso con base de datos. Al estilo como lo hacen los blogs, que algunos ponen un calendario completo y resaltan los dias en que se hayan publicado los articulos, por ejemplo: Mx Blog . En tu caso no serían articulos sino estadisticas de navegacion ( que no entiendo muy bien en realidad).

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 20 Oct 2006 06:58 pm
Ok, mira, sucede que vivo en Cuba y trabajo en una empresa en la que se le da a los usuarios un acceso a internet por una cuota de 100 megas al mes (ridiculo) y la aplicacion que genera las cuotas de navegacion genera un .log diario, en cuyo fichero guarda toda la informacion del dia con respecto a la navegacion, bien, en el servidor tenemos un analizador de logs, el cual toma los datos de ese log y lo hace una pagina html con una visualizacion mucho mas agradable y facil de leer, bien todo es un proceso automatico, y mi objetivo es que en el momento en que se cree la carpeta con el html del dia, mi fichero php cree tambien automaticamente un vinculo con respecto al dia.

Ahora bien, me mostrastes un blog que lo hace, como????? O sea, se que se logro en ese caso con bases de datos, dime como se logro en ese caso????, no obstante eso es algo que el mismo php puede hacer solo sin necesidad de bases de datos, a mi no me interesa hacerlo de la manera que sea, me da lo mismo con bases de datos o con php.

Saludos.

Por kaze

6 de clabLevel



Genero:Masculino  

Ciudad de la Habana, Cuba.

firefox
Citar            
MensajeEscrito el 20 Oct 2006 08:11 pm
Ya lo logre!!!! Todo estaba en hacer una navegacion de directorios y ya, de esa manera PHP se da cuenta de cuando esta presente el fichero html y en dependencia de lo que encuentre crea o no el vinculo. Aqui les dejo el codigo por si les hace falta algo asi algun dia.

Eso si, tengo un problemita, quiero crear una flecha hacia atras para que las personas puedan revizar sus navegaciones de meses atras, como lo logro????? y como es logico, cuando estemos en un mes pasado aparezca tambien una flecha hacia adelante, para ir al mes presente.

Como lo logro???????

Código :

<?php

function generate_calendar($year, $month, $days = array(), $day_name_length = 3, $month_href = NULL, $first_day = 0, $pn = array()){
    $first_of_month = gmmktime(0,0,0,$month,1,$year);

#mktime va a corregir automaticamente si se pone alguna fecha INCORRECTA

    $day_names = array(); #generate all the day names according to the current locale
    for($n=0,$t=(3+$first_day)*86400; $n<7; $n++,$t+=86400)
        $day_names[$n] = ucfirst(gmstrftime('%A',$t));

    list($month, $year, $month_name, $weekday) = explode(',',gmstrftime('%m,%Y,%B,%w',$first_of_month));
    $weekday = ($weekday + 7 - $first_day) % 7; #adjust for $first_day
    $title   = htmlentities(ucfirst($month_name)).'&nbsp;'.$year;

    @list($p, $pl) = each($pn); @list($n, $nl) = each($pn);
    if($p) $p = '<span class="calendar-prev">'.($pl ? '<a href="'.htmlspecialchars($pl).'">'.$p.'</a>' : $p).'</span>&nbsp;';
    if($n) $n = '&nbsp;<span class="calendar-next">'.($nl ? '<a href="'.htmlspecialchars($nl).'">'.$n.'</a>' : $n).'</span>';
    $calendar = '<table class="calendar">'."\n".
        '<caption class="calendar-month">'.$p.($month_href ? '<a href="'.htmlspecialchars($month_href).'">'.$title.'</a>' : $title).$n."</caption>\n<tr>";

    if($day_name_length){ #if the day names should be shown ($day_name_length > 0)
        foreach($day_names as $d)
            $calendar .= '<th abbr="'.htmlentities($d).'">'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'</th>';
        $calendar .= "</tr>\n<tr>";
    }

    if($weekday > 0) $calendar .= '<td colspan="'.$weekday.'">&nbsp;</td>'; #initial 'empty' days
    for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){
        if($weekday == 7){
            $weekday   = 0; #start a new week
            $calendar .= "</tr>\n<tr>";
        }
        if(isset($days[$day]) and is_array($days[$day])){
            @list($link, $classes, $content) = $days[$day];
            if(is_null($content))  $content  = $day;
            $calendar .= '<td'.($classes ? ' class="'.htmlspecialchars($classes).'">' : '>').
                ($link ? '<a href="'.htmlspecialchars($link).'">'.$content.'</a>' : $content).'</td>';
        }
        else $calendar .= "<td>$day</td>";
    }
    if($weekday != 7) $calendar .= '<td colspan="'.(7-$weekday).'">&nbsp;</td>'; 

    return $calendar."</tr>\n</table>\n";
}
   $date = date(omd);
   $dia = date(d);
   $day = array();
   for ($i = 1; $i <= date(d); $i++)
   {
      
      if (file_exists('./' . date(om) . $i . '/diario.html'))
      {      
      $link = array('http://proxystats.gcc.cu/' . date(om) . $i . '/diario.html','linked-day');
      $days[$i]=$link;
      }       
   };
   
    echo generate_calendar(date(o), date(m), $days, 3, NULL);

?>

Por kaze

6 de clabLevel



Genero:Masculino  

Ciudad de la Habana, Cuba.

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.