• User Attivo

    up


  • User Attivo

    @talkoman said:

    tornando al calendario di Pater.....
    non si può cambiare mese? cioè come implemento delle freccette per andare aventi e/o indietro nei mesi?

    nessun aiuto?


  • Consiglio Direttivo

    Ciao talkoman,
    immagino tu debba lavorare su questo pezzo di codice:
    [php]$dati['mese_num'] = date("n", time()); // Mese corrente ( numerico )
    $dati['mese_text'] = date("F", time()); // Mese Corrente ( testuale )
    $dati['oggi'] = date("j", time()); // Oggi ( numerico senza eventuali zeri )
    $dati['oggi_sett'] = date("w", time()); // Oggi ( nella settimana, numerico )
    $dati['anno'] = date("Y", time()); // Anno
    [/php]
    Ovvero: assegnare alle freccette il valore del mese precedente/successivo e quindi far eseguire il codice di cui sopra modificato, che prenda il valore del mese interessato e quindi da sostituire a time().
    Per far decidere allo script quale dei due pezzi di codice eseguire basta fare un if.
    :ciauz:


  • User Attivo

    Salve a tutti. Io ho copiato il codice all'interno di una pagina, ma quando la vado ad eseguire non vine visualizzato nulla. Perché?


  • User

    @PaTeR said:

    PRATICA

    Scommetto che questa è la parte che vi piace di più :D, ma non scordatevi che PRIMA DELLA PRATICA, ci deve essere una TEORIA PERFETTA ( o quasi 😄 ).

    Ecco qui cosa il mio genio malefico è riuscito a confabulare ( Naturalmente tutto commentato per spiegarvi il funzionamento 😞

    >
        //Trovo i dati fondamentali:
        $dati['giorni_mesi'] = array(31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); // Array con i giorni dei mesi
        $dati['mese_num'] = date("n", time()); // Mese corrente ( numerico )
        $dati['mese_text'] = date("F", time()); // Mese Corrente ( testuale )
        $dati['oggi'] = date("j", time()); // Oggi ( numerico senza eventuali zeri )
        $dati['oggi_sett'] = date("w", time()); // Oggi ( nella settimana, numerico )
        $dati['anno'] = date("Y", time()); // Anno
        $dati['start'] = date("w", mktime(0,0,0, $dati['mese_num'], 1, $dati['anno'])); // Giorno della settimana del primo giorno dell'anno
        $dati['giorni_mesi'][1] = (($dati['mese_num']%400) == 0) ? 29 : 28; // Calcolo dei giorni di febbraio
        $dati['giorni_mese'] = $dati['giorni_mesi'][$dati['mese_num']-1]; // Giorni del mese corrente
        $dati['settimane_mese'] = ceil($dati['giorni_mese']/7); // Settimane del mese corrente arrotondato per eccesso.
        
        //
        // Vi sarete accorti che:
        // 1) Nel calcolo dei giorni del mese corrente c'è un -1: Questo è perchè l'array inizia da 0, non da 1
        // 2) Ho arrotondato per eccesso il calcolo delle settimane: Per evitare giorni nascosti nell'ultima settimana
        // 3) I giorni della settimana trovati da date() iniziano da 0 ( Domenica ) fino a 6 ( Sabato )
        //
        
        $info['can_start'] = FALSE; // Se il conteggio reale dei giorni può partire
        $info['to_less'] = 0; // Giorni da accumulare
    
        $text = '<div align="center">**'.$dati['mese_text'].'**</div>'.
        '<table align="center">
            <tr>
                <td class="cal_days">LU</td>
                <td class="cal_days">MA</td>
                <td class="cal_days">ME</td>
                <td class="cal_days">GI</td>
                <td class="cal_days">VE</td>
                <td class="cal_days">SA</td>
                <td class="cal_days">DO</td>
            </tr>'; // Schema fisso dei giorni della settimana
    
        //
        // Ciclo madre: Continua per tutte le settimane del mese
        //
    
        for($ciclo = 0; $ciclo <= $dati['settimane_mese']; $ciclo++)
        {
            $text .= '<tr>'; // Aggiungo una griglia
    
            //
            // Ciclo Figlio ( SubCiclo ): Avanza per tutti i giorni della settimana
            //
            
            for($subciclo = 1; $subciclo <= 7; $subciclo++)
            {
                //
                // Controllo se il ciclo può partire e se il giorno del ciclo figlio
                // corrisponde a quello della settimana del primo giorno del mese
                //
    
                if($subciclo != $dati['start'] && $info['can_start'] == FALSE)
                {
                    //
                    // Se tutti e due sono FALSE:
                    //
    
                    $text .= '<td class="cal_day"></td>'; // 1) Aggiungo una casella vuota
                    $info['to_less']++; // 2) Aggiungo un giorno da levare
    
                    continue; // 3) Faccio ricominciare il ciclo finchè uno dei due casi si riveli TRUE
                }
                else
                {
                    $info['can_start'] = TRUE; // Muto il valore di can_start in TRUE
                }
                
                //
                // Naturalmente solo uno dei due casi può rivelarsi TRUE: Solo ' $subciclo != $dati['start'] '
                // dato che can_start diverrà TRUE solo quando si avvererà la prima condizione. Così il conto può partire
                //
                // Ora mi calcolo il giorno corrente, Sommando il valore corrente della variabile di questo ciclo ai giorni
                // delle settimane trascorse ( Grazie alla moltiplizacione per 7 di $ciclo ) e levando infine i giorni
                // accumulati in precedenza. Vi ricordo che questo di seguito è la variabile contenente il giorno da mostrare,
                // non quello di oggi
    
                $dati['current_day'] = $subciclo+($ciclo*7)-$info['to_less']; // Calcolo il giorno da mostrare
                
                //
                // Controllo ci restano ancora giorni del mese
                //
    
                if($dati['current_day'] <= $dati['giorni_mese'])
                {
    
                    //
                    // Se si...
                    //
                    // Vorrete fare capire il giorno di oggi, no? Quindi cambiamo stile
                    // alla cella in caso questa corrisponda a quella di oggi.
                    //
    
                    if($dati['current_day'] == $dati['oggi']) // Controllo se il giorno da mostrare è quello di oggi
                    {
                        $tdclass = 'oggi'; // Cambio stile in 'oggi' se è oggi
                    } else {
                        $tdclass = 'default'; // Cambio stile in 'Default' se non è oggi
                    }
    
                    $text .= '<td class="'.$tdclass.'">'.$dati['current_day'].'</td>'; // Poi aggiungo la cella
                } else {
                    //
                    // Se invece non ci restano più giorni del mese, faccio terminare il ciclo
                    //
    
                    break;
                }
                
                //
                // Finisce qui il SubCiclo, se ci sono ancora settimane da mostrare il ciclo continuerà, se no, si fermerà.
                //
            }
    
            $text .= '</tr>'; // Chiudo la griglia
        }
    
        $text .= '</table>'; // Chiudo la tabella
    
    >```Beati voi che state leggendo questo script perchè non dovrete sbattere la testa su ogni muro come ho fatto io! :D
    
    Spero vi sia utile! :D  :ciauz:  :ciauz:  :ciauz:
    
    buon codice, utilissimo. Però ho scoperto un bug. I mesi che iniziano di domenica non si vedono (gennaio 2012, maggio 2011, agosto 2010).
    
    qualche idea su come risolvere questo bug?

  • Super User

    Scusate la mia lunga assenza. Purtroppo ora non ho molto tempo, vi prometto che a breve penserò ad aggiornare questo vecchio codice con uno nuovo, magari in Ajax, e penserò a correggere i bug.

    Spero di non dovervi fare aspettare tanto, vi prego però di essere pazienti comunque! ( Periodo di esami.. 😄 )


  • User Newbie

    @blekm said:

    buon codice, utilissimo. Però ho scoperto un bug. I mesi che iniziano di domenica non si vedono (gennaio 2012, maggio 2011, agosto 2010).

    qualche idea su come risolvere questo bug?

    risolvi il bug in questo modo:
    prima di iniziare il "ciclo madre" verifica se devi cominciare il mese con una domenica:

    // se devo cominciare il mese con una domenica
    if ($dati['start'] == 0)
    $domenica = true;
    else
    $domenica = false;

    poi una trentina di righe di codice sotto, prima del comando

    continue; // 3) Faccio ricominciare il ciclo finchè uno dei due casi si riveli TRUE

    aggiungi un controllo di questo tipo:

    // se sono all'ultima cella e devo cominciare il mese con una domenica
    if (($subciclo == 6) && ($domenica))
    $info['can_start'] = TRUE; // Muto il valore di can_start in TRUE

    in questo modo visualizzerai anche i mesi che cominciano con la domenica.

    Ciao!


  • User Attivo

    Forse potrebbe essere utile: c'è una funzione php che effettua una verifica sulla data

    
    checkdate($m,$d,$y);
    
    

    dove $m=mese, $d=giorno, $y=anno (tutti valori numerici).

    Restituisce 1 se la data è giusta.


  • User Newbie

    Salve, volevo creare una pagina che mostri una tabella dove nella prima colonna visualizzo la data corrente in formato Giorno della settimana in parola, giorno in numero , mese in numero.
    Questo per tutto il mese (quindi visualizzo ogni settimana tutti i giorni)
    Una cosa del genere insomma :
    [TABLE="class: grid, width: 500, align: center"]

    [TD]Data[/TD]
    [TD]Orario [/TD]
    [/TR]

    [TD]Lun 06/10[/TD]
    [TD]..[/TD]
    [/TR]

    [TD]Mar 07/10[/TD]
    [TD]...[/TD]
    [/TR]

    [TD]Mer 08/10[/TD]
    [TD]..[/TD]
    [/TR]

    [TD]Gio 09/10[/TD]
    [TD]..[/TD]
    [/TR]

    [TD]Ven 10/10[/TD]
    [TD]..[/TD]
    [/TR]

    [TD]Sab 11/10[/TD]
    [TD]..[/TD]
    [/TR]

    [TD]Dom 12/10[/TD]
    [TD]..[/TD]
    [/TR]

    [TD]Lun 13/10[/TD]
    [TD]..[/TD]
    [/TR]
    [/TABLE]

    e cosi via per tutto il mese.
    Grazieee


  • User Newbie

    Ciao Pater, ho un problema tecnico sul codice presente nel forum, precisamente sul Calendario Dinamico in PHP. Praticamente in questo punto del codice

    if($em->day[$day] === true){
    //Questa è una classe per scrivere un link se l'evento esiste (preso dal db)
    }
    else{
    echo $day;
    }
    $day++;

    devo estrapolare dal database (in base al giorno del mese) la prenotazione in riferimento al giorno, ho scritto questo codice, ma duplica i giorni in base al numero di dati presente nel ciclo while e non effettua correttamnte il ciclo if?

    $sql = "SELECT data FROM prenota";
    $result = mysql_query($sql);

    while($fetch = mysql_fetch_array($result)){
    $str_data = $fetch['data'];
    //$events[$fetch["data"]] = $fetch["data"];

    if($str_data == $day){
    //Questa è una classe per scrivere un link se l'evento esiste (preso dal db)
    echo "<a href="">$day</a>";
    }
    else{
    echo $day;
    }

    }

    $day++;

    Grazie anticipato per l'aiuto.