Calendar function

Μια περιοχή όπου τα μέλη μας μπορούν να βάζουν τα PHP scripts που έχουν φτιάξει και θέλουν να τα μοιραστούν με τα υπόλοιπα μέλη.

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
mrpc
WebDev Moderator
Δημοσιεύσεις: 3393
Εγγραφή: 03 Μάιος 2000 03:00
Τοποθεσία: Εξάρχεια
Επικοινωνία:

Calendar function

Δημοσίευση από mrpc » 28 Απρ 2005 17:42

Μια απλή function που εμφανίζει calendar για όποιο μήνα όποιου έτους θέλουμε. Με λίγη βελτίωση μπορείτε να κάνετε πολύ ωραία πράγματα, όπως να το συνδέσετε με μια βάση δεδομένων και να διαχειρίζεστε events.

Κώδικας: Επιλογή όλων

function showcalendar ($month, $year) {
$first = date("w", mktime(0, 0, 0, $month, 1, $year));

$content = "<center><b>$month / $year</b></center><br>\n";
$content .= "<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\"  width=\"100%\">\n";

$content .= "<tr>\n";
$content .= "<TD nowrap align=\"center\" valign=\"middle\" width=\"15%\">Κυριακή</TD>\n";
$content .= "<TD nowrap align=\"center\" valign=\"middle\" width=\"15%\">Δευτέρα</TD>\n";
$content .= "<TD nowrap align=\"center\" valign=\"middle\" width=\"15%\">Τρίτη</TD>\n";
$content .= "<TD nowrap align=\"center\" valign=\"middle\" width=\"15%\">Τετάρτη</TD>\n";
$content .= "<TD nowrap align=\"center\" valign=\"middle\" width=\"15%\">Πέμπτη</TD>\n";
$content .= "<TD nowrap align=\"center\" valign=\"middle\" width=\"15%\">Παρασκευή</TD>\n";
$content .= "<TD nowrap align=\"center\" valign=\"middle\" width=\"15%\">Σάββατο</TD>\n";
$content .= "</tr>\n";

   $lastday = 28;

   for &#40;$i=$lastday;$i<32;$i++&#41;
   &#123;
      if &#40;checkdate&#40;$month, $i, $year&#41;&#41;
      &#123;
         $lastday = $i;
      &#125;
   &#125;


   $calday = 1;
   while &#40;$calday <= $lastday&#41;
   &#123;
      $content .= "<TR>\n";
      for &#40;$j=0;$j<7;$j++&#41;
      &#123;
         if &#40;$calday == 1&#41;
         &#123;
            if &#40;$first == $j&#41;
            &#123;
               $content .= "<TD nowrap align=\"center\" valign=\"middle\" width=\"15%\">$calday\n";
	       
	       $content .= "</td>\n";
               $calday++;
            &#125;
            else
	    &#123;
               
	       $content .= "<td>&nbsp;</td>\n";
            &#125;
         &#125;
         else
         &#123;
            if &#40;$calday > $lastday&#41;
            &#123;
               $content .= "<TD nowrap align=\"center\" valign=\"middle\" width=\"15%\">\n";
	       $content .= "</td>\n";
            &#125;
            else
            &#123;
               $content .= "<TD nowrap align=\"center\" valign=\"middle\" width=\"15%\">$calday\n";

	       $content .= "</td>\n";
               $calday++;
            &#125;
         &#125;
      &#125;
      $content .= "</TR><tr><td></td><td></td><td></td><td></td><td></td><td></td></tr>\n";
   &#125;



$content .= "</table>\n"; 
echo $content;
&#125;
Για να εμφανίσετε το calendar καλείτε την function ορίζοντας τον μήνα και το έτος που θέλετε. Για παράδειγμα, αυτός ο μήνας είναι:

Κώδικας: Επιλογή όλων

showcalendar &#40;4, 2005&#41;;
Ο κώδικας βασίστικε σε ένα block από το nucalendar (module για το php nuke), αλλά το απλοποίησα για να το δείξω.
Δεν βασίζεται σε κάποιο πολύπλοκο αλγόρυθμο για να βρει πόσες μέρες έχει ο μήνας. Η λογική είναι η εξής:
Αρχικά υποθέτουμε ότι ο μήνας έχει 28 ημέρες (ο Φλεβάρης κάθε 4 χρόνια αν δεν κάνω λάθος).
Μετά προσθέτει μία - μία ημέρα και δοκιμάζει αν η ημερομηνία στέκει με βάση την php function checkdate:
checkdate
(PHP 3, PHP 4 )

checkdate -- Ελέγξτε την εγκυρότητα μίας Γρηγοριανής Ημερομηνίας
Περιγραφή
bool checkdate ( int month, int day, int year)


Επιστρέφει TRUE εάν είναι έγκυρη η δοθείσα ημερομηνία, αλλιώς επιστρέφει FALSE. Η εγκυρότητα ελέγχεται μέσω των παραμέτρων. Μία ημερομηνία θεωρείται έγκυρη εάν:


η year είναι μεταξύ 1 και 32767 (συμπεριλαμβανομένων των άκρων)

η month είναι μεταξύ 1 και 12 (συμπεριλαμβανομένων των άκρων)

Η Day είναι μεταξύ του αριθμού των ημερών του δοθέντος month. Τα δίσεκτα years λαμβάνονται υπόψιν.

(php manual)
Έτσι βρίσκει πόσες ημέρες έχει ο μήνας.
Το τι μέρα είναι η πρώτη του μήνα το βρίσκει στην γραμμή:

Κώδικας: Επιλογή όλων

$first = date&#40;"w", mktime&#40;0, 0, 0, $month, 1, $year&#41;&#41;;
Το w στην date μας επιστρέφει αριθμητικά τον αριθμό της ημέρας.
Η δεύτερη παράμετρος στην date είναι προερετική για να μας δείχνει πληροφορίες για μια συγκεκριμένη ημερομηνία αντί για την σημερινή. Όμως δέχεται μόνο timestamp. Για αυτό χρησιμοποιούμε την mktime που μετατρέπει οποιαδήποτε ημερομηνία σε timestamp.

Άβαταρ μέλους
mrpc
WebDev Moderator
Δημοσιεύσεις: 3393
Εγγραφή: 03 Μάιος 2000 03:00
Τοποθεσία: Εξάρχεια
Επικοινωνία:

Calendar function

Δημοσίευση από mrpc » 28 Απρ 2005 17:54

Μπορείτε να συνδέσετε την function με την βάση που έχετε φτιάξει από το tutorial http://www.freestuff.gr/forums/viewtopic.php?t=15305 :
Απλά μετά τη γραμμή:

Κώδικας: Επιλογή όλων

$content .= "<TD nowrap align=\"center\" valign=\"middle\" width=\"15%\">$calday\n";
βάλτε τα παρακάτω:

Κώδικας: Επιλογή όλων

$link = mysql_connect&#40;"localhost", "username", "password"&#41; 
    or die&#40;"Could not connect &#58; " . mysql_error&#40;&#41;&#41;;
mysql_select_db&#40;"eortologio"&#41; or die&#40;"Could not select database"&#41;;
$query = "select text from days where `month` = '$month' and `day` = '$calday'";
$result = mysql_query&#40;$query&#41; or die&#40;"Query failed &#58; " . mysql_error&#40;&#41;&#41;;
if &#40;mysql_num_rows&#40;$result&#41; <> 0&#41;&#123;
	$content .= "<br>Γιορτάζουν οι&#58; ";
	while &#40;$line = mysql_fetch_array&#40;$result, MYSQL_ASSOC&#41;&#41; &#123;
		$content .= "<br>".$line&#91;'text'&#93;;
		&#125;
	&#125;
mysql_close&#40;$link&#41;;
βάζοντας φυσικά τα σωστά username και password για τη βάση σας.

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Calendar function

Δημοσίευση από Cha0s » 28 Απρ 2005 18:36

Το κάνω βοήθημα γιατί είσαι άρχοντας :D:D:D

Άβαταρ μέλους
mrpc
WebDev Moderator
Δημοσιεύσεις: 3393
Εγγραφή: 03 Μάιος 2000 03:00
Τοποθεσία: Εξάρχεια
Επικοινωνία:

Calendar function

Δημοσίευση από mrpc » 29 Απρ 2005 04:34

thanks :D

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27621
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Calendar function

Δημοσίευση από cordis » 08 Μάιος 2005 03:11

κάτι τέτοιο έψαχνα... :P
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
mrpc
WebDev Moderator
Δημοσιεύσεις: 3393
Εγγραφή: 03 Μάιος 2000 03:00
Τοποθεσία: Εξάρχεια
Επικοινωνία:

Calendar function

Δημοσίευση από mrpc » 12 Μάιος 2005 03:31

Κι εγώ το έψαχνα καιρό και όταν το βρήκα είπα να το μοιραστώ...

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

Calendar function

Δημοσίευση από Banavas » 02 Μάιος 2006 19:33

Δεν βασίζεται σε κάποιο πολύπλοκο αλγόρυθμο για να βρει πόσες μέρες έχει ο μήνας. Η λογική είναι η εξής:
Αρχικά υποθέτουμε ότι ο μήνας έχει 28 ημέρες (ο Φλεβάρης κάθε 4 χρόνια αν δεν κάνω λάθος).
Μετά προσθέτει μία - μία ημέρα και δοκιμάζει αν η ημερομηνία στέκει με βάση την php function checkdate:
Αυτά τα προβλήματα προκείπτουν οταν κάνει κανείς copy-paste. 8)

Εχω κάνει και εγώ ένα παρόμοιο ημερολόγιο για διαχείριση events
και να πως βρίσκω το σύνολο ημερών του μήνα.

$meres = date ("t", mktime(0,0,0,$month,1,$year));

Δέν είναι αρκετά απλό; :kaloe:

Απάντηση

Επιστροφή στο “PHP τα δικά μας scripts”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης