עקרונות בניית פורום

‏ • 27 באפריל, 2004

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

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

יש 2 סוגים רווחים של פורומים ברשת. האחד – פורום טבלאי, שבו יש נושא (Thread), והמשתמשים מגיבים לנושא זה. פורום דוגמת זה ניתן לראות ב-HydePark, והוא הפורום של phpBB. הסוג השני הוא פורום בצורת עץ, כלומר יש הודעה שהיא הנושא (ה-Thread) הראשי, ניתן להגיב על הנושא, על התגובות לנושא, על התגובות לתגובות לנושא וכן הלאה. פורומים כאלה ניתן לראות בתפוז, ב-Ynet ובאתר שלי (קישור בסיום המאמר). במאמר זה מוצגת שיטה שמתאימה ל-2 סוגי הפורומים האלה.

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

טבלת ההודעות תכיל את הנתונים הבאים: מספר הודעה (מפתח ראשי), מספר הודעת אב, מספר פורום, שם הכותב, כתובת הדואר האלקטרוני של הכותב, כותרת ההודעה (נושא, או שם ה-Thread), הטקסט של ההודעה והזמן בה נכתב ההודעה. נציין לגבי נתוני הטבלה הנ"ל ש:


  • במערכת מתקדמת עם יותר אפשרויות ייתכנו שדות נוספים. זוהי טבלה בסיסית בלבד, ועליכם להתאים אותה לצרכי הפורום שלכם (לדוגמא, הוספת שדה של קישור נלווה).
  • אם יש טבלת משתמשים לפורום, אין צורך בשדות שם הכותב וכתובת האימייל שלו, אלא בשדה מספרי – מספר המשתמש.
  • השדה מספר פורום הוא רק עבור מערכת שבה יש מספר פורומים ומכילה טבלת פורומים כפי שצוין למעלה.
  • השדות מספר הודעה ומספר פורום יכולות להיות ביחד מפתח ראשי.
השדה "מספר הודעת אב" מציין לאיזו הודעה זו תגובה. כלומר, אם עבור רשומה כלשהי שדה זה מכיל ערך 777, אזי ההודעה הנוכחית היא הודעת תגובה של הודעה מספר 777. כאשר אנו מתכנתים את המערכת נניח שאם הודעה כלשהי היא Thread, כלומר ההודעה היא לא הודעת תגובה, אז ערך השדה "מספר הודעת אב" יהיה 0 או -1. צריך גם לוודא שלא תהיה הודעה שערך השדה "מספר הודעה" שלה יהיה המספר שבחרנו.

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


הצגה בטבלה

בעמוד שמציג את כל ההודעות צריך להפעיל שאילתה שתשלוף את ההודעות שהודעות האב שלהן הן 0 (או -1 או מספר לא הגיוני אחר שאתם תקבעו), ותציג את הנושא שלהן. יש לקשר את הנושא לעמוד שמציג Thread ואת התגובות אליו, כאשר בקישור יישלח משתנה ובו מספר ההודעה של הנושא. אם אתם לא יודעים איך לעשות זאת, כנראה שלא תוכלו לבנות פורום, אך בכל זאת אציין זאת: כאשר הקישור הוא url, המשתנה הוא x והערך הוא val, הקישור יהיה:










1  








<a href="url?x=val"></a>


השאילתה תשלוף את ההודעות על פי הזמן שבהן הן נכתבו או ע"י מספר ההודעה (אם הוא עולה באופן אוטומטי) באופן הפוך (descending, ב-SQL זה DESC), כך שההודעות האחרונות שנכתבו יופיעו קודם. כמו כן, כדאי מאוד שהשאילתה תשלוף מספר קבוע וקטן יחסית (לדוגמא 10) של נתונים, משום שכאשר יצטברו נושאים רבים, העמוד יהיה ארוך מאוד, לא נוח לצפייה, וייקח לו הרבה זמן לעלות. לכן הציגו את עשרת ההודעות האחרונות שנכתבו, ותנו אפשרות של דפדוף (בכל עמוד 10 הודעות), כך שיהיה ניתן לראות יותר מעשר הודעות.

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


הצגה בעץ

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

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

זו כל הפונקציה. בעמוד של הפורום עצמו כל מה שצריך לעשות הוא לקרוא לפונקציה עם המשתנה 0, או זה שבחרתם (אפשר גם משתנה ריק; "), וכל ההודעות של הפורום יוצגו לבד. הפונקציה בעברית מבנית, כאשר Message_ID הפרמטר שהפונקציה מקבלת:
הצג-הודעות-פורום(Message_ID)


  1. שלוף מבסיס הנתונים את כל ההודעות ששדה "מספר הודעת אב" שלהן הוא Message_ID, וסדרן על פי השדה "זמן כתיבת ההודעה" בסדר יורד.
  2. עבור כל ההודעות שנשלפו בסעיף (1) בצע:

    1. הדפס את שדה "נושא הודעה".
    2. הדפס את שדה "תוכן הודעה".
    3. הדפס רווח ( ) חמש פעמים.
    4. הצג-הודעות-פורום(שדה "מספר הודעה").
הערה: הפונקציה נכתבה בעברית מבנית משום שהיא מתאימה עבור כל שפת צד שרת, לרבות השפות הגדולות PHP ו-ASP, וגם משום שהיא תיאור כללי בלבד של איך צריכה להראות הפונקציה.

זה כל מה שצריך על מנת לבנות פורום בכל שפת צד שרת עם בסיס נתונים. אני ממליץ לכם לנסות לבנות אחד בעצמכם ולא להוריד אחד ולהתקין משתי סיבות: הפורומים האלה לא יכולים להתאים בדיוק לצרכים שלכם, לדרישות שלכם מהפורום, וגם משום שאם תורידו ותתקינו, לא תקבלו נסיון ולעולם לא תלמדו כיצד לבנות מערכות פורומים או כל דבר אחר. אני בניתי כבר פורום כזה, וניתן לראות אותו באתר שלי – http://acnet.hostage.biz .

תגיות: , ,

תגובות בפייסבוק