kalender maken

1-02-2006 20:31

kalender maken

  • Berry Langerak
  • Berry Langerak's foto

Sorry voor de vage titel, kon niets beters bedenken. Een klant vroeg mij vandaag een agenda voor hem te maken en nu is dat niet zo'n probleem, alleen heb ik echt geen idee hoe ik PHP automatisch zoiets kan laten genereren:

M D W D V Z Z
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 Enfin, je snapt het idee :P

Nu heb ik in de bron gekeken van verschillende agenda's, maar dat is helaas zo erg spagettiscripting, dat ik er echt niet uit kom. Ook op de rest van het internet zijn er of alleen maar volledige scripts te vinden, waarin dit verweeft (?! wellicht verwoven?) zit, maar nergens kan ik vinden hoe ik dit weer kan geven.

Enlighten me, if you will.

Berry

1-02-2006 20:37

Re: kalender maken

  • Laurens @scriptlord.net
  • Laurens @scriptlord.net's foto

Hmmm... Beetje scripter moet logisch nadenken voor z'n job, dus werk het eens op papier uit:

Allereerst gewoon een tabel, de eerste rij is M D W D V Z Z. Vervolgens haal je met date() het aantal dagen van de maand op (http://php.net/date) en de dag van de eerste van de week (0 (maandag) tot 6 (zondag)). Als dat hoger ligt dan 0 zul je eerst een aantal lege cellen moeten maken. Tel daarbij hoeveel en maak de rest af, sluit vervolgens je <tr>.
Ga op die manier door met de rijen...

1-02-2006 20:42

Re: kalender maken

  • Berry Langerak
  • Berry Langerak's foto

"Beetje scripter"
Au. Ik zal het even uitleggen: ik ben niet erg thuis is de date en time functies in de schone taal die men PHP noemt. Dus voor mij was het gewoon handig geweest als iemand nog iets van een klasse had liggen. Snapt u?

1-02-2006 20:48

Re: kalender maken

  • Laurens @scriptlord.net
  • Laurens @scriptlord.net's foto

Hehe, is goed, 'k zal even kijken in m'n 'archief', volgens mij heb ik ergens een kalender-class.

1-02-2006 20:57

Re: kalender maken

  • Laurens @scriptlord.net
  • Laurens @scriptlord.net's foto

Paar loze functies gestript. 't Is nogal oud, maar het werkt goed. Om het te bekijken moet je even inloggen met demo:demo op http://planyourwedding.nl en via Checklist in het menu doornavigeren naar 'kalender bekijken' (http://planyourwedding.nl/index.php?p=plannen&kalender).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
/*
 * klasse datum
 ***
 * Maak een datum en vergelijk die met andere data
 *
 */

class datum
{
    var $datum_array, $maand_tabel;
    var $kalender;
    var $data;
    var $van, $tot, $verschil, $nieuwe_datum;
    var $dagen, $maanden, $jaren;
    var $dag, $maand, $jaar;
    
    function datum ( $dag = 0, $maand = 0, $jaar = 0 )
    {
        if ( checkdate ( $maand, $dag, $jaar ) == false )
            return false;
        else
        {
            $this -> dag = $dag;
            $this -> maand = $maand;
            $this -> jaar = $jaar;
        }
    }
    
    function kalender ( $van_jaar, $tot_jaar )
    {
        if ( $tot_jaar < $van_jaar )
            return false;
        $this -> jaren = $tot_jaar - $van_jaar;
        $this -> maanden = 0;
        $this -> dagen = 0;
        for ( $i = 0; $i <= $this -> jaren; $i++ )
        {
            for ( $j = 1; $j <= 12; $j++ )
            {
                for ( $k = 1; $k <= date ( "t", mktime ( 0, 0, 0, $j, 1, $van_jaar ) ); $k++ )
                {
                    $this -> kalender[$i][$j][$k] = 1;        // of bijvoorbeeld sprintf ( "%02d-%02d-%d", $k, $j, $van_jaar );
                    $this -> dagen++;
                }
                $this -> maanden++;
            }
        }
    }
    
    function maand ( $maand, $jaar, $returnFormat, $data_array = null )
    {
        $dag = 1;
        $kolommen = 0;
        $maand_tijd = mktime ( 0, 0, 0, $maand, 1, $jaar );
        $dagen_per_maand = date ( "t", $maand_tijd );
        $return = "<table>
        <tr><td width=20>Ma</td>
        <td width=20>Di</td>
        <td width=20>Wo</td>
        <td width=20>Do</td>
        <td width=20>Vr</td>
        <td width=20>Za</td>
        <td width=20>Zo</td></tr>";
        
        $startrij = date ( "w", $maand_tijd ) - 1;
        if ( $startrij < 0 )
            $startrij = 6;
        while ( $dag <= $dagen_per_maand )
        {
            if ( $kolommen == 0 )
                $return .= "<tr>";
            if ( $startrij == 0 )
            {
                $return .= "<td";
                // Format maken
                $format = sprintf ( "%04d-%02d-%02d", $jaar, $maand, $dag );
                if ( is_array ( $data_array ) && in_array ( $format, $data_array ) )
                    $return .= " style='font-weight: bold'";
                $return .= ">" . sprintf ( $returnFormat, $dag, $maand, $jaar ) . "</td>\n";
                $dag++;
            }
            else
            {
                $startrij--;
                $return .= "<td>&nbsp;</td>\n";
            }
            
            $kolommen++;
            if ( $kolommen > 6 )
            {
                $return .= "</tr>\n\n";
                $kolommen = 0;
            }
        }
        $return .= "</table>";
        $this -> maand_tabel = $return;
        return $return;
    }
}
?>
1-02-2006 21:02

Re: kalender maken

  • Berry Langerak
  • Berry Langerak's foto

Dat ja! :D

Thnx a billion!

1-02-2006 21:19

Re: kalender maken

  • Laurens @scriptlord.net
  • Laurens @scriptlord.net's foto

Geen probleem, werkt 't een beetje lekker?

14-10-2006 10:22

Re: kalender maken

  • K Lasen
  • K Lasen's foto

Ik heb deze code eens bekeken en die staat mij wel aan. Echter als ik de code gebruik geeft deze een lege pagina weer.
Zelf heb ik een waarde gegeven aan:
$van_jaar=2006;
$tot_jaar=2007;
Ook dit geeft niet weer.

Moet ik de functie/class op een of andere manier aanroepen???

17-10-2006 16:30

Re: kalender maken

  • Laurens @scriptlord.net
  • Laurens @scriptlord.net's foto

Ik denk dat je even een artikeltje over het gebruik van klassen (classes) moet lezen, want deze class moet ook nog worden aangeroepen ;)

Zie het menu rechts voor info over classes/OOP.

Inloggen wachtwoord vergeten? Aanmelden