![]() |
[PHP] קטגוריות רקורסיביות (?)
הי :-D
יש לי עבודה קטנה על קטגוריות רקורסיביות, כך שלדוגמא בכל קטגוריה \ תת קטגוריה \ תת-תת-תת קטגוריה יוכלו להוסיף פריט מסויים אני קצת נתקע עם התכנות של זה אשמח אם תוכלו לעזור לי |קורץ| תודה |
קטגוריות תמיד יש.
לכן נוסיף טבלה שתיקרא Cats. נחלק את הטבלה Cats בצורה הבאה: ID - Name - Description - cID ID צריך להיות PRIMARY וכל השיט. Name הוא שם הקטגוריה. Description הוא תיאור הקטגוריה. cID צריך לקבל ערך 0. אם הוא לא 0, הערך שיקבל יהיה הקטגוריה שמעליו (בעצם אם הוא לא 0 הוא לא קטגוריה אלא סאב קטגוריה). בתוכם יוכלו להיות או אייטמים או סאב קטגוריות. לכן ניצור טבלה חדשה, Items. את Items נחלק כך: ID - Name - Description - cID ID שוב יהיה PRIMARY עם מספור אוטומטי. Name שם, Description תיאור.. עכשיו cID זה הקטגוריה / הסאב. שליפה: PHP קוד:
|
לדעתי אפשר לעשות את זה בטבלה אחת, יותר טוב :)
פשוט תוסיף עוד שדה c_type שנגיד 1 = קטגוריה || 2 = סאב קטגוריה || 3 = סאב סאב... וכו'.... |
בעיקרון אתה עושה שלכל קטגוריה יהיה קישוריות מסויימת לקטגוריה שמעליו(מן הסתם הID שלו) ובשליפה אתה בודק אם לקטגוריה שמעליו יש עוד קטגוריה מעליו וכך הלאה עד שאתה מגיע לראשי
ציטוט:
|
בחלה :)
תודה עומר |
ציטוט:
הצלחת, הכל היה ברור? |
עשיתי לפני איזה חודש פונקציה נורא יפה של קטגוריות רקורסיוביות...
הפונקציה היא פונקציה רקורסיבית עם div נפתחים שלכל קטגוריה יש קטגוריות נוספות ודפי תוכן. אי הגבלה לכמות הקטגוריות שניתן להכניס (לעומק של הרקורסיה). אם אתה רוצה את הפונקציה צור קשר ואני אתן לך... |
BlueNosE, הקוד שלך ממש ממש ממש לא יעיל.
4 שאליתות + 3 לולאות שקוראות לעצמן... ממש לא מומלץ. בכל אופן, הטבלה של הקטגוריות צריכה להראות כך: קוד:
id | parent_id | title בשליפה של הקטגוריות: 1. קודם כל שלוף את כל הקטגוריות לתוך מערך 2. קרא לפונקציה מסוימת, נקרא לה getCats והפונקציה הזאת תקבל 2 פרמטרים: catArr, parent_id catArr - מערך עם כל הקטגוריות שיצרת בשלב 1 parent_id - כדי להציג את כל הקטגוריות הוא צריך להיות 0 בתוך הפונקציה, אתה עובר על המערך ובודק עבור כל ערך אם ה parent_id שלו שווה ל parent_id של הפונקציה. אם כן, אתה מדפיס/מאחסן אותו איפשהו וקורא לפונקציה getCats עם אותו מערך, רק שהפרמטר השני יהיה ה id של הערך הנוכחי. הנה דוגמא של הפונקציה: PHP קוד:
בהצלחה :) |
ציטוט:
מילא אם היית עושה continue בין לבין.. חוץ מזה, הוא ביקש הצגת משהו בתוך הקטגוריה לא?.. |
ציטוט:
הצגת המידע על אותו עקרון... אני לא הולך לכתוב לו את כל הקוד. |
אני אנסה לשלב בין מה שעומר הביא למה שאתה הבא (רן)
תודה שוב :) אני עוד עובד על זה חח |
ציטוט:
|
למה לא לעשות משהו בסגנון :
PHP קוד:
|
ממ.. אפשר הסבר על השאילתה?
לא יצא לי עדיין ללמוד את זה |
ציטוט:
PHP קוד:
שלוף מהטבלה cat הכל (CAT הוא קיצור) pcat.title שלוף מהטבלה pcat כותרת (PCAT הוא קיצור) AS pcattitle בהמשך, קרא לו pcattitle (ALIAS אם אתה מכיר את המושג) FROM category AS cat מהטבלה category בקיצור CAT - כאן מוגדר הקיצור CAT. LEFT JOIN category AS pcat שלוף גם מcategory כPCAT - כאן מוגדר הקיצור PCAT. ON (cat.pcatid = pcat.catid) איפה שcat.pcatid שווה לpcat.catid, כלומר איפה שהPCATID בCAT שווה לCATID בPCAT. שוב שימוש בALIASES. |
לא כל-כך קראתי את מה שהיה פה לעומק, אבל אני מציע בחום לעשות פעילות כזאת, אפילו במערכת קטגוריות, בצד לקוח ולא בצד שרת.
יש פה מדריך ליצירת פורום כזה ב- ASP, אבל מן הסתם העיקרון פה ה- JS, ולא קשה להפוך את ה- ASP ל- PHP. לגבי היעילות של הקוד JS, לא בדקתי את זה יותר מידי, בכלל רקורסיה לא עושה טוב לראש שלי :) אז הנה קישור למדריך ב- WebMaster (יש פה עוד כמה בונוסים, תקרא על הבניית פורום לינארי) http://www.webmaster.org.il/article.asp?id=149 |
ציטוט:
מה לעזאזל? חחח8-* זה נירא לי כמו ג'יבריש אבל תודה על הנסיון |
ציטוט:
זה בעצם שיפור לפורום רקורסיבי, הבעיה בפורום רקורסיבי, זה שרקורסיה זאת טכניקה שידועה כמבזבזת משאבים, מה שמראים במאמר הזה, זה איך לחסוך את הרקורסיה מצד שרת, להוציא לפלט מחרוזת, עכשיו, את הרקורסיה מבצעים ב- JS בצד-לקוח, היתרון הוא שבמקום שהשרת יעשה את הפעולה הכבדה מאות פעמים, השרת יעשה פעולה פשוטה יחסית, ואת החישוב ה- "מסיבי" יעשו בצד לקוח, וככה, חסכת המון משאבים. |
OK
ומזה בעצם עושה? מה הפונקציה getString ב ASP עושה? |
כל הזמנים הם GMT +2. הזמן כעת הוא 12:33. |
מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ