באנר רנדומלי
סקריפט שמציג באנר רנדומלי בכל העלאה מחודשת של הדף. הסקריפט תומך בסדר עדיפויות שונה לכל באנר, כלומר ניתן לקבוע עדיפות שונה (priority) לכל באנר, כך שההסתברות להופעת באנר מסויים גדלה ככל שהעדיפות שלו גדולה מהעדיפויות של הבנארים האחרים. ניתן לשלב את הסקריפט בכל מקום שהוא באתר שלכם שבו אתם רוצים להציג באנר רנדומלי.
הערות:
סקריפט פשוט וקל להבנה. משתמש בקובץ מידע על הבנארים. ללא צורך בבסיס נתונים. דורש ידע בסיסי ב-PHP.
שימוש בפונקציות:
array() count() dirname() explode() file() list() microtime() rand() srand() trim()
rand-banner.php - הקובץ הראשי של התוכנית. בקובץ זה הבאנר נבחר באופן רנדומלי מתוך רשימה ומודפס לדפדפן.
banner_conf.inc - קובץ הגדרות, שמכיל הגדרות מסויימות עבור התוכנית. קובץ זה נכלל בראש הקובץ rand_banner.php.
כדי להשתמש בסקריפט של הבאנר הרנדומלי יש צורך לעשות מספר שינויים והכנות. ראשית יש להכין קובץ מידע על הבאנרים שיש להציג. בקובץ מידע זה כל שורה חדשה תיתן מידע על באנר שונה. המידע הנחוץ לכל באנר הוא הקישור, מיקום התמונה של הבאנר, תיאור הבאנר ו/או הקישור, וכן גם מקדם העדיפות של הבאנר. הסימן | יפריד בין שדות המידע השונים של כל באנר. שורות ריקות לא תיחשבנה וכן גם שורות לא שלמות (עם 4 שדות בדיוק שהאחרונה מייצגת מספר תקני). שורה לא שלמה תקבל מקדם עדיפות מסדר 0 ומשמעות הדבר שהבאנר הנ"ל לא יוצג אף פעם, לכן ניתן להוריד באנרים מתוך הרשימה ע"י שינוי העדיפות שלו ל-0, ואין הכרח למחוק את כל השורה. ניתן דוגמא לקובץ מידע של באנרים:
file name: banners.dat
http://www.hotmail.com|hotmail.gif|Check mail in Hotmail.com|3
http://www.nana.co.il | nana.gif | Nana Hebrew Site |
http://www.php.net | php.gif | PHP Home Site | 7
http://www.nba.com | nba.gif | NBA - I love this game! | 0
This line represents no banner at all.
יש צורך לציין בקישור את סוג הפרוטוקול (http://) בקישור של הבאנר, אחרת התוכנית תתייחס אל הקישור כאל קישור מקומי יחסית למיקום קובץ ה-PHP שבו מוכלל הסקריפט. המיקום של קבצי התמונות של הבאנרים הם יחסיים למיקום של קובץ המידע (ולא לקובץ ה-PHP שמכיל את הסקריפט). השורות החוקיות היחידות שתיחשבנה בקובץ המתואר הם שורות 1 (hotmail) ו-4 (PHP Site). שורה 2 היא ריקה ולכן מדלגים עליה. בשורה 3 לא מצויין מקדם העדיפות, ובמקרה כזה התוכנית תחשיב אותה כעדיפות 0, ולכן היא לא תוצג לעולם. שורה 5 היא גם חוקית אך מקדם העדיפות שלה היא 0 ולכן הבאנר לא ייחשב ולא יוצג. בשורה 6 אין כלל 4 שדות ולכן היא אינה חוקית.
לאחר שיצרנו את קובץ המידע של הבאנרים נשנה את ההגדרות של הסקריפט לשימושינו. ההגדרות מצויות בקובץ banner_conf.inc. ניתן לשנות את הגודל שבו יוצג הבאנר לפי המשתנים $banner_width
(רוחב הבאנר) ו-$banner_height
(גובה הבאנר). המשתנה $banner_file
מגדיר את קובץ ברירת המחדל של הבאנרים, והוא ייקבע רק כאשר הוא אינו מוגדר לפני כן. ניתן להגדיר משתנה בשם $banner_file
לפני שמייבאים את הסקריפט של הבאנר הרנדומלי, כדי להגדיר קובץ מידע של באנרים אחר מזה שמוגדר כברירת מחדל, וזה טוב בעיקר כאשר מציגים מספר באנרים רנדומליים בדף אחד כך שכל באנר בא מקבוצה אחרת של באנרים (קבצי מידע שונים).
בקובץ rand-banner.php, בסוף הסקריפט יש פקודה שמדפיסה לפלט את הבאנר הרנדומלי, ניתן לשנות את הפלט לפי טעמכם ובכך לקבוע סגנון משלכם להצגת הבאנר.
בתחילה, אנו מייבאים לתוך התוכנית שלנו את קובץ ההגדרות baner_conf.inc, ומגדירים ומאתחלים משתנים נוספים: $banners
הוא מערך שמכיל אינפורמציה על הבאנרים ומאותחל למערך ריק, $banners_total_prior
הוא סכום כל מקדמי העדיפויות של הבאנרים ומאותחל לאפס.
באמצעות הפונקציה file() אנו פותחים את קובץ המידע על הבאנרים, וכל שורה בקובץ נשמרת בתור איבר במערך שמוחזר. את התוצאה שמרנו ב-$banner_fl
. שימו לב שהשתמשנו באופרטור @
לפני הקריאה לפונקציה וזאת כדי למנוע הדפסה של הודעות שגיאה. במידה והקובץ לא קיים או בכל שגיאה אחרת, הפונקציה file() תחזיר לנו ערך שקר, ובמקרה של שגיאה התוכנית תדפיס הודעת שגיאה משל עצמה. ניתן לשנות את ההודעה או להשים מחרוזת ריקה שלא תדפיס כלום. אם הצלחנו לפתוח את הקובץ ולקרוא אותו, התוכנית ממשיכה לעבוד על המידע מהקובץ, אך תחילה אנו שומרים את שם הספריה שבה נמצא קובץ המידע במשתנה $banner_dir
, וזאת עושים באמצעות הפונקציה dirname() שמחזירה את שם הספריה כאשר נותנים לה את הדרך לקובץ מסויים.
בלולאת ה-foreach
הבאה אנו עוברים על כל שורה מהקובץ ומתרגמים אותה לאינפורמציה על כל באנר. אנו מורידים תווים לבנים מכל שורה באמצעות הפונקציה trim(), ואם השורה ריקה אנו מדלגים לשורה הבאה. אם השורה לא ריקה, אנו מפצלים את השורה ל-4 רכיבים המופרדים עם קו אנכי (|): קישור של הבאנר, התמונה של הבאנר, התיאור של הבאנר ומקדם העדיפות של הבאנר. הופכים את מקדם העדיפות של הבאנר למספר שלם, ואם ערכו קטן או שווה ל-0 אז משנים את מקדם העדיפות ל-0. אם המקדם הוא אפס אנו מדלגים על השורה הזו, שכן באנר עם עדיפות מסדר 0 לא יוצג לעולם ולכן אין טעם להכניס אותו למערך הבאנרים. אם הבאנר הוא ממקדם גדול מאפס אז אנו מכניסים אותו למערך הבאנרים, כשאנו מורידים את התווים הלבנים מימין ומשמאל.
כאן אנו מגיעים לבחירה רנדומלית של הבאנר. עד כה יש לנו מערך ממוספר של באנרים עם סדרי עדיפויות שונים וגדולים מאפס, שמהם נבחר באנר אחד באופן רנדומלי. הבחירה נעשית בקוד הבא:
<?php $banner_num=
1;
if (
$banners_total_prior>
0)
//if we have any banners in the array
{
srand((
double)
microtime()*
1000000);
$banner_num=
rand(
1,
$banners_total_prior);
//selecting a number between 1 to $banners_total_prior
}
//finding the index of the random number:
$banner_index=
0;
for (
$banner_index=
0,
$banner_i=
0 ;
$banner_i<
$banner_num ;
$banner_index++)
$banner_i+=
$banners[
$banner_index][
'priority'];
$banner_index--;
?>
בודקים אם יש בכלל באנרים במערך, ואם כן אנו בוחרים מספר רנדומלי. באמצעות הפונקציה srand() אנו מאתחלים את מנגנון המספר הרנדומלי ע"י הזמן הנוכחי, וזאת כדי שייצא לנו כל פעם מספר רנדומלי באמת. $banner_num
מכיל מספר רנדומלי בין 1 לסכום מקדמי העדיפויות של כל הבאנרים. הלולאה שבאה אחרי זה משייכת את המספר הרנדומלי לאינדקס הנכון שמצביע על הבאנר שנבחר. הלולאה מתחילה כאשר האינדקס מצביע על הבאנר הראשון, ו-$banner_i
הוא סכום מקדמי העדיפויות עד לאינדקס הנוכחי (לא כולל). בכל איטרציה אנו בודקים אם סכום העדיפויות עד כה קטן מהמספר הרנדומלי שנבחר. אם כן, אז אנו מוסיפים את העדיפות של האינדקס הנוכחי ומקדמים את האינדקס לבאנר הבא. כאשר אנו מגיעים למצב בו סכום העדיפויות גדול מהמספר הרנדומלי, אז זה אומר כי המספר הרנדומלי נפל בטווח העדיפות, אך היות והאינדקס מקדים ב-1 את הסכום אנו מורידים 1 מן האינדקס שיוצא מן הלולאה, וכך מקבלים את האינדקס שמצביע לבאנר שנבחר. הלולאה תמיד תיעצר בסופו של דבר כי המספר הרנדומלי שנבחר הוא בין 1 לסכום של כל הבאנרים, לכן תמיד מתקיים כי המספר הרנדומלי יהיה קטן או שווה לסכום כל מקדמי העדיפויות, ולכן תמיד יווצר לנו מצב שבו התנאי בלולאה לא יתקיים ואז נצא ממנה.
בסוף הסקריפט אנו מדפיסים לפלט את הבאנר שנבחר בהתאם להגדרות בקובץ banner_conf.inc והמידע על הבאנר מתוך קובץ המידע על הבאנרים. ניתן לשנות את הפלט בהתאם לצרכים שלכם, ובכך לשנות את עיצוב הבאנר הרנדומלי לפי טעמכם.
שאלה | 01-11-03 07:01 ליאור | #1244 |
| אם אני רושם במקום 7 או 3 במקדם עדיפות שם של ערך משתנה זה יפעל? |
|
שאלה/עזרה | 01-12-07 19:02 איציק לילו | #2746 |
| הורדתי את הקבצים...
יש לי פורום כל שהוא של מערכת ipb שמתי את הקבצים בFTP ואת הקוד מועתק לקובץ skin_global
עכשיו זה לא מפעיל לי את הרנדומאלי זה סתם כותב לי מלא שטויות ... וששמתי את זה סתם בדף PHP ריק זה עבד ... למה ? תעזרו לי פה או שתצרו איתי קשר באיסי 253492003 |
|
תגובה בנושא: שאלה/עזרה | 09-12-07 01:01 אבי אריה | #2783 |
| נראה לי זה בגלל שזה קוד php והוא חייב לפעול רק בקובץ php ולא בכל קובץ, (אני עונה על השאלה אבל אני לא בטוח שזה מה שאתה מתכוון וזה מה שעשית) |
|