שאלה:
אני רוצה תפריט מגניב ב-ASP.Net 2.0 שיהיה מותאם לתצוגה בעברית.
התפריט צריך להיות דינמי (להציג את החלקים הרלוונטיים בתפריט רק לפי מיקום העכבר על ההורה) וצריך להיות כמה שיותר סטדנרטי.
למישהו יש רעיונות?
תשובה:
נתחיל בזה שנשתמש בפקד ה-Menu החדש ב-ASP.Net 2.0.
נגרור פקד Menu לדף שלנו.
עכשיו נרצה לקבוע לו מקור מידע (איזה לינקים להציג בתפריט). נפתח את ה-Quick Tasks ונבקש להגדיר מקור מידע חדש.
נבחר שאנחנו רוצים SiteMap חדש (שהוא חלק מה-Provider Model החדש בדוט נט 2.0).

בחירה זו תיצור לנו קובץ web.sitemap חדש בתיקיית האתר.
נכניס לתוך הקובץ web.sitemap שלנו את התוכן הבא שיכיל פרקים, עמודים ופסקאות בספר.
נבצע מספר שינויים בדף:
1. נקבע את ה-Orientation של ה-Menu ל-Horizontal (כלומר שאנחנו רוצים שכל התפריט יהיה אופקי ולא אנכי).
2. נקבע שהתפריט לא יציג את ה-Node הראשון (כי נרצה שהתפריט שלנו יראה רשימת פרקים בלי דף הבית) בכך שנשנה את ה-ShowStartingNode של ה-SiteMapDataSource ל-false.
ככה נראה הקוד של הדף שלנו עכשיו:
ואם נבחר לראות את התצוגה של הקוד הזה בדף, נקבל:
זה בערך גבול הקוסטימזציה שאפשר לעשות ל-Menu מבחינת עיצוב.
נכניס לתערובת עכשיו שחקן חדש - ASP.Net CSS Control Adapters.
מדובר על מוצר מדף נפרד שמתלבש על VIsual Studio 2005 ונותן לנו יכולות נוספות לעיצוב Server Controls.
אפשר להוריד את הקובץ התקנה מכאן - http://msdn.microsoft.com/vstudio/eula.aspx?id=%20096D9643-2597-4a3b-82E3-8863145E4A3D.
נתקין ונפתח Web Site חדש, מסוג ASP.Net CSS Friendly Web Site.
נעתיק לתוך הפרוייקט את הדף הקיים שלנו.
עכשיו נרצה לעשות מספר שינויים בדף:
1. נרצה שהוא יתמוך בעברית. ולכן נשנה את תגית ה-<body> לכך שתתמוך כברירת מחדל בסידור עברי.
2. נרצה שהדף שלנו יתמוך בכל התוספות המעניינות של CSS שנקבל מהסוג פרוייקט הייחודי הזה. נוסיף הפנייה לקובץ CSS ראשי של ה-CSS Control Adapters שגורם להכלה של כל קבצי ה-CSS הרלוונטיים.
3. בנוסף, נרצה תמיכה בעיצוב לדוגמה שמגיע עם הסוג הפרוייקט אז נוסיף הפנייה לקובץ CSS נוסף שמכיל מאפיינים סצפיפיים לעיצוב ספציפי של התפריט.
4. עשינו את כל זה הרי כדי להכיל איזהשהו הגדרת CSS לא ברורה על התפריט שלנו. אז נשנה את ה-CssSelectorClass של התפריט ל-SimpleEntertainmentMenu. עוד שנייה נסביר מה זה אומר.
סה"כ הדף שלנו נראה עכשיו ככה:
עכשיו נדבר לרגע על ה-CssSelectorClass הזה, ואולי באמת הגיע הזמן שנסביר מה נותן לנו ה-Css Control Adapters המוזרים האלו.
יש בעיה עם Server Controls מורכבים (כגון, Menu, Treeview, GridView, DataList, Login, PasswordRecovery ועוד כמה).
הבעיה היא בעיית CSS - אין לנו היום נגישות לשנות את ה-CSS של כל האלמנטים הקטנים יותר שמרכיבים אותם פקדים מורכבים.
התפריט שלנו למשל מכיל כל מיני אלמנטים גרפיים שונים: חלק גרפי שמייצג את הרמה הראשונה, חלק גרפי שמייצג את הראשונה השנייה בתפריט, הרמה השלישית, כך הלאה וגם את העלים שאין להם בנים.
לכל האלמנטים האלו - אין לנו דרך ליצור היום עיצוב יחודי מלבד המעט שנחשף דרך ה-Server Control עצמו.
ה-CSS Control Adapters חושפים לנו סט נוסף של מאפייני (גם באנגלית: Properties) של CSS שנוכל לשנות.
איך הוא עושה את ההוספה הזאת, מה המנגנון שעומד מאחוריו (Control Adapters), וכך הלאה למרות שזה מאוד מעניין לא נדבר במאמר הזה.
נחזור ל-CssSelectorClass, בפועל זה שם מחלקת ה-CSS היחודיית של שנרצה לתת לפקד שלנו.
עם האתר שיצרנו נוצרו כמה קבצי CSS לדוגמה ואחד מהם מכיל מחלקה בשם SimpleEntertainmentMenu. (ואל הקובץ CSS הזה גם הוספנו הפנייה).
הגיע הזמן לשנות את המידע של התפריט ככה שהוא יהיה בעברית:
וככה יראה הדף שלנו עכשיו בתצוגה:
אז, יש בעיה. אפשר לראות שהחצים הקטנים נמצאים בצד ימין (על הטקסט בכל הרמות שהן לא עלים), והילדים (הפסקאות) נפתחות לצד ימין ולא לצד שמאל.
נלך לקובץ SimpleMenu.css ונשנה את ההגדרה הבאה:
נשנה ל-
נסביר מה זה ה-CSS המוזר הזה ומה השינוי הזה שעשינו.
ברור לנו ש-SimpleEntertainmentMenu זה שם המחלקה שלנו.
ul.AspNet-Menu זאת הקידומת לכל שינוי שנרצה ליצור לכל ילד בתוך פקד Menu של ASP.Net.
כל ul שנכתוב לאחר מכן יפרט את הרמה הבאה, כאשר האחרון הוא לכל הרמות שיבואו אחריו.
כך ש-ul.AspNet-Menu הוא לרמה ה-1, ה-ul.AspNet-Menu ul הוא לרמה השנייה וה-ul.AspNet-Menu ul ul הוא לרמה השלישית והיות והוא האחרון הוא לשלישית ואלו שיבואו אחריה.
יש עוד המון מחלקות CSS שנחשפות לנו (התא הנבחר, ילד שנבחר, עלה שנבחר וכך הלאה).
סה"כ אמרנו שאנחנו רוצים שהתאים מהרמה השלישית ומעלה יפתחו לצד הנגדי לצד שהם נפתחו עד עכשיו.
נשנה גם את השורת CSS הבאה בכל מקום שנראה אותו:
ל-
וכאן ביקשנו מהרקע שיציג את התמונה של החץ בצד שמאל במקום בצד ימין.
ובעקבות שני שינויי ה-CSS הקטנטנים האלו, נקבל תפריט דינמי שתומך בעברית.
עכשיו נחפור קצת על איזה עוד מחלקות CSS מעניינות נוכל לקנפג בתפריט.

נוכל לראות שיש שתי סוגי מחלקות לפקד ה-Menu: מחלקות לסידור אנכי (עם התחילית ul) ומחלקות לסידור אופקי (בלי תחילית).
את המחלקה ul כבר הכרנו וראינו שהיא מדברת על תא מסויים ברמה כמספר ה-ulים שמופיעים.
נוכל גם לראות את המחלקה AspNet-Menu-Hover שמאפשרת לנו לקבוע נתוני CSS לתא שעליו כרגע עומד העכבר.
גם נראה את המחלקה AspNet-Menu-Left שמאפשרת לנו לקבוע נתוני CSS לכל האלמנטים בתפריט ללא ילדים.
עומק הקורה ב-CSS Control Adapters הולך הרבה יותר עמוק:
- נתמכים מספר פקדים נוספים של ASP.Net 2.0 (בניהם פקדי ה-TreeView, GridView ו-DataList שידועים בצרכי גרפיקה מוזרים ומשונים שלא נענו בדוט נט 2.0)
- ניתן לשנות מספר רב של מאפיינים בתוך המחלקות השונות, לרבות האלמנטים ה-HTMLים שלהם (ע"י פירוט שם האלמנט לאחר שם המחלקה).
- אפשר לקבוע קבצי CSS נפרדים לדפדפנים מסוג שונה.
- אם נרצה תמיכה של CSS Control Adapters בפקדים נוספים שלא מגיעים כברירת מחדל נוכל לרשת מ-System.Web.UI.WebControls.Adapters.WebControlAdapter וליצור להם CSS Control Adapter משלהם.
פרוייקט לדוגמה זמין להורדה כאן - http://www.JustinAngel.Net/files/CssAdapters.zip.
קישור: http://www.tapuz.co.il/tapuzforum/main/Viewmsg.asp?forum=831&msgid=99616949