אתה נמצא כאן סקריפטים  >>  לוח שנה

לוח שנה

תוכנית זו מציגה לוח שנה עדכני. התוכנית מציגה כל חודש בנפרד ומסמנת באופן אוטומטי את התאריך העכשווי. ניתן לדפדף חודש קדימה ואחורה בלחיצת כפתור, ואף ישנה אפשרות לחפש תאריך מסויים לפי יום חודש ושנה. מתחת ללוח מופיע כל הזמן התאריך הנוכחי האמיתי.

הערות:
ללא שימוש בקבצי מידע או בסיס נתונים. שימוש בפונקציות של תאריך וזמן. אין שימוש רב בפונקציות ועיקר הסקריפט הוא לולאות והדפסת פלט.

שימוש בפונקציות:
getdate()   isset()   mktime()   

הורד סקריפט
שם קובץ: calendar.zip
גודל קובץ: 3.3 KB

מבנה קבצים

calendar.php - הקובץ הראשי של התוכנית. מציג את הלוח של החודש ומבצע חיפוש של תאריך מסויים.
calendar_conf.inc - קובץ ההגדרות של התוכנית בראש הקובץ calendar.php.

שימוש והתקנה

תוכנית זו לא מצריכה התקנה מסובכת והשימוש בו הוא פשוט. ניתן לשנות את שמות הימים והחודשים בעברית בקובץ ההגדרות calendar_conf.inc. בנוסף ניתן לשנות את הצבעים של סימון היום הנוכחי, של היום שמחפשים, של יום שבת ואת צבע ברירת המחדל של יום רגיל. כדי להשתמש בסקריפט כל שעליכם לעשות הוא לכלול את הקובץ calendar.php במקום שבו אתם רוצים להשים את לוח השנה. תוכלו גם לשנות את העיצוב והגרפיקה של לוח השנה, אך זה דורש הצצה ארוכה יותר בקוד.

הסבר

בתחילה אנו מייבאים את קובץ ההגדרות calendar_conf.inc. כעת בודקים אם קיבלנו תאריך לחפש. $cal_today מכיל את התאריך של היום. הפונקציה getdate() מחזירה מערך ובו נתונים על הזמן שמצויין בארגומנט שאותו הוא מקבל, או הזמן הנוכחי במידה ולא צויין הזמן. אם התוכנית נתבקשה לחפש תאריך מסויים, בודקים אם שדות השנה והחודש מולאו, ואם לא אז מכוונים אותם לשנה ולחודש העכשוויים. אם היום צויין אז מחפשים את אותו היום, ואם לא אז מחפשים את היום הראשון (על-מנת להגיע לחודש ולשנה שצויינו), והיום המבוקש שונה ל-0 (כדי לא לסמן יום כלשהו מאוחר יותר). את התאריך המבוקש (שאותו אנו מציגים) נשמור במשתנה $cal_sr_date.

עכשיו מתחילים להדפיס את לוח השנה ונעזרים בטבלאות. בשורה הראשונה אנו מדפיסים את הכפתורים של החודש הבא והקודם כשבאמצע מופיע החודש והשנה של הטבלה. בשורה הבאה אנו מדפיסים את הטבלה של החודש עצמו, וכך נראה הקוד של טבלה זו:

<TABLE width=100% border=1 bgcolor="#DDDDDD" cellpadding=1 cellspacing=0>
<?php
  if (!$cal_sr_date) //if an error occured calculating the requested date
  
{
     echo "<TR bgcolor=\"#000000\"><TD colspan=3 align=\"center\"><FONT color=\"#DD3322\">התאריך המבוקש חורג מן הגבולות או לא חוקי</FONT></TD></TR>\n"; //echo error message
  
   $cal_sr_date=$cal_today; //show the current month of the date
  
   $cal_day=0; //we don't mark any cell as the requested date
  
}
?>
   <TR>
   
<?php
     foreach ($cal_heb_days as $cal_heb_d) //printing the days columns
  
      echo "<TH bgcolor=\"#3333CC\" width=14% align=\"center\"><FONT color=\"CCCC00\" size=2>".$cal_heb_d."</FONT></TH>";
   ?>
   </TR>
   
<?php
     for ($cal_d=1,$cal_wd=0;true;$cal_d++,$cal_wd=($cal_wd+1)%7) //stopping the loop by break
  
   {
        $cal_tdt=getdate(mktime(0,0,0,$cal_sr_date["mon"],$cal_d,$cal_sr_date["year"])); //temp date to hold the date represented by $cal_d
  

        if ($cal_tdt["mon"]!=$cal_sr_date["mon"]) //if we got to the next month
  
         break; //stopping the loop
  

        if ($cal_wd==0) //if the first day of the week
  
      {
           echo "<TR>"; //making a new line in the table
  
         while ($cal_tdt["wday"]!=$cal_wd) //skipping the cells till the first day of the month
  
         {
              echo "<TD> </TD>"; //printing empty cell
  
            $cal_wd++;
           }
        }
  
        $cal_cell="<TD align=\"center\""; //opening the cell
  
      if ($cal_action=="finddate" && $cal_day==$cal_d) //if we search for a day and we got to that day
  
         $cal_cell.=" bgcolor=\"$cal_color_find_date\">"; //we mark the cell with purple background
  
      else //otherwise, if we don't search for any day
  
         $cal_cell.=">"; //we use the default background of the table
  
      $cal_cell.="<FONT"; //opening the font style of the cell
  
      if ($cal_sr_date["year"]==$cal_today["year"] && $cal_sr_date["mon"]==$cal_today["mon"] && $cal_d==$cal_today["mday"]) //if we got to the current date
  
         $cal_cell.=" color=\"$cal_color_today\">"; //we mark the cell with red text color
  
      elseif ($cal_wd==6) //else if we got to saturday
  
         $cal_cell.=" color=\"$cal_color_saturday\">"; //we mark the cell with navy text color
  
      else //otherwise, if it's a regular day
  
         $cal_cell.=" color=\"$cal_color_default\">"; //we use black text color
  
      $cal_cell.=$cal_d."</FONT></TD>"; //we add the day number and close the font and cell styles
  

        echo $cal_cell; //echoing the cell to the browser
  

        if ($cal_wd==6) //if the last day on week
  
         echo "</TR>"; //we end the line in the table
  
   }
   ?>
</TABLE>

בתחילה אנו בודקים אם היו תקלות כלשהן כאשר עיבדנו את המידע מהטופס שנשלח אלינו. באם היו תקלות, כאשר $cal_sr_date מכיל ערך שקר, אנו מדפיסים הודעת שגיאה המסבירה כי הקלט לא חוקי או שאולי התאריך חורג מן הגבולות שהמחשב יכול לחשב. לאחר מכן אנו משנים את התאריך לתאריך העכשווי האמיתי כדי להציג את הטבלה של החודש הנוכחי, וכן משנים את $cal_day ל-0 כדי לא לסמן יום מסויים בטבלה כיום שהמשתמש חיפש. שים לב שכאשר התוכנית מקבלת את הנתונים של התאריך המבוקש היא שומרת את התאריך במשתנה $cal_sr_date, והיא יוצרת אותו באמצעות הפונקציות mktime() ו-getdate() (בתחילת הסקריפט), ופונקציות אילו מתייחסות באופן מיוחד לקלט שהוא לא הגיוני (או לא חוקי), כך שאת הטיפול בקלט לא נכון השארתי לפונקציות אילו, וגם במקרה שמזינים לפונקציות אילו מחרוזות תוים שלא מייצגים מספר חוקי, פונקציות אילו מחזירות תאריך מסויים ולא ערך שקר המסמן על שגיאה, על-כן בדר"כ הודעת השגיאה המותנית הזו תוצג כאשר חורגים מן הגבולות של התאריך שהמחשב יודע לחשב.

אם אין תקלות אז בשורה הראשונה של הטבלה הזו אנו מדפיסים את ימות השבוע לפי המערך המוגדר בקובץ ההגדרות, $cal_heb_days. בשורות שבאות לאחר מכן אנו מדפיסים את המספרים של ימות החודש, וצובעים את התאריך הנוכחי ואת התאריך שמחפשים, והכל בעזרת לולאה. $cal_d הוא היום של החודש, ו-$cal_wd הוא היום בשבוע. בתוך $cal_tdt אנו שומרים את המידע על התאריך של היום ה-$cal_d בחודש הנוכחי ($cal_sr_date["mon"]). במידה והחודש של התאריך הזמני שיצרנו ($cal_tdt) שונה מן החודש שמוצג ($cal_sr_date), אז אנו מפסיקים את הלולאה (שים לב שהתנאי בלולאה הוא TRUE ולכן צריך לעצור אותה מבפנים באמצעות break). אם זהו היום הראשון של השבוע ($cal_wd==0), אז מדפיסים לדף תחילת שורה חדשה <TR>, ובנוסף בודקים אם היום הראשון של השבוע (ושל החודש בכלל) מתחיל ביום אחר, ואם כך אנו מדפיסים תאים ריקים לטבלה (ומקדמים את היום בשבוע, $cal_wd) עד שמגיעים ליום הנכון.

כעת אנו מוכנים להדפיס את התא שיכיל את היום בחודש ויהיה בצבע הנכון. המשתנה $cal_cell יכיל בתוכו את המחרוזת שנדפיס לפלט דף ה-HTML. הוא יכיל תג שיורה לפתוח תא חדש בטבלה שהכתוב בו יהיה במרכז התא. עכשיו מבצעים בדיקות וצובעים את התא ואת הטקסט בהתאם. אם המשתמש מחפש תאריך מסויים באמצעות הטופס של לוח השנה (שאליו נגיע בהמשך ההסבר) והגענו אל היום המבוקש, אז אנו מוסיפים לתא מאפיין שיצבע את רקע התא בצבע שהוגדר, אחרת אנו סוגרים את התג. הבדיקה הבאה היא האם היום שהגענו אליו הוא התאריך העכשווי האמיתי, וזאת בודקים ע"י השוואת השנה, החודש והיום, ואם זהו אכן התאריך העכשווי אנו צובעים את הפונט בצבע שהוגדר. אם זהו לא התאריך העכשווי, אז בודקים אם זהו יום שבת ($cal_wd==6), ואם כך אז צובעים את הפונט בצבע שמוגדר בקובץ ההגדרות. ולבסוף אם זהו סתם יום רגיל, אז צובעים את הפונט בצבע ברירת המחדל שמוגדר. בסופו של דבר מוסיפים למחרוזת $cal_cell את המספר של היום בחודש, סוגרים את התגים, ומדפיסים את המחרוזת לפלט. בסוף הלולאה אנו בודקים אם הגענו ליום האחרון בשבוע, ואם כך, אז אנו מדפיסים תג שסוגר את השורה, ובאיטרציה הבאה אנו נדפיס תג לפתיחת שורה חדשה (במידה וישנה עוד שורה). בסוף כל איטרציה אנו מקדמים את היום בחודש ב-1 ($cal_d), ואת היום בשבוע ($cal_wd) גם מקדמים באחד אך עושים לו מודולו 7, כי הוא מספר שנע בין 0 ל-6.

מתחת לטבלה של החודש אנו מדפיסים את התאריך העכשווי האמיתי בצבע המוגדר לתאריך העכשווי באמצעות התאריך העכשווי האמיתי ($cal_today) ובעזרת המערכים של ימות השבוע ושמות החודשים בעברית:

<TR bgcolor="#333333">
   <TD colspan=3 align="center"><FONT color="
<?= $cal_color_today; ?>"><SPAN dir="rtl"><?= "תאריך נוכחי: <B>יום ".$cal_heb_days[$cal_today["wday"]].", ".$cal_today["mday"]." ב".$cal_heb_months[$cal_today["mon"]].", ".$cal_today["year"]."</B>"; /* printing the current date */ ?></SPAN></FONT></TD>
</TR>

בשורה האחרונה, בתחתית, אנו מדפיסים טופס קטן שעוזר לחפש תאריך מסויים בצורה מהירה (במקום לדפדף חודש-חודש עד שמגיעים אליו). אנו משתמשים במשתנה חבוי בתוך הטופס שנקרא cal_action, ומכיל בתוכו את הערך "finddate". בנוסף הוא מכיל 3 שדות: היום (שדה טקסט - $cal_day), החודש (שדה בחירה - $cal_mon) ושנה (שדה טקסט - $cal_year). נוסיף גם כפתור שליחה, שישלח את המידע. ברירות המחדל של השדות בטופס יהיו היום, החודש והשנה של התאריך העכשווי.


תגובות בנושא

הפונקצייה date 01-12-03 10:02
 חן
#667

איך אני מציג את התאריך הישראלי?
תודה מראש

איך אני מציג שעה של 04-12-03 11:00
 רן
#822

ישראל עשיתי אצלי באתר שבניתי מערכת
<?echo date("h:m:s",time($sss["time"])); ?>
וזה לא מציג שעה כמו ישראל מה לעשות?

זה מציג את התאריך והשעה בשרת 04-12-03 11:00
 אלי חן (מנהל)
#826

הפונקציה date וכל הפונקציות הקשורות בזמנים עכשויים, אינן מציגות את התאריך והשעה המדוייקים על מחשב הלקוח.. אלא מציגים את התאריך והשעה על השרת!
אם קיבלת שהשעה לא מדוייקת, אז השעה במחשב השרת שלך שונה מהשעה אצלך בבית.. (תחשוב באיזו מדינה יושב השרת שלך)..
אם אתה רוצה להציג תאריך ושעה מדוייקים לפי מחשב הלקוח, אז תשתמש ב JavaScript שרץ על צד הלקוח, ולא ב PHP שרץ על צד השרת.

איך ממירים מתאריך לועזי לעיברי? 08-12-03 01:01
 טל
#1025

איך ממירים תאריך לועזי לעברי? אני יודע שענית לחן שזה נמצא באתר הרישמי אבל אני לא מוצא את התשובה

נ.ב.:לשאלה של רן אתה צריך כדי לכתוב את התאריך והשעה בשעון ישראלי:
<?
a_date=(h+2).":".m.":".s;
echo a_date;
?>

תאריך עיברי (לחן) 08-12-03 03:01
 טל
#1029

כדי לכתוב את התאריך העיברי אתה צריך לכתוב את הקוד הבה:
<?=jdtojewish(gregoriantojd(getdate())?>
וכדה להמיר מתאריך מסוים:
<?=jdtojewish(gregoriantojd(/*כאן תכתוב את התאריך*/)?>

תחילת יממה עברית 01-11-03 16:00
 אליהו שלמה
#1256

איך אני מציג את השעה שבה מתחילה היממה לפי היום העברי. למשל 11 לאוקטובר 1999 היה א חשוון אבל בערב זה התחלף ל ב חשוון באיזה שהעה בדיוק זה קרה?

איך מקבלים תאריך עיברי(לא רק יהודי) 05-12-04 04:02
 טל חדד
#1582

כאשר השתמשתי בjdtojewish() זה הציג לי רק במיספרים. איך עושים שזה יציג באותיות עיבריות?


לדף הקודםמונה -הקודם
לתחילת הדףלתחילת הדף
הבא- גלריית תמונותלדף הבא