29-08-2006, 23:13
|
|
|
חבר מתאריך: 07.08.03
הודעות: 408
|
|
.
טוב חברים יקרים, פתרתי את הבעיה, הינה הפיתרון+תוספות JS, הינה העמוד:
(תצורת העץ)
http://mamboheb.com/sell/test/vtest.php?C_ID=108
הינה הסורס של הפונקציה בלבד!:
אני אסביר את השאילת שלי, שיהיה לכם יותר קל להבין,
$Var_P_Parent מייצג את הC_ID שמתקבל מהכתובת,
השדה C_Root הוא שדה 'היסוטריה', כלומר שדה אשר מכיל את כל ההורים של הקטגוריה בסדר היררכי.
כלומר הID של כל הורה כתוב שם ומופרד בפסיקים, למשל הC_Root הזה:
0,1,30,43
אומר שהקטגוריה הספציפית הזו היא בת של קטגוריה ID 43, וקטגוריה 43 היא בת של קטגוריה 30 וכו'...
בכל אופן, השאילת מחפשת באמצעות Like בC_Root, כלומר אם זה ילד פוטנציאלי הוא יוצג כתוצאה.
בנוסף יש את התנאי C_Products >= '3'
התנאי הזה אומר שאני שולף קטגוריות ברמה 3 ומעלה, כלומר לא קטגוריות ראשיות, ולא תת קטגוריות אלה תת-תת-קטגוריה.
*כל אחד יכל לשלוף שאילת בדרך שלו, כל עוד יהיה שדה של C_ParentID שיכיל את הID של ההורה,
ושדה של ID שיכיל את הID היחודי של הקטגוריה, ובשביל נוחות C_Name שיכיל את השם של הקטגוריה.
מזה ניצור מערך ונשתמש בריקורסיה להציג את המידע
קוד PHP:
<a href="javascript:ddtreemenu.flatten('treemenu1', 'expand')">Expand All</a> | <a href="javascript:ddtreemenu.flatten('treemenu1', 'contact')">Contact All</a> <ul id="treemenu1" class="treeview"> <?php $query = "SELECT * FROM categories WHERE C_Root LIKE '%,$Var_P_Parent%' AND C_Products >= '3' ORDER BY C_Order"; /* Used to select only filters. $query = "SELECT * FROM categories WHERE C_Root LIKE '%,$Var_P_Parent%' AND C_Products >= '3' ORDER BY C_Order";
Used to select ALL cats. $query = "SELECT * FROM categories WHERE C_Root LIKE '%$Var_P_Parent%' ORDER BY C_Order"; */ $result = mysql_query($query,$database->connection); while($cat = mysql_fetch_assoc($result)) //Create the array from the query. { $myCatArray[$cat['C_ParentID']][] = Array($cat['C_ID'],$cat['C_Name']); } /* Function that show all categorys by there order and there sub categorys - NO LIMIT OF SUB CATEGORYS!. INPUT - Array of categorys, parent id as Key. OUTPUT - The categorys like tree. By - Eldad Yamin Date - 29/08/2006 */ //Show cats by threding. function display_cats($C_ID,$deep) { global $myCatArray; //Array of categorys. foreach ($myCatArray[$C_ID] as $cat) { for($i=0; $i<$deep; $i++) { echo "\t"; } echo "<li>ID: $cat[0], Name: $cat[1]"; if (is_array($myCatArray[$cat['0']])) //Check if for the given category have and sub cats. { echo "\n\t<ul>\n"; display_cats($cat['0'], $deep+1); echo "\t</ul>\n"; } echo "</li>\n"; } } display_cats($Var_P_Parent,0);
?> </ul>
<script type="text/javascript">
ddtreemenu.createTree("treemenu1", false)
</script>
הבעיה שלי כרגע היא איך להתאים את הפונקציה הזו לשירשור של פורום שהיא מסדרת את התוצאות לפי זמן התגובה ומציגה אותם לפי עומק של שירשור, כלומר הזיווחים יהיו בהתאמה למי התגובה נרשמה.
יש רעיונות?.
נערך לאחרונה ע"י Depression בתאריך 29-08-2006 בשעה 23:26.
|