פרסומת

PHP – בניית מערכת תגובות שרשרת

על מנת להתחיל ולקרוא את המדריך, עליכם להכיר את השימוש בבסיס נתונים SQL וכיצד לעבוד עם PHP ושילוב של שאילתות  SQL.
בנוסף, עליכם לדעת לעבוד עם JS.

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

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

עץ התגובות שלנו יתבסס על שתי טבלאות נתונים, טבלת המשתמשים וטבלת התגובות.

כעת נתאר כיצד לבנות את טבלאות הנתונים:

טבלת המשתמשים: | ID ייחודי למשתמש | שם משתמש | +כל מידע נוסף שתרצו לשמור על המשתמש

טבלת התגובות: | ID ייחודי לתגובה | topic_id | member_id | post_id | level | text | +כל מידע נוסף שברצונכם להוסיף

הסבר על שדות טבלת התגובות:

  • text – שמירת תוכן התגובה
  • topic_id – במקרה בו אתם יוצרים בכמה עמודים שונים עצי תגובות שונים, משתנה זה יציין לאיזה עץ תגובות התגובה משתייכת
  • level – עומק התגובה – מספר שיציין באיזה עומק עלינו ליצור את התגובה שלנו
  • post_id – מספר שיציין באיזה שלב מבין התגובות ממוקמת התגובה שלנו.

מכאן, שאת עץ התגובות שלנו ניצור בעזרת שני משתנים עיקריים שיעניקו לעץ את צורתו. level שיכתיב את העומק של כל תגובה ו-post_id שיציין לגבי כל תגובה, באיזה "גובה" היא נמצאת (המיקום שלה בעץ).

כעת נפעיל את השאילתה ששולפת לנו את הנתונים הרלוונטים לגבי מערכת התגובות שלנו:

[cce lang="sql"]

SELECT
    posts.*, members.name
FROM
    posts
LEFT JOIN
    members
ON
    posts.member_id = members.id
WHERE
    topic_id='$id'
ORDER BY
    post_id ASC

[/cce]

בעזרת השאילתה הזו נשלוף את כל הנתונים. משתי הטבלאות שלנו, Posts ו-members.

ברקע העמוד, נבנה פונקציית JS כלשהי, בדוגמא הזו נקרא לה showhideform, פונקצייה זו תיצור תקבל שלושה פרמטרים לתגובה מסויימת. עומק (level), מיקום התגובה (post_id), וtopic_id שיציין את מספר עץ התגובה.

פונקציה זו תקפיץ לנו הודעת JS. בה נכניס את התגובה שלנו. התגובה תיכנס לבסיס הנתונים ע"י שאילתת INSERT שתכלול את הפרמטרים שקיבלנו בפונקציה. הפונקציה וקוד הHTML של טופס כתיבת התגובה עצמה יהיו האלמנטים בצד הלקוח שיאפשרו לנו לשלוח תגובות במערכת

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

[cce lang="php"]

if($DB->get_num_rows()==0)
{
    //echo the "no comments text"
}

[/cce]

אם באמת לא קיבלנו תוצאות נוכל להדפיס "אין תגובות במערכת" ובנוסף נוסיף לחצן שיקשר לפונקציית הJS שלנו:

ללחצן נוסיף מאפיין onClick באופן הבא:

[cce lang="php"]

onClick="showhideform(-1, -1, <?php echo "$topic_id"; ?>)"

[/cce]

בסוף התנאי הזה נוסיף מאורע ELSE, שכאשר כן יש תגובות, נתחיל ליצור את עץ התגובות. בתוך הELSE הזה ניצור לחצן להוספת תגובה ראשית. ללחצן הזה נוסיף את אותה הקריאה לפונקציית showhideform כמו שהוספנו ללחצן האחרון (במקרה בו אין תגובות, שכן זהו לחצן להוספת תגובה בעומק 0).

מייד לאחר מכן ניצור לולאה שתדפיס לנו אחד אחרי השני את התגובות, הלולאה תדפיס את התגובות לפי סדר הpost_id שלהן (לפי חלק הORDER BY בשאילתה).

עומק התגובה:

בתוך הלולאה, ניצור טבלאות או DIVים, כל אחד בעומק אחר לפי ה-level שמתקבל. כך ניתן למשל לקבוע שרוחב התגובה הנוכחית יהיה 100% אם זוהי תגובה ראשונה, 90% אם זוהי תגובה שנייה וכן הלאה. כחו בחשבון שלאחר 10 תגובות יווצר לכם גובה שלילי, כך שעדיף ללכת בקפיצות קטנות באחוזים.

תגובה לתגובה:

בסוף כל תגובה נוסיף לחצן "תגובה" שיגיב לתגובה עליה לחצנו. כמו מקודם, נפעיל את הפונקצייה showhideform. כעת נשלח לה כLEVEL את הLEVEL+1 של התגובה הנוכחית (כדי שהעומק שלה יהיה גדול באחד מזה של הנוכחית).

במקרה הPost_id יש לטפל בנפרד. לתגובה שאנו יוצרים כרגע. ניתן post_id+1 מזה של התגובה הנוכחית. ובנוסף, נריץ שאילתה שמוסיפה אחד לכל התגובות באותו העץ שבהן הpost_id גדול או שווה לpost_id הנוכחי, כדי "לדחוף" את התגובה בין שאר התגובות.

זהו, לאחר כל החלק הטכני, ניתן להתחיל לעצב את עץ התגובות שלנו. שיהיה בהצלחה!

עדיין אין תגובות למאמר זה

הגב למאמר זה

כתובת האימייל שלך לא תפורסם


*