[PREV] PHP Kalender

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis Mertens

Dennis Mertens

03/12/2008 15:18:00
Quote Anchor link
Hallo mensen,

Niet schrikken van de titel, ik zoek er geen :)

Naar aanleiding van het topic 'Datum probleem' en nadat ik op de SQL site een aantal opties zag, dacht ik, laat ik eens een PHP kalender maken.

Een hele tijd terug heb ik genoeg kalender gevonden maar ik vond ze lang niet altijd goed. Dit omdat het aantal weken vast stond met een for-loop op 6 (6 loops), en dat in de laatste loop werd gecontroleerd of er uberhaupt nog wel dagen in deze week voor kwamen. Dit vond ik echt slordig, maar ik had toen nog niet de skills die ik nu heb.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
date_default_timezone_set('Europe/Amsterdam');

$iMonth = IsSet($_GET['month']) && Is_Numeric($_GET['month']) ? $_GET['month'] : Date('m');
$iYear = IsSet($_GET['year']) && Is_Numeric($_GET['year']) ? $_GET['year'] : Date('Y');

$sDate = MkTime(00, 00, 00, $iMonth, 1, $iYear);

$iFirstDay = Date('N', $sDate);
$iTotalDays = Date('t', $sDate);

echo '<table>
 <tr>
  <td style="font-weight: bold;">W</td>
  <td style="font-weight: bold;">M</td>
  <td style="font-weight: bold;">D</td>
  <td style="font-weight: bold;">W</td>
  <td style="font-weight: bold;">D</td>
  <td style="font-weight: bold;">V</td>
  <td style="font-weight: bold;">Z</td>
  <td style="font-weight: bold;">Z</td>
 </tr>'
;
$iDayOfMonth = 1;

For($iWeek = 1; $iWeek <= Ceil(($iTotalDays + $iFirstDay - 1) / 7); $iWeek++)
{

    echo '
 <tr>
  <td>'
.(Date('W', $sDate) + $iWeek - 1).'</td>';
    For($iDayOfWeek = 1; $iDayOfWeek <= 7; $iDayOfWeek++)
    {

        $iDayOfWeek1 = $iFirstDay - $iDayOfWeek - 1;
        If($iWeek == 1 && $iFirstDay > $iDayOfWeek)
        {

            echo '<td style="background-color: #ccc;">'.(Date('t', MkTime(00, 00, 00, $iMonth-1, 1, $iYear)) - ($iFirstDay - $iDayOfWeek - 1)).'</td>';
        }

        ElseIf($iDayOfMonth > $iTotalDays)
        {

            echo '<td style="background-color: #ccc;">'.($iDayOfMonth - $iTotalDays).'</td>';
            $iDayOfMonth++;
        }

        Else
        {
            echo '<td>'.$iDayOfMonth.'</td>';
            $iDayOfMonth++;
        }
    }

    echo '
 </tr>'
;
}


echo '
</table>
<a href="calendar.php?month='
.($iMonth == 1 ? '12&year='.($iYear - 1) : ($iMonth - 1).'&year='.$iYear).'" title="Previous">Previous</a> - <a href="calendar.php?month='.($iMonth == 12 ? '1&year='.($iYear + 1) : ($iMonth + 1).'&year='.$iYear).'" title="Next">Next</a><br />
<a href="calendar.php?month='
.$iMonth.'&year='.($iYear - 1).'" title="Previous">Previous</a> - <a href="calendar.php?month='.$iMonth.'&year='.($iYear + 1).'" title="Next">Next</a>
'
;

?>


Hier is dus mijn script, en ik zou graag wat commentaar willen :)
Wat kan beter etc.

Ik hang er nog geen DB achter want heb het net gemaakt.
En ook niet zeuren over dat het in een HTML-table is :), dat vond ik wel zo moeilijk om het even te maken. Het gaat dus puur om de PHP-code.

Preview: http://www.dennismertens.nl/calendar.php

Edit:
De variabele $iDay naar $iDayOfMonth verandert, duidelijker.

Edit:
Kom er net achter dat ik de week nummers mis. Even proberen in te bouwen :)

Edit:
Week nummer zit erin :)

M.v.g.
Dennis Mertens
Gewijzigd op 01/01/1970 01:00:00 door Dennis Mertens
 
PHP hulp

PHP hulp

26/11/2020 01:32:55
 
Nicoow Unknown

Nicoow Unknown

03/12/2008 16:49:00
Quote Anchor link
bouw nog even een beveiliging in zodat je de maand niet >= 13.
Voor de rest ziet t er wel redelijk uit
 
GaMer B

GaMer B

03/12/2008 17:23:00
Quote Anchor link
Heb er nog niet goed naar gekeken, maar leer je één ding af en dat is CaMeLcOdInG. Het leest niet lekker, echt niet.

'isset' is 'isset' en niet 'IsSet'. En dat geldt ook voor 'ceil' en alle andere dingen.
 
Storeman storeman

storeman storeman

03/12/2008 19:18:00
Quote Anchor link
@GaMer13: Helemaal mee eens. Gelukkig doet hij het consequent. Kijk anders eens hier: http://framework.zend.com/manual/en/coding-standard.html

Een aantal handige handvatten om je code netjes te maken en houden.
 
Niek Weevers

Niek Weevers

03/12/2008 19:22:00
Quote Anchor link
Voor een kalender kun je heel goed een table gebruiken. Tables gebruik je niet voor layout zaken, wel voor tabulaire data.
 
Dennis Mertens

Dennis Mertens

03/12/2008 21:18:00
Quote Anchor link
Nou ik gebruik al heel lang de hoofdletters op die manier, ik zelf vind het ontzettend fijn en erg nuttig. Het is erg handig want toen ik begon met PHP wist ik niet wat isset precies betekende (mijn Engels was toendertijd ook niet echt goed, nu nog steeds niet, maar goed genoeg).

Elk woord met een hoofdletter en ik weet zeker dat meer mensen dat doen. Vooral bij variabele is het ontzettend handig.

Maar ik snap je punt.

Daarnaast script ik bijna nooit met iemand, maar dit wou ik even laten zien, aangezien ik de meeste kalenders echt bagger vind, zie mijn topic bericht.

En een 13e maand zou geen foutmelding geven, wellicht is dit niet netjes, maar dat doe de bezoeker op dat moment zelf. Daarnaast is dit gewoon de basis en heb dit even 'snel' gemaakt. Hierop kun je nog een DB hangen etc. etc..

Ik vind het gewoon niet netjes om hiervoor een table te gebruiken. Dit kan makkelijk met divjes of zelfs met een list (ul li). Dat vind ik zelf persoonlijk mooier.

Maar de opmerkingen vallen wel mee :), had er meer verwacht.
 
Edwin

Edwin

23/01/2009 14:35:00
Quote Anchor link
Ik weet niet of je hier toevallig nog opkijkt... :P

Het is opzich wel een mooie kalender alleen omdat je in de adresbalk gewoon het jaartal kan aanpassen etc. krijg je automatisch dat het niet klopt
zie odnerstaande link:

http://www.dennismertens.nl/calendar.php?month=354&year=2009

Hij zegt dat het januari 1970 is bij mij..

terwijl als ik gewoon http://www.dennismertens.nl/calendar.php?month=14&year=2009 doe, doet hij wel gewoon februari 2010...

suc6 verder ;)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.