מבנה פורום:

bnayal

New member
מבנה פורום:

אני בונה פורום בסגנונן תפוז (שההודעות נפתחות באותו עמוד) ואני רוצה שיוכלו לשרשר בו (למשל: יש הודעה ראשית שוקראת לתגובות שלה, התגובות שלה קוראות לתגובות שלה והתגובות של התגובות קוראות לתגובות של התגובות של התגובות שלה [חחח] וכו'). יש לי טבלה בבסיס נתונים כזאת:
CREATE TABLE `f_msgs` ( `id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `user` TEXT NOT NULL, `title` TEXT NOT NULL, `befor` TEXT NOT NULL, `text` TEXT NOT NULL, `date` TEXT NOT NULL, `hour` TEXT NOT NULL, `time` TEXT NOT NULL, `father` TEXT NOT NULL, `forum_id` TEXT NOT NULL ) TYPE = MyISAM;​
ואת הדף שמציג פורום אוספתי בקובץ מצורף... הכל טוב, אבל הקוד הזה לא יציג את הודעות שנכתבו בתגובה לתגובות של ההודעה הראשית. מישהו יכול להסביר לי את העיקרון של איך בנוי פורום כמו של תפוז? או לסדר לי את זה על הקוד? בתור התחלה - תנסו קודם להסביר לי, מקווה שאני יבין. תודה מראש....
 

hary_i

New member
עקרון של פורום

אני מניח שיש מספר רב של דרכים. הדרך שלי שממומשת במערכת הפורומים שלי: http://yafs.sail.co.il היא כזו: לכל פורום יש טבלה, בטבלה יש שדה של מספר הודעה ומספר הודעת האב. בזמן ההצגה, יש פונקציה שעוברת על הטבלה ומחפשת הודעות שמספר האב שלהן הוא 0 (הודעות ברמה עליונה) כל הודעה כזו היא מציגה, אחר כך בצורה רקורסיבית הפונקציה הזו נקראת לכל הודעה בשביל לחפש הודעות שמספר הודעת האב שלהן הוא ההודעה שקראה לפונקציה הזו. אני מקווה שההסבר מספיק ברור. אם לא, כמובן תמיד אפשר ללמוד מקבצי המקור של המערכת שלי שכמובן משוחררת תחת רשיון GPL.
 

bnayal

New member
אם היית מסתכל בקוד שהוספתי

היית רואה שככה עשיתי אבל מה שעשיתי לא יכול להציג תגובה לתגובה של תגובה (
). השמח אם תרשום פה את הקוד של הדף שמציג את הפורום...
 

kensaggy

New member
מממ...

אתה צריך לבנות פונקציה רקורסיבית. המבנה הכללי שלה הוא משהו כזה: תוציא את כל ההודעות אם שבהם ה אב = ל ID שנשלח לפונקציה. -- על כל הודעה, הרץ את הפונ' הרקורסיבית (כאשר אתה שולח את ה ID של ההודעה הנוכחית). הנחה: לפונ' אתה שולח את ID של ההודעה שאתה רוצה למצוא לה את הבנים, ולכן בהרצה הראשונה (מהתוכנית הראשית) אתה שולח 0 כ ID מקווה שזה עזר. חן.
 

orenphp

New member
כמה דברים לך ולהארי...

נתחיל בהארי ידידי, רעיון של טבלה לכל פורום הינו ממש לא מודולרי ונכון. עדיף היה לבנות עוד טבלה ובה יהיה שם הפורום והID של הפורום ולעשות עוד עמודה בטבלת ההודעות ובה יהיה הID של הפורום בו ההודעה נכתבה. בצורה כזו אתה יכול להוסיף פורמים נוספים בעניינים שונים בלי לעשות בלגן - פשוט וקל. בקשר לbnayla: אתה צריך לעשות רקורסיה פשוטה שתעבור מהאבא עד לצאצא האחרון שלו. הקוד שהבאת לא מובן - מופיעים לי כל מיני חלקי קוד עם צבעים שונים על המסך - תפריד את הקוד הרלוונטי ותעלה אותו לפה. אני הייתי עושה משהו בסגנון:
<? //messages table structure in mySQL: //ID (auto_increment) //forumID //parent //title //message(user, date, bla bla bla) $forum_to_show = 1; show_forum($forum_to_show); function show_forum($forumID, $parentID=0, $level=0) { $sql = "SELECT * FROM messages where forumID=$forumID and parent=$parentID"; $res = mysql_query($sql)or die("ERROR: ".mysql_error()); //determine the amount of spaces to present by the level of the recursive function: $spacesHtml = ""; for($i=0; $i<$level; $i++) { $spacesHtml .= " "; } if (mysql_num_rows($res)) { while($msg = mysql_fetch_array($res)) { //print the current message: echo $spacesHtml.$msg["title"]; //loop over the current message tree - u can see that the recursive function will //now check if there are any messages with a parentID = to the current messageID. show_forum($forumID, $msg["ID"], $level+1); } } } ?>​
לא בדקתי את זה אז אני לא בטוח שהכל יעבוד, אבל זה הכיוון. מקווה שזה עזר, בהצלחה.
 

hary_i

New member
גם גישה

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

Megapuzik

New member
אם אתה רוצה להמנע

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

bnayal

New member
איפה אני יכול ללמוד עוד על פונקציות

רקרוסיביות?
 

kensaggy

New member
מממ...

חפש בפורומים של Guides.co.il... בעבר היו שם הרבה דיונים בנושא (כולל דוגמאות קוד) וכבר פירסמו של כמה לינקים..
 

orenphp

New member
כתבתי לך בהודעה הקודמת

דוגמא לפו' רקורסיבית. קראת אותה?
 

bnayal

New member
עכשיו הבנתי וזה יוצא מעולה!!!

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