מטרת המאמר: הדגמת יכולות של XML+XSL השיטה: בניית תפריט דינמי רב שכבות
מבנה ה- XML:
הסבר
כפי שניתן לראות לכל האלמנטים בתפריט יש את אותו שם כאשר הם מכוננים אחד בתוך השני. הכינון מהווה את המבנה ההיררכי של התפריט והסגולות Attributes) מתארות כל אלמנט והקשרים שלו לרשומת האב ואם הוא עלה או ענף 0- ענף 1 - עלה. כמו כן יש סגולה ששומרת את כותרת האלמנט בתפריט וסגולה נוספת לרמה של התפריט, 0 רמה ראשונה.
מבנה ה-XSL:
updateDivPath(this.parentNode)
changeTopLineStyle(this);showMenu(this);
changeTopLineStyle(this);
displayMenu(this)
|
הסבר
נשתמש בשני טמפלטים אחד בונה את השורה העליונה של התפריט והוא פונה רק לצומת ברמה הראשונה מתחת לשורש הטמפלט השני פונה לכל שאר הרמות ואני משתמש ב// על מנת להתייחס לכל האלמנטים ללא קשר לרמה בה התפריט נמצא למעט הרמה הראשונה
הנה הקוד:
הטמפלט הזה מכיל את כל הדיבים של התפריטים והתוכן שלהם בדרך אני גם משתמש ב-SCRIPT
getSPath()_getParentId(this)
שמחזיר לסגולה divPath שקבעתי לעצמי בדיב את כל הדיבים הקשורים לדיב המדובר
ואיך זה מוצג:
כדי להציג את התפריט אני טוען שני אובייקטים אחד שמחזיק את ה- XML ואחד שמחזיק את ה-XSL לשני האובייקטים נעשה טרנספורמציה כאשר העמוד נטען
להלן הקוד: function bodyOnLoad()
{
//load the html
xmldoc = new ActiveXObject("Microsoft.XMLDOM");
xmldoc.async = false;
xmldoc.load("menu2.xml");
xsldoc = new ActiveXObject("Microsoft.XMLDOM");
xsldoc.async = false;
xsldoc.load("menu.xsl");
divMenu.innerHTML = xmldoc.transformNode(xsldoc);
}
כל השאר זה פונקציות פשוטות שמשתמשות בדום על מנת להציג או להסתיר אלמנטים שונים בתפריט את הפונקציות ניתן לראות בתצוגת קוד רגילה
על מנת להתקדם
ניתן להוסיף לתפריט ארוע לחיצת עכבר בתוך ה XSL שיקח ערך מסגולה שתוסיפו ל XML ובה תשמרו את ההפניות לעמודים שונים או לפונקציות שונות בעת בחירה של אלמנט בתפריט כמו כן ניתן להוסיף סגולה של זמין/לא זמין לאלמנט בתפריט שישתנה בהתאם לעמודים בהם נמצאים. אפשרות נוספת היא ליצור ממשק אדמין בתצורת עץ על מנת לאפשר למנהל המערכת לבנות את התפריט בלי לכתוב את ה- XML כמו כן ניתן להשתמש בדאטה על מנת לבנות מפת אתר וכיוצא בזה ...
סיכום
כפי שניתן לראות שימוש בטכנולוגיה זו מנצלת את השימוש במבנה ההיררכי של הנתונים ועיבוד שלהם באמצעות רכיב תצוגה. היתרון הגדול שניתן למצוא כאן הוא העבודה בצד הלקוח ומיעוט הקוד שנכתב. אמנם למי שהנושא חדש עבורו קצת קשה לעשות שינוי תפיסתי אבל מאוד מומלץ.
בהצלחה!
|