• User Attivo

    Creare calendario in PHP

    Ciao a tutti vorrei realizzare un calendario come questo:

    imageimage

    Potete trovarlo su grosseto.coni.it
    Fatemi sapere vi prego.


  • User Attivo

    Ciao talkoman,
    basta un po' di pazienza... vedila così: quella è una semplice tabella colorata con un po' di numeri, che sai perfettamente impostare una volta noto l'anno e il mese, che se osservi nell'esempio che hai indicato vengono passati nell'URL come variabile*** $_GET***. 😄

    Di default ovviamente userai la funzione date() di ***php ***per ottenere il mese e l'anno di riferimento...

    :ciauz:


  • User Attivo

    allora ho fatto così:

    [PHP]$giorno = Array("L","M","M","G","V","S","D");
    $nomemese = Array("Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno", "Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre");
    $aa=$_REQUEST['aa'];
    if ($aa=="")
    $aa=date("Y");
    $mm=$_REQUEST['mm'];
    if ($mm=="")
    $mm=date("n");
    $anno=$aa;
    $mese=$mm;
    if ($mese==1)
    $back="aa=".($anno-1)."&mm=12";
    else
    $back="aa=".$anno."&mm=".($mese-1);
    if ($mese==12)
    $next="aa=".($anno+1)."&mm=1";
    else
    $next="aa=".$anno."&mm=".($mese+1);
    echo " <div align='center'><div class='mese'>";
    echo "<a href='".$_SERVER['PHP_SELF']."?".$back."'>«</a>   ";
    echo "<b>".$nomemese[$mm-1]."  ".$aa."</b>   ";
    echo "<a href='".$_SERVER['PHP_SELF']."?".$next."'>»</a>";
    echo " </div></div>";
    echo "<table align='center'>";
    // ciclo per i giorni della settimana
    echo " <tr>";
    for ($i=0;$i<7;$i++)
    echo " <th class='cal_days'>".$giorno*."</th>";
    echo " </tr>";
    $primo=mktime(0,0,0,$mm,1,$aa); //calcolo il primo giorno del mese
    $delta=date("w",$primo)-1;
    echo " <tr>";
    for ($i=0;$i<$delta;$i++){
    echo " <td> </td>";
    }
    for ($i=1;$i<=date("t",$primo);$i++){
    if (($i+$delta)%7==1)
    echo " <tr>"; //inizio riga
    if (($i==date("d"))&&($mm==date("n"))&&($aa==date("Y")))
    echo " <td style='border:1px solid #f00' class='oggi'><a class='".$oggi."' href='calendario.php?m=".$mm."&g=".$i."&a=".$aa."'>".$i."</td>";
    elseif((($i<date("d"))&&($mm==date("n"))&&($aa<=("Y"))) || (($mm<date("n"))&&($aa<=("Y"))))
    echo " <td class='default'><a class='".$default."' href='calendario.php?m=".$mm."&g=".$i."&a=".$aa."'>".$i."</td>";
    else
    echo " <td class='default'>".$i."</td>";
    if (($i+$delta)%7==0)
    echo " </tr>"; //chiusura riga
    }
    echo "</table>";
    }[/PHP]

    in modo che posso aprire le news per esempio di tutte le date inferiori a quella odierna e funziona. Ma appena arrivo a gennaio 2009 mi fa cliccare tutte le date.....
    capito?
    se no cerco di spiegare meglio....


  • User Attivo

    ti sei perso le due date alla 9a riga dal basso:

    elseif((($i<date("d"))&&($mm==date("n"))&&($aa<=date("Y"))) || (($mm<date("n"))&&($aa<=date("Y"))))

    rimettile e funiona tutto!

    :ciauz:


  • User Attivo

    ok grazie!!! e quando clicco su una data di ottobre, per esempio, si apre la pagina come nel link sopra....ma il calendario ritorna a novembre...come faccio a farlo restare nel mese della data cliccata?
    grazie!


  • User Attivo

    Basta che nella URL del link metti anche tutti i paramentri $_GET della URL visualizzata nella barra.


  • User Attivo

    ok fatto!!!
    grazie!!!
    se vuoi posto il codice completo e corretto se pensi che possa servire a qualcuno...


  • User Attivo

    Si, posta pure il codice, che credo possa essere utile ad altri.
    Grazie!
    :ciauz:


  • User Attivo

    eccolo sottoforma di funzione...

    [PHP]<?php function cal(){
    echo "<br /><br /><br />";
    $giorno = Array("L","M","M","G","V","S","D");
    $nomemese = Array("Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno", "Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre");
    $aa=$_REQUEST['aa'];
    if ($aa=="")
    $aa=date("Y");
    $mm=$_REQUEST['mm'];
    if ($mm=="")
    $mm=date("n");
    $anno=$aa;
    $mese=$mm;
    if ($mese==1)
    $back="aa=".($anno-1)."&mm=12";
    else
    $back="aa=".$anno."&mm=".($mese-1);
    if ($mese==12)
    $next="aa=".($anno+1)."&mm=1";
    else
    $next="aa=".$anno."&mm=".($mese+1);
    echo " <div align='center'><div class='mese'>";
    echo "<a href='".$_SERVER['PHP_SELF']."?".$back."'>«</a>   ";
    echo "<b>".$nomemese[$mm-1]."  ".$aa."</b>   ";
    echo "<a href='".$_SERVER['PHP_SELF']."?".$next."'>»</a>";
    echo " </div></div>";
    echo "<table align='center'>";
    // ciclo per i giorni della settimana
    echo " <tr>";
    for ($i=0;$i<7;$i++)
    echo " <th class='cal_days'>".$giorno*."</th>";
    echo " </tr>";
    $primo=mktime(0,0,0,$mm,1,$aa); //calcolo il primo giorno del mese
    $delta=date("w",$primo)-1;
    echo " <tr>";
    for ($i=0;$i<$delta;$i++){
    echo " <td> </td>";
    }
    for ($i=1;$i<=date("t",$primo);$i++){
    if (($i+$delta)%7==1)
    echo " <tr>"; //inizio riga
    if (($i==date("d"))&&($mm==date("n"))&&($aa==date("Y")))
    echo " <td style='border:1px solid #f00' class='oggi'><a class='".$oggi."' href='calendario.php?mm=".$mm."&gg=".$i."&aa=".$aa."'>".$i."</td>";
    elseif((($i<date("d"))&&($mm==date("n"))&&($aa<=date("Y"))) || (($mm<date("n"))&&($aa<=date("Y"))))
    echo " <td class='default'><a class='".$default."' href='calendario.php?mm=".$mm."&gg=".$i."&aa=".$aa."'>".$i."</td>";
    else
    echo " <td class='default'>".$i."</td>";
    if (($i+$delta)%7==0)
    echo " </tr>"; //chiusura riga
    }
    echo "</table>";
    }
    ?>[/PHP]


  • User

    Ciao!

    Ho provato ad usare questo calendario ed a febbraio di quest'anno, ma anche a marzo, (in pratica ogni volta che il primo del mese è domenica) viene impaginato come lunedì...

    Succede solo a me?

    :bho:


  • User Attivo

    No....purtroppo succede anche a me...non capisco perchè....