Brugernavn:




Kodeord: Husk
Forside Forum Artikler Downloads Søg
 

Kalender til skrivebordet

Forord

Artiklen er en forlængelse af artiklen med titlen Skrivebords-design (Avanceret). Lær at få en kalender på dit skrivebord, let og elegant. For dem som godt vil lære noget PHP, og gerne vil kunne noget smart. Der skal ikke bruges mysql til denne kalender, da jeg har valgt at bruge et array til vores aftaler. Jeg laver måske en opdateret version, med mulighed for mysql update, mm.

Indledning

Hvad skal der bruges?

- Du skal have indstalleret en lokal server (localhost, se links sidst i artiklen)
- Du skal have styr på lidt PHP (Ikke alt, men du skal hellere ikke være nybegynder)
- Du skal have viljen til at lære noget nyt.

Hvad går det ud på?

Jeg vil i denne artikel gennemgå hvordan man laver en kalender som du kan bruge på dit skrivebord.
Før vi starter vil jeg anbefale dig at læse min anden artikel, vedrørende skrivebordsdesign. Artiklen kan også godt bruges uafhængigt.

Nå men vi må hellere til at starte...

Koden

OBS: Forklaring inde i koden

kalender.php (uden stylesheet)

  1. <?php
  2.   /////////////////////////////////////
  3.  //  VERSION 1.0  af Jens Stigaard  //
  4. /////////////////////////////////////
  5. //
  6. // AFTALER
  7. // Datoen skal indsættes i formatet:
  8. //                                    "ÅÅÅÅMMDD" => "din aftale",
  9. // - se lige under her, hvis du ikke forstår det
  10. $appointments = array(
  11. "20080504" => "Jens 16 års fødselsdag",
  12. "20081223" => "Lille jule aften",
  13. "20081224" => "Juleaften",
  14. "20080321" => "Lukas 7 år",
  15. "20080325" => "Skal jo skrive et eller andet?",
  16. "20080322" => "Københavnstur",
  17. );
  18. // Ugens dage (første er altid 0 (nul), derfor søndag først, men også sidst
  19. $days = array("søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag", "søndag");
  20. // Årets måneder (første er December, igen fordi vi starter på nul)
  21. $months = array("December", "Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December");
  22. $this_day = date("d"); //Lægger dag variabel
  23. $this_month = date("m"); //Lægger måned variabel
  24. $this_year = date("Y");  //Lægger år variabel
  25. if((is_numeric($_GET['month']))&&(is_numeric($_GET['year']))) // Hvis der er ændret måned og år bliver variablerne med måned og år erstatet
  26. {
  27.     $this_month = $_GET['month'];
  28.     $this_year = $_GET['year'];
  29. }
  30. $month_title = $months["".date("n", mktime(0,0,0,$this_month,1,$this_year)).""]; //Her gives månedens navn
  31. $days_in_month = cal_days_in_month(CAL_GREGORIAN,$this_month,$this_year); // Antal dage der er i den pågældende måned
  32. $action_day = 1; // Vi starter på dag 1
  33. print"<table>"; // Start på tabellen
  34. print"<tr>"; // Vores første row starter
  35. print"<td colspan=\"3\" style=\"text-align:center;\">";    // Første celle indeholder vores månedskifter
  36. print"<a href=\"?"; // Start på 1. link (forrige måned)
  37. if($this_month == 1) // Hvis vi har måned et (januar) så skal vi tilbage til december (måned 12) forrige år
  38. {
  39.     print"month=12&amp;year=".($this_year-1);
  40. }
  41. elseif($this_month > 1 && $this_month < 13) // Ellers hvis vi har en måned der er større end 1, og desuden mindre end 12, skal vi blot minusse en måned
  42. {
  43.     print"month=";
  44.     if($this_month <10) // Hvis måneden er mindre end 10 skal vi sætte 0 foran for at få korrekt url
  45.     {
  46.         print"0";
  47.     }
  48.     print($this_month-1)."&amp;year=".$this_year;
  49. }
  50. print"\">&laquo; Forrige måned</a>"; // Selve linket
  51. print" - <strong>".$month_title." ".$this_year."</strong> - "; // Her for vi printet selve den aktuelle måneds titel
  52. print"<a href=\"?"; // Start på 2. link (næste måned)
  53. if($this_month == 12) // Hvis vi har måned 12 (december) skal vi gå til januar det næste år
  54. {
  55.     print"month=01&amp;year=".($this_year+1);
  56. }
  57. elseif($this_month > 0 && $this_month < 12) // Ellers hvis vi har en måned der er større end 0 og mindre end 12, skal der blot lægges en måned til
  58. {
  59.     print"month=";
  60.     if($this_month <10) // Hvis måneden er mindre end 10 skal vi sætte 0 foran for at få korrekt url
  61.     {
  62.         print"0";
  63.     }
  64.     print($this_month+1)."&amp;year=".$this_year;
  65. }
  66. print"\" target=\"_self\">Næste måned &raquo;</a>"; // Selve linket
  67. print"</td>"; // Slut på celle med måned-skift
  68. print"<td width=\"60\"></td>"; // Den næste og sidste celle kommer til at indeholde ugenumre, men den holder vi blank her
  69. print"</tr>"; // Slut på header rækken
  70. // Så starter vi endelig på at selve dagene skal printes; dagens nummer skal være lig eller mindre end antal dage i måneden
  71. while ($action_day <= $days_in_month)
  72. {
  73.     if($action_day < 10) // Hvis dagen er mindre end 10 tilføjer vi et 0 (nul) foran
  74.     {
  75.         $action_day = "0".$action_day;
  76.     }
  77.     $action_day_ts = mktime(0,0,0,$this_month,$action_day,$this_year); // Vi laver et UNIX string af dagen
  78.     $action_day_name = $days["".date("w", $action_day_ts).""]; // Dagens navn (fx mandag)
  79.     if(date("w", $action_day_ts) == 1) // Hvis det er ugens første dag, laves et break
  80.     {
  81.         print"<tr><td colspan=\"10\" class=\"break\"><hr /></td></tr>";
  82.     }    
  83.     print"<tr>"; // Så starter vi på den række hvor al dataen kommer ind på
  84.     print"<td>"; // Den 1. celle; Indeholder dagens tal
  85.     if($this_year.$this_month.$action_day == date("Ymd"))// Hvis denne aktuelle dag er lig med den dag vi viser i kalenderen så laver vi et plus
  86.     {
  87.         print "+";
  88.     }
  89.     print $action_day; // Dagen (fx. 01)
  90.     print"</td>"; // Slut på navnet på dagens celle
  91.     print"<td>".$action_day_name."</td>"; // Den 2. celle; Indeholder dagens navn (mandag - søndag)
  92.     print"<td>"; // Den 3. celle er med vores aftale, som bliver hentet fra arrayet øverst på siden
  93.     foreach($appointments as $appointment_day => $appointment) // Vi henter alle aftaler i arrayet; en ad gangen
  94.     {
  95.         if($appointment_day == $this_year.$this_month.$action_day) // Hvis den aftalte dato og den nuværende dag er ens printes aftalen
  96.         {
  97.             print $appointment;
  98.         }
  99.     }
  100.     print"</td>"; // Slut på aftalens celle
  101.     print"<td>";// Den 4. celle som indeholder ugentallet hvis det er mandag
  102.     if (date("w", $action_day_ts) == 1) //
  103.     {
  104.         print "uge: ".date("W",$action_day_ts);
  105.     }
  106.     print"</td>"; // Slut på 4. celle med ugenummer
  107.     print"</tr>"; // Slut på vores række med data
  108.     $action_day++; // Vi ændrer dagsnummeret med ++ (+1)
  109. }
  110. print"</table>"; // Slut på tabellen
  111. ?>

Preview


Kalenderen uden stylesheet Full size

Kalenderen med stylesheetFull size

Demo af kalenderen

Referencer

- Skrivebords-design (Avanceret)
- Lær at bruge dato, timestamp, mm
- Lær at bruge arrays
- Funktion: cal-days-in-month

- Se koden med stylesheet
Sidst redigeret 17:52 22/03/2008
Oprettet af:

PHP

Point modtaget: 150

Rate:
17:49 22/03/2008

Kommentarer

Giv din mening tilkende om denne artikel, eller læs andres.
Har du spørgsmål eller brug for hjælp til denne artikel henvises du til forummet.
Har ikke prøvet det, men det ser fint ud, udover at der lige er en fejl i demoen..
Oprettet af:
  Mail
18:53 22/03/2008
Fiskeren > Har rettet, den funktion virker åbenbart kun ved version 5 (har desværre kun 4 på min server, men version 5 på localhost)..
Oprettet af:
  Mail
19:23 22/03/2008
*sorry, havde ikke set links*
Sidst redigeret 22:22 22/03/2008
Oprettet af:
  Mail
22:22 22/03/2008
Vil gerne have respons fra dem som rater min artikel.
- tak :)

Edit: stavefejl.
Sidst redigeret 00:07 24/03/2008
Oprettet af:
  Mail
00:05 24/03/2008
Hvordan får man det der localhost?
Oprettet af:
  Mail
09:15 24/03/2008
Hvis du har windows:
http://mooboo.dk/?page=laes_tut&id=1&tb=2
Oprettet af:
  Mail
21:19 24/03/2008
Tak, Jens :)
Oprettet af:
  Mail
16:32 25/03/2008
Synes det er en god artikle, du forklare i koden og du har demo og screenshot, bedre kan det jo ikke blive :D
Oprettet af:
  Mail
10:53 03/04/2008
Du skal være oprettet og logget ind for at kommentere en artikel
Copyright © Rowl.dk v/ Michael Raagaard | 2005-12 | Alle rettigheder forbeholdes