פורום עצי

bnayal

New member
פורום עצי

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

אמיר ט

New member
הרעיון בגדול

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

bnayal

New member
לא הבנת

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

bnayal

New member
צריך בכל זאת עזרה...

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

אמיר ט

New member
הרקורסיה שלך לא נכונה...

אני לא יודע בדיוק איך אתה שולף, אבל בוא אני אתאר לך את האלגוריתם ביתר פרטנות ואני אדגיש את הקטע שאני מאמין שהוא הבעייתי אצלך : 1. לשלוף את כל הרשומות עם אבא 0. 2. על כל רשומה ($id לצורך העניין) עשה 2.1 הדפס את הרשומה 2.2 בדוק אם יש רשומות בעלי אבא $id 2.3 על כל רשומה (שאלה הילדים...) חזור לסעיף 2 עם הID של הבן הטריק הוא שבתוך הרקורסיה עצמה יש לך לולאה שעוברת על הילדים ונכנסת אליהם אחד אחד. אני אישית כשמימשתי את העניין בעבר הוספתי עוד משתנה שמייצג את הרמה של כל רשומה, במקרה של הודעה ראשית הוא 0 ועם כל כניסה לבן הרמה גודלת ב 1. כאשר לא יהיו יותר בנים לאותו בן הרקורסיה תחזור ואז שוב הרמה תהיה 0 ותמשיך להודעה הראשית הבאה.
 

bnayal

New member
אני צריך הסבר מפורט יותר על החלק

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

אמיר ט

New member
אוקי

נגיד ולפונקציה של הרקורסיה קוראים X, והיא מקבלת שני פרמטרים, הפרמטר הראשון הוא הID של האבא שנציג עכשיו את הבנים שלו ופרמטר נוסף בשם LEVEL שהוא הרמה שלנו בעומק העץ של הפורום. הקריאה לפונק' נעשית על ידי X(0,0) -> כלומר אנחנו ברמה 0 ואנחנו רוצים להראות את כל הבנים של אבא 0. לאבא 0 יש 3 בנים (1,2,3), עכשיו בלולאה נעבור על כל האחד מהם: עבור הראשון (1), נדפיס אותו למסך, ואז נקרא ל X(1,1 ) -> אנחנו ברמה 1 ורוצים את כל הבנים של אבא 1. לאבא 1 יש בן 1 (4), נדפיס אותו ונקרא ל X(4,2) -> לאבא 4 אין בנים לכן אנחנו חוזרים רמה אחת למעלה. עלינו רמה, אנחנו עכשיו בלולאה שמדפיסה את הבנים של אבא 1, ואין יותר בנים, לכן נחזור עוד רמה למעלה, ללולאה שמדפיסה את בניו של אבא 0. עכשיו נדפיס את 2 ונכנס ונקרא ל X(2,1) -> כדי לבדוק את יש בנים ל אבא 2. אין לי כח להמשיך לעבור על זה אבל אני מקווה שהבנת את הרעיון. וזה פחות או יורת המימוש של העניין, באבסטרקציה כמובן :
function Build_Forum_Tree( $parentID, $level=0) { $qSons=mysql_query("select * from forum_table where Parent_ID=$parentID"); while( $son = mysql_fetch_object($qSons) ) { MakeSpaceForLevel($level); //prints $level number of tabs print $son->Koteret; Build_Forum_Tree( $son->ID, $level+1 ); } mysql_free_result( $qSons ); } }​
זה בגדול הרעיון, הקריאה הראשונית לפונק' היא
Build_Forum_Tree(0);​
אני מקווה שזה עוזר לך.
 
למעלה