גולשים רבים בקשו לדעת כיצד ניתן להכין מערכת שכזו וכעת, לאחר שיקראו את ההסבר ויראו את הדוגמא, אני מקווה שיבינו שבעצם הם ידעו כל הזמן איך לעשות מערכת שכזו, כי בסך הכל, הדבר המסובך ביותר במערכת, והוא לא מסובך בכלל בפני עצמו, הוא החלק של בחירת הבאנר שזה בעצם בחירת רשומה באופן רנדומלי מתוך מסד הנתונים. אז אני מקווה שכל מי שפתאום "הבין" עד כמה דברים יכולים להיות פשוטים וסתם להראות מסובכים, ינסה בפעמים הבאות לחשוב לבד איך לעשות מה שהוא רוצה ואם הוא לא מצליח אז לפחות לבקש הכוונה בפורום, ולא לבוא ישר בבקשה (ואף לעיתים דרישה! חוצפה!) ממישהו שיבנה לו מערכת שכזו.
טוב, לאחר הטפת המוסר אפר לגשת לעבודה!
המערכת
המערכת בנויה מ-4 חלקים עקריים:
- הקוד שמשובץ בדפים בהם נרצה להציג באנר
- דף אשר אליו יופנו הבאנרים וידע להוסיף מספר לחיצה לבאנר ולהפנות לקישור המתאים
- מערכת ניהול של הבאנרים
- מסד הנתונים עצמו:
banners.mdb (access 97)
מסד הנתונים
נתחיל בהצגת מסד הנתונים והסבר על שדותיו:
במסד הנתונים נצטרך רק טבלה אחת שתקרא banners ובה השדות הבאים:
id - מספור אוטומטי, שדה מפתח
alt - הטקסט שיופיע כאשר נעמוד עם הסמן על הבאנר
link - הקישור שאליו יפנה הבאנר
hits - מספר הלחיצות על הבאנר
image - מיקום התמונה של הבאנר
הקוד
הקוד שנשבץ בדפים בהם נרצה שיופיע באנר. הקוד יידע לבחור באנר באקראיות ולהציגו. מי שלא יודע איך לבחור רשומה מתוך מסד נתונים באופן אקראי, ניתן לראות דוגמא לכך כאן הנה הקוד אשר אותו נכליל בדפים (code.asp):
<%
dim rs_ban,sql_ban
set rs_ban = server.createobject("adodb.recordset")
sql_ban = "select id,alt,link,image from banners"
rs_ban.open sql_ban,thedsn,3,1
randomize()
rs_ban.move(int(rs_ban.recordcount * rnd()))
response.write ""
response.write " "
rs_ban.close
set rs_ban = nothing
%>את הקובץ נוכל להשתיל בדפים ע"י העתק והדבק (copy & paste) או בעזרת הכללה (include) - עליה ניתן למצוא הסבר כאן
דף הספירה וההפניה
הדף אשר אליו ישלח ה-id של הבאנר ע"י לחיצה עליו. הקוד יידע להוסיף 1 למספר הלחיצות הכולל על אותו באנר בטבלה שבמסד הנתונים ולהפנות את הגולש אל הקישור המתאים. למידע נוסף על ספירת לחיצות והפניה, ניתן לראות את הדוגמא מערכת ספירת לחיצות ההוספה של 1 לשדה תתבצע בדוגמא זו בעזרת ado. הנה הקוד של דף הספירה וההפניה (redir.asp):
<%@language = vbscript%>
<%option explicit%>
<%
dim sql,cn
set cn = server.createobject("adodb.connection")
sql = "update banners set hits=hits+1 where id=" & request("id")
cn.open thedsn
cn.execute sql
cn.close
set cn = nothing
response.redirect request("url")
%>
מערכת הניהול
רצוי לאבטח את המערכת ע"י מערכת אבטחת כניסה אשר תדרוש שם וסיסמא אותם ניתן לשנות בקוד ע"י בעל האתר. לאחר אישור שם וסיסמא, נעבור לדף הניהול עצמו, בו נראה את כל המידע על כל הבאנרים שבמערכת וניתן יהיה להוסיף, לעדכן ולהסיר באנרים. לשם הפשוט והצמצום, בדוגמא זו הכנסתי את כל האפשרויות בדף אחד אשר יודע לשלוח אל עצמו את המשתנים ואת סוג הפעולה שעל הקוד לבצע (הוספה, עדכון או הסרה). הנה הקוד של דף הניהול (admin.asp):
<%@language = vbscript%>
<%option explicit%>
<%
dim id,sql,rs
id = request("id")
select case request("the_action")
case "add": dim item,values,cn
sql = "insert into banners ("
values = "("
for each item in request.querystring
if item <> "the_action" and item <> "id" then
sql = sql & "[" & item & "],"
values = values & "" & request(item) & ","
end if
next
sql = left(sql,len(sql)-1) & ") values"
sql = sql & left(values,len(values)-1) & ")"
set cn = server.createobject("adodb.connection")
cn.open thedsn
cn.execute sql
cn.close
set cn = nothing
response.redirect "admin.asp?" & rnd()
case "edit":sql = "update banners set "
for each item in request.querystring
if (item <> "id") and (item <> "the_action") then
sql = sql & item & "=" & request(item) & ", "
end if
next
sql = left(sql,len(sql)-2) & " where id=" & id
set cn = server.createobject("adodb.connection")
cn.open thedsn
cn.execute sql
cn.close
set cn = nothing
response.redirect "admin.asp?" & rnd()
case "del": sql = "delete * from banners where id=" & id
set cn = server.createobject("adodb.connection")
cn.open thedsn
cn.execute sql
cn.close
set cn = nothing
response.redirect "admin.asp?" & rnd()
case "zero": sql = "update banners set hits=0 where id=" & id
set cn = server.createobject("adodb.connection")
cn.open thedsn
cn.execute sql
cn.close
set cn = nothing
response.redirect "admin.asp?" & rnd()
end select
sql = "select * from banners" remove the * and put all the fields
set rs = server.createobject("adodb.recordset")
rs.open sql, thedsn
%>
banners administration
מערכת ניהול באנרים
<%
rs.close
set rs = nothing
%>
לסיכום
כמובן שיש עוד הרבה מאוד מקום לשיפור של המערכת, כגון ספירת חשיפות (מספר הפעמים שכל באנר נראה לגולש), הצגת באנרים לפי אחוזים (לאיזה באנר יש איזה אחוז סיכוי להבחר באקראיות), התאמת המערכת לבאנרים בפלאש, באנרים שיתחלפו לא רק ברענון הדף ועוד הרבה שיפורים שלא חשבתי עליהם כרגע. בכל מקרה, את הכייף של השיפורים אני אשאיר לכם ואשמח מאוד לקבל ממכם דוגמאות שאתם הכנתם של המערכת בתוספת שיפורים.
בהצלחה...
|