הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   עזרה בבנייה של תבנית עץ (https://hosts.co.il/forums/showthread.php?t=74350)

Shillo 08-05-09 22:36

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


while($value = mysql_fetch_assoc($rs)) :
                if($value['msg_Parent'] == 0):
                        // Do Something
                        foreach($sub_msgs_res as $rows)
                        {
                                if($rows['msg_Parent'] == $value['msg_id'])
                                {
                                        // Do Something
                                }
                        }
                       
                endif;
        endwhile;


intercooler3819 08-05-09 22:58

הטבלה שלך במסד צריכה להראות ככה
id | cat_id | name

כאשר ID = הID של ההודעה הנוכחית
CAT_ID = הID של התגובה אליה התגובה הזו משוייכת
במידה וזוהי תגובה שלא מגיבה לתגובה אחרת (במילים פשוטות - אשכול) אז תניח בשדה זה 0
NAME וכולו' = דברים נוספים על התגובה הנוכחית

והקוד שלך אמור להיות משהו כזה:
PHP קוד:

function fetch_comments($commentid=-1$l=1)
{
    static 
$b "";
    
    if (
$commentid == -1)
    {
        
$a mysql_query("SELECT `id` FROM `comments` WHERE `comment_id` = 0 LIMIT 1");
        
$a mysql_fetch_assoc($a);
        
$commentid $a['id'];
    }
    
    
$t mysql_query("SELECT * FROM `comments` WHERE `comment_id` = {$commentid}");
    while (
$tt mysql_fetch_assoc($t))
    {
        
$b .= style_comment($tt$l+1);
        
fetch_comments($tt['id'], $l+1);
    }
    
    return 
$b;
}

echo 
fetch_comments(); 

כאשר הפונקציה style_comment() מקבל מערך של מידע על התגובה, והפרמטר השני הוא "עומק" התגובה - לפי זה אתה עושה PADDING מימין כדי להראות את העץ

אתה מוזמן פעם הבאה לחפש כאן בפורום כי אני בטוח שכבר עניתי למישהו בעבר

Shillo 08-05-09 23:26

תודה, אבל לא הבנתי בדיוק את המימוש שלה.

intercooler3819 09-05-09 00:22

מימוש של מה?

daMn 09-05-09 03:14

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

Shillo 09-05-09 10:05

ציטוט:

נכתב במקור על ידי nitsanbn (פרסם 713862)
מימוש של מה?

מימוש של הפעולה שכתבת fetch_comments

intercooler3819 09-05-09 10:34

יש לי טעות קטנה שעכשיו הבנחתי בה

הקוד התקין:
PHP קוד:

<?php
function fetch_comments($commentid=0$l=1)
{
    static 
$b "";
    
    
$t mysql_query("SELECT * FROM `comments` WHERE `comment_id` = {$commentid}");
    while (
$tt mysql_fetch_assoc($t))
    {
        
$b .= style_comment($tt$l);
        
fetch_comments($tt['id'], $l+1);
    }
    
    return 
$b;
}

echo 
fetch_comments();

ולעניינו
בהתחלה ב $commentid שווה לאפס, זהו המצב שבו אנחנו שולפים את ה"נושאים"
לאחר מכן אנחנו שולפים מהטבלת תגובות איפה שהcomment_id שזהו הID של התגובה שאליה התגובה הנוכחית מוגבת ומוסיפים אותה לBUFFER של ההדפסה
אחרכך אנחנו מבצעים את אותו דבר בעבור התגובה הנוכחית
זה ממשיך הלאה והלאה ככה בעבור כל "נושא" זה שולף את התגובות שבתוכו
הפונקציה style_comment מקבלת 2 פרמטרים, אחד מערך ASSOCIATIVE עם מידע על התגובה והשני זהו פרמטר INT שמכיל את רמת ההירככיה הנוכחית, באמצעותו תוכל ליישר את התגובות בעץ ולהראות מי הגיב למי

יש שאלות??

Shillo 09-05-09 15:44

תודה, הבנתי את זה, אבל הפעולה מחזירה שגיאות אלא אם כן אני פותח MySQL וגם אז שום דבר לא מודפס.

intercooler3819 09-05-09 15:57

אז תכתוב טבלאת מעקב יש מצב שאני טועה חח

Shillo 09-05-09 16:48

לא הבנתי בדיוק את הקטע של style_comment(), התכוונת שאני צריך לבנות אותה?


כל הזמנים הם GMT +2. הזמן כעת הוא 22:42.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ