28-10-2005, 09:39
|
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
|
|
חבר מתאריך: 25.10.01
הודעות: 42,775
|
|
אתה שואל בפורום PHP, אז אני אענה לך לפי פורום PHP. לא בטוח שאפשר לעשות את זה ב ASP
(אגב, תנחומי הכנים שאתה משתמש בשפה הנ"ל...)
אם ישנה טבלה שמכילה את כל הנתונים שאתה מעוניין בהם, ואך ורק אותם, אני לא רואה סיבה לעשות מליון שאילתות רקורסיביות. אתה הרי ממילא צריך את כל הנתונים - פשוט תשלוף את כל הטבלה, ובשליפה תעשה מיון לפי parent ולאחר מכן על פי טור ה order (בהנחה ואתה מעוניין שתוכל לשלוט על סדר התצוגה של הפריטים בתפריט).
הטבלה תכיל עצם מסויים, ומי האב שלו, כאשר עצמי הראש, האב שלהם הוא 0. העצם יכול להיות מכל סוג, הוא יכול להיות בסיס אב לעצמים שמתחתיו, או, נניח, קישור. אפשר שיהיה שדה בטבלה שיקבע מה ה type של העצם, וכאמור order שציינתי לעיל.
אחרי ששלפנו את כל הטבלה הנ"ל (שאילתא אחת בלבד), אנחנו עושים משהו פשוט מאוד. אנחנו מבצעים while כל עוד יש נתונים במשתנה שאליו הוחזר המידע, ואז אנחנו מסתכלים בתוך מה שחזר על ה parentid ועל ה type. בהתאם ל parentid וה type מוסיפים למערך שאנחנו יוצרים מימדים כנדרש. לדוגמא:
קוד PHP:
while ($data = mysql_fetch_array($result)) { if ($data["parentid"] = 0) { if ($data["type"] = "link") $menu[] = array("link", $data["url"]); if ($data["type"] = "menu") $menu[] = array("menu", $data["text"]); } else { if ($data["type"] = "link") $menu[$data["parentid"]][] = array("link", $data["url"]); if ($data["type"] = "menu") $menu[$data["parentid"]][] = array("menu", $data["text"]); } }
התוצאה תהיה מערך רב מימדי שמכיל את כל מבנה התפריט שלך, שתוכל לראות יפה באמצעות ;(print_r($menu (שתעזור לך ליצור פונקציה שתדפיס את המערך הזה עם foreach...)
זה כמובן מאוד כללי, וזה די אלגוריתם. סביר להניח שהקוד הזה כפי שהוא לא יעבוד, אבל הוא נועד רק להראות כיוון חשיבה.
בהצלחה
|