סגול ב "ח" או ב "ר" ?
טוב, התגובות שלי לא היו נסיון לעקוץ, רק להבין מה בעצם את עושה כאן
וכעת אני מבין שאת מתפעלת אתר ונכנסת לקרוא בפורומים על הנושא.
אז אני חוזר בי ומתנצל אם הייתי עוקצני מדי. [גם ההתייחסות בלשון זכר נבעה מחוסר שימת לב]
כל הכבוד על ההשקעה, ועל הזהירות.
ובאמת, כאן המקום [או אחד המקומות] למי שצמא לדעת וללמוד בעצמו, לשאול, לחקור, וגם לענות לאחרים.
כולנו היינו פעם ירוקים, ושאלנו, ושיגענו אחרים, עד שלמדנו מה שלמדנו, ועדיין לומדים.
אולי לטעימה: אני ינסה להסביר קצת מושגים בג'אווה סקריפט.
אז אפילו שחנוכה כבר חולף לו אוטוטו, אני ינתח את הסקריפט של החנוכיה צעד אחרי צעד.
PHP:
function Hanuka(e) { var t = new Date("December 8, 2012 17:15:00"), n = new Date, r = e.test ? 8 : Math.ceil((n.getTime() - t.getTime()) / (1e3 * 60 * 60 * 24)); if (r >= 1 && r <= 8) { document.write('<a href="http://bit.ly/UIwcGd" target="_blank"><img src="http://hanuka.entry.co.il/lamps/' + (e.design || 1) + "/day" + r + '.png" alt="" style="margin:auto; border:0 none;" /></a>') } }
זה הקוד הכללי, ונתחיל לבדוק מה ואיך הוא פועל.
קודם כל, כל הקוד מוכנס בתוך פונקציה בשם Hanuka שמקבלת אובייקט בשם e.
כל מה שבתוך הסוגריים המסולסלות {} יתרחש כאשר יקראו לפונקציה הזו.
הפעולה הראשונה: הצהרה על משתנה בשם t, ומייד השמה של ערך מסוג תאריך עם התאריך 8 בדצמבר 2012 שעה 5 ורבע [תחילת חג החנוכה]
PHP:
var t = new Date("December 8, 2012 17:15:00")
לאחר מכן מוצהר על המשתנה n כשהוא מסוג תאריך. וכיוון שלא הוזן אליו תאריך ספציפי, הוא נקבע על התאריך והשעה העכשוויים.
וכעת, למשתנה שעושה את העבודה, ומחשב איזה נר היום.
זהו המשתנה r
נראה קצת מסובך מה הוא עושה, אבל זה ממש לא יישאר מסובך אחרי שנפרק אותו לגורמים.
אז ככה:
זוכרים את האובייקט e?
בקריאה לפונקציה [בחלק שנמצא בהמשך הקוד להעתקה, החלק שבין התגיות script ]
אנו רואים שהאובייקט שנשלח אל הפונקציה הוא אובייקט מסוג JSON.
בלי להאריך, נסביר שמדובר על אובייקט שיכול להכיל מידע מסוג מערכים וזוגות "מפתח ערך".
כאן בדוגמה אנחנו רואים שהוא מכיל 2 זוגות "מפתח-ערך"
PHP:
<script>Hanuka({ design: 1, test: false });</script>
המפתח design שמכיל את הערך 1 [שימו לב שהערך נקבע לפי ציור החנוכיה שבחרתם]
והמפתח test שמכיל את הערך false, דהיינו "שלילי".
כעת נראה מה r מקבל
r שואל האם test הוא true או false ?
זה מתבצע בנוסחה המקוצרת של תנאי. מציבים את התנאי [במקרה שלנו, היות וערך המפתח הוא שלילי {או חיובי} אין צורך בהשוואה, אבל יכול להיות שם כל סוג של תנאי למשל g > max ]
לאחריו סימן שאלה
ואז כותבים את הפקודה שתתבצע במקרה שהתנאי אמת
לאחר מכן שמים נקודותיים, ולאחריהם את הפקודה שתתבצע כשהתנאי איננו אמת.
[כאן אנו מבינים שהמתכנת רצה לבדוק את תקינות המערכת לפני חנוכה, בלי לשנות את התאריך בנוסחה ולקבל חנוכיה מוארת כולה {יום השמיני} במקרה שבו הוא ישים את הערך true {חיובי} במפתח test ]
במקרה שהערך של test הוא חיובי, המשתנה r יהיה שווה 8.
במקרה שהערך הוא שלילי [כמו במקרה השימוש הרגיל], r יכיל את מספר הימים שיש בין המשתנה t למשתנה n [דהיינו, כמה ימים שלמים עברו מערב חנוכה]
היות והמתכנת רצה לדעת את מספר הימים, כשהחלפת היום מתרחשת בשעה 5 ורבע, הוא פשוט עושה זאת בבדיקה המתמטית הזו:
PHP:
Math.ceil((n.getTime() - t.getTime()) / (1e3 * 60 * 60 * 24));
הוא משתמש בפונקציה ceil שהיא פונקציה שמחזירה שלמים מעוגלים כלפי מעלה, מתוך מספר שנותנים לה.
ולכן, כשהמערכת תחזיר שחלפו למשל 2.00004 ימים [שזה אומר יומיים ועוד כמה שניות אחרי התאריך שנקבע ב t] היא כבר תעגל את זה ל 3, כי מהשעה 5 ורבע, כבר אמורים להדליק נר שלישי.
צורת החישוב נעשית במדידת אלפיות שניה.
הפונקציה getTime מחזירה את חותמת הזמן באלפיות שניה של המשתנה.
וכעת מבצעים חיסור ביניהם, ויש לנו את מספר אלפיות השניה שבין המשתנה t למשתנה n.
אבל אותנו מעניין מספר הימים...
לכן נחלק אותם במספר אלפיות השניה שיש ביממה שזה אומר 24 כפול 60 כפול 60 כפול 1000.
[1e3 זהו קיצור של המספר 1000]
והנה קיבלנו את מספר הימים שחלפו בין 8 בדצמבר בשעה 17:15 דקות, לעכשיו.
כעת, כל מה שנותר הוא להוסיף לדף את התמונה המתאימה.
אז כעת משתמשים בפונקציה של הזרקת טקסט לדף [document.write] שתיצור לינק מסוג תמונה.
אבל איזו תמונה?
אז המערכת כנראה מכילה כמה תיקיות, תיקיה לכל סוג עיצוב.
שכל תיקיה מכילה סדרה של 8 תמונות png , מ day1 ועד day8
ואז היא משרשרת את כתובת התמונה לפי המשתנים e.design [סוג העיצוב - לתיקיה]
והמשתנה r, שבונה את שם הקובץ ["/day" + r + '.png"]
למי שבוחן לעומק, לפני הזרקת האובייקט לדף, מתרחשת בדיקה שעדיין חג החנוכה...
דהיינו שהמשתנה r מכיל מספר בין 1 ל 8.
כמו כן, במקרה שאיכשהו לא נבחר עיצוב, הלינק יכיל הפנייה לתקיית העיצוב מס' 1
זה מושג באמצעות (e.design || 1) דהיינו או הערך של המפתח design, או [אם אין שם ערך] 1.
מקווה שהסברתי טוב.