בולנט - דברים מיוחדים...     פרוטו - בניית אתרים

Israeli ASP Organization

ארגון ה-ASP הישראלי

מאמרים/דוגמאות קוד
קישורים
ספרות
חיפוש כללי:

חפש!
כלליHTMLASPASP.NETSQLמסדי נתוניםJavaScriptXML * XSLDHTML * CSSעיצוב וגרפיקהשרתיםComponentsפרסום ושיווקקידום אתריםקופירייטינגPHP
פרסומת
דף ראשי מדורים דרושים הרשמה למועדון אודותינו צור קשר
מיקום: מאמרים ודוגמאות קוד > כללי

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

המאמר הזה יסביר את העקרונות בהן השתמשתי בשביל לבנות פורום רקורסיבי. אני מקווה שהן יעזרו לכם לבנות פורום משלכם.

מבנה המסד נתונים

  1. שדה ID שהוא מספור אוטומטי.
  2. שם השולח - text
  3. כתובת השולח (כי לא כל הפורומים דורשים הרשמה) - text
  4. תאריך הודעה - date
  5. NewestMessage תאריך הודעה חדשה ביותר בעץ - date
  6. נושא - text
  7. תוכן - memo
  8. isParent - בוליאני - האם יש בנים להודעה - ברירת מחדל - false
  9. Parent - מספר הודעת האב.
  10. isActive - האם פעילה - בוליאני - ברירת מחדל true

הוספת הודעה

כדי להוסיף הודעה חדשה יש לשלוח NUM=0, כדי להגיב על הודעה יש לשלוח את מספר ההודעה עליה מגיבים, למשל NUM=125. מספר זה נכנס לשדה חבוי בטופס כתיבת הודעה.
באותו טופס מכניס המשתמש גם את שמו והאימייל שלו (אם לא הושלם אוטומטית מהקוקי), וכמובן נושא ותוכן של ההודעה.
לפני השליחה, יש בדיקה בJavascript של פרטי המשתמש (כתובת אימייל חוקית, הכפלת גרשיים, החלפת סיני ה < לסימני ;lt& ועוד).
בקבלת הטופס יש בדיקה: האם יש כבר הודעה שיש לה נושא ותוכן ושולח זהים. אם כן, לא תוכנס ההודעה למסד הנתונים. אם לא, מוכנסת ההודעה למסד הנתונים כך:

  1. שם השולח, כתובת השולח, נושא , תוכן
  2. NewestMessage, תאריך הודעה = now()
  3. isParent - false
  4. Parent - מספר הודעת האב (מהטופס - num)
  5. isActive - true
אחר הכנסת הנתונים הללו, אם NUM שונה מ0 ישונה הisParent של הודעת האב לtrue.
ובנוסף, כדי שהפורום "יקפיץ" את ההודעה, ישנה פונקציה רקורסיבית שמחפשת את הודעת האב של העץ הנוכחי, ומשנה את התאריך של הNewestMessage גם כן ל- Now().

הצגת הפורום

בהצגת הפורום, אני שולף את ההודעות הפעילות כולן לפי סדר של NewestMessage יורד.
את ההודעות אני שם בתוך מערך של getRows, וסוגר את הרקורדסט והקונקשן.
משתנה ה level מאותחל ל-0. (משתנה זה יעזור לי בהמשך עם ההזחה), ואני רץ על כל ההודעות, בחיפוש אחר כל הודעה שה PARENT שלה הוא 0.
כאשר אני מוצא כזאת, אני מציג אותה, כותב אותה לדף ללא הזחה. בלינק לתגובה יש להכניס את מספר ההודעה הנוכחי. ואז, אם ISPARENT שווה ל -TRUE אז יש קריאה לפונקציה הרקורסיבית בשליחת מספר ההודעה העכשווית.

הפונקציה הרקורסיבית: (מקבלת מספר הודעה)

  1. הוסף 1 לlevel (הזחה) - קביעת מיקום תחילת כתיבת ההודעה
  2. מצא את כל ההודעות שהPARENT שלהם שווה למספר ההודעה שהתקבל.
  3. עבור כל הודעה שנמצאה שהparent שלה שווה לערך שהתקבל בפונקציה:
    1. הצג את ההודעה. (יש לכתוב את מספר ההודעה בלינק לתגובה להודעה).
    2. אם ה ISPARENT שווה TRUE אז בצע את הפונקציה הרקורסיבית בשליחת מספר ההודעה.
    3. חזרה מהפונקציה לכאן
  4. הפחת 1 מ-level
  5. חזור מהפונקציה. (בעצם SUB כי היא לא מחזירה ערך)

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

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

בהצלחה!



         

מחבר: אורירמת קושי: 3  ||  ציון: (6.52173913043478)כל הזכויות שמורות ל-IAO ©

חנות לסטלן  |   מתכונים  |   חגי ישראל  |   פורטל משחקים  |   חנויות מחשבים ו-ציוד הקפי  |   מגזין מסטול לסטלן המצוי  |   קליפרים  |   גידול צמחים פרחים  |   ספא פינוק מושלם