1. مقدمة
يتطلب أي موقع ويب يتكون من صفحات متعددة نوعًا ما من واجهة مستخدم التنقل، والتي يتم إنشاؤها في خطوتين. أولاً، يجب تحديد البنية المنطقية للموقع، ثم تتم إضافة عناصر واجهة المستخدم للسماح للمستخدمين بالتنقل ذهابًا وإيابًا بين الأجزاء المختلفة لبنية الموقع. قبل ASP.NET 2.0، كان مطلوبًا من المطورين حل هاتين المشكلتين بأنفسهم. ومع ذلك، اعتبارًا من الإصدار 2.0، يوفر ASP.NET طريقة بسيطة لتحديد بنية الموقع ويتضمن عددًا من عناصر تحكم الويب - المصممة خصيصًا لعرض واجهة مستخدم التنقل في الموقع.
قمنا في المقالة السابقة بتحليل كيفية إنشاء ملف Sitemap Web.sitemap XML من خلال عناصر تحكم الويب الخاصة بالتنقل وكيفية عرض معلومات التنقل في الموقع، والتي تتضمن:
· SiteMapPath، الذي يعرض مسار التنقل (الصفحة الرئيسية>إلكترونيات>XBOX)
·TreeView، والذي يعرض شجرة معروضة رأسيًا قابلة للطي، تُستخدم لعرض قائمة التسلسل الهرمي لخريطة الموقع بالكامل
، والتي تعرض قائمة محاذاة أفقيًا أو رأسيًا.
قدمت المقالة السابقة فقط وظيفة وإمكانات لملف خريطة الموقع والتحكم في الويب . في هذا القسم، سنوجه انتباهنا إلى التحكم برمجيًا في معلومات خريطة الموقع وفحص عنصر تحكم ويب للتنقل في SiteMapPath بالتفصيل.
2. خريطة الموقع
تستخدم الأمثلة الواردة في هذه المقالة خريطة الموقع التي تم إنشاؤها في الجزء الأول. يمكنك الاطلاع على الصيغة الدقيقة لملف XML لخريطة الموقع في الجزء الأول أو تنزيله في نهاية هذه المقالة. يظهر أدناه تمثيل رسومي لبنية الموقع المستخدمة في هذه الأمثلة:
3. خريطة الموقع التي يتم التحكم فيها برمجيًا
خريطة الموقع عبارة عن مجموعة من عقد خريطة الموقع المرتبطة. عادةً، تحتوي كل عقدة خريطة موقع على عنوان وعنوان URL ووصف. الصورة الموضحة أعلاه هي مثال لخريطة الموقع، حيث يمثل كل مستطيل عقدة خريطة الموقع. لا يتطلب ASP.NET تنسيقًا محددًا لتحديد خرائط الموقع، على الرغم من أنه يوفر الخيار الافتراضي لاستخدام ملف بتنسيق XML. (راجع الجزء الأول للحصول على تفاصيل حول ملفات XML.)
يوفر ASP.NET فئة تسمى SiteMap - والتي توفر وصولاً برمجيًا للقراءة فقط إلى خريطة الموقع. يتم استخدام هذه الفئة داخليًا من خلال عنصري تحكم، سنحللهما لاحقًا في هذه المقالة:
SiteMapPath - يُنشئ مسار تنقل استنادًا إلى موقع الصفحة التي تمت زيارتها وبنية الموقع الخاصة بها. على وجه التحديد، يبدأ SiteMapPath عند العقدة التي يتم إرجاعها بواسطة خاصية SiteMap.CurrentNode ويجتاز التسلسل الهرمي إلى الجذر.
· SiteMapDataSource - عنصر التحكم هذا ينشئ مصدر بيانات هرميًا - فهو يرسم بنية خريطة الموقع. من أجل عرض معلومات خريطة الموقع في عنصر تحكم ويب آخر، مثل TreeView أو القائمة، لا يقوم عنصر تحكم الويب بالاستعلام عن خريطة الموقع مباشرةً؛ بل يرتبط بعنصر تحكم SiteMapDataSource - المسؤول عن قراءة بنية خريطة الموقع.
تحتوي فئة SiteMap على خاصيتين: RootNode وCurrentNode. تقوم كلا الخاصيتين بإرجاع مثيلات SiteMapNode. تمثل فئة SiteMapNode عقدة محددة في خريطة الموقع ولها خصائص تصف العقدة - العنوان، وعنوان URL، والوصف، بالإضافة إلى الخصائص التي تتحكم في التسلسل الهرمي برمجيًا - ParentNode، وChildNodes، وNextSibling، وPreviousSibling، وما إلى ذلك.
يمكنك استخدام فئة SiteMap في صفحات ASP.NET الخاصة بك. على سبيل المثال، يمكننا عرض الروابط التالية والسابقة والأعلى في كل صفحة - فقط عن طريق إضافة ثلاثة عناصر تحكم HyperLink إلى الصفحة الرئيسية للموقع، بالإضافة إلى القليل من البرمجة للتحقق مما إذا كانت CurrentNode تحتوي على NextSibling أو PreviousSibling أو ParentNode. على وجه التحديد، ستضيف العلامات التالية إلى صفحتك الرئيسية:
[<asp:HyperLink ID="lnkPrev" runat="server">السابق</asp:HyperLink>] |
[<asp:HyperLink ID="lnkUp" runat="server">أعلى</asp:HyperLink>] |
[<asp:HyperLink ID="lnkNext" runat="server">Next</asp:HyperLink>]
يبدو معالج الأحداث Page_Load للصفحة الرئيسية كما يلي:
إذا كان SiteMap.CurrentNode ليس شيئًا، إذن
'قم بتعيين الرابط التالي/السابق/الأعلىإذا كان SiteMap.CurrentNode.PreviousSibling ليس شيئًا إذن
lnkPrev.NavigateUrl = SiteMap.CurrentNode.PreviousSibling.Url
lnkPrev.Text = "< السابق ("& SiteMap.CurrentNode.PreviousSibling.Title & ")"
آخر
lnkPrev.NavigateUrl = String.Empty
lnkPrev.Text = "<السابق"
نهاية إذا
إذا كان SiteMap.CurrentNode.ParentNode ليس شيئًا إذن
lnkUp.NavigateUrl = SiteMap.CurrentNode.ParentNode.Url
lnkUp.Text = "أعلى ("& SiteMap.CurrentNode.ParentNode.Title & ")"
آخر
lnkUp.NavigateUrl = String.Empty
lnkUp.Text = "أعلى"
نهاية إذا
إذا كان SiteMap.CurrentNode.NextSibling ليس شيئًا إذن
lnkNext.NavigateUrl = SiteMap.CurrentNode.NextSibling.Url
lnkNext.Text = "(" & SiteMap.CurrentNode.NextSibling.Title & ") التالي >"
آخر
lnkNext.NavigateUrl = String.Empty
lnkNext.Text = "التالي >"
نهاية إذا
إنهاء إذا كان
هذا سيؤدي إلى إضافة ثلاثة ارتباطات تشعبية التالي والأعلى والسابق إلى كل صفحة ترث من الصفحة الرئيسية، راجع اللقطة أدناه.
4. استخدم عنصر التحكم SiteMapPath لعرض مسارات التنقل
يعرض عنصر التحكم SiteMapPath مسار التنقل - يُستخدم لإظهار موقع المستخدمين في بنية الموقع. يتم تحديد مخرجات عنصر تحكم SiteMapPath من خلال العوامل الثلاثة التالية:
· بنية الموقع، كما هو محدد في خريطة الموقع،
· الصفحة التي تتم زيارتها، و
· قيم خاصية عنصر تحكم SiteMapPath
عند الصفحة عند الوصول إلى عنصر تحكم SiteMapPath، يحاول عنصر التحكم SiteMapPath تحويل تعيينات عنوان URL للصفحة إلى قيمة عنوان URL لعقدة خريطة الموقع المحددة في خريطة الموقع. إذا تم العثور على تطابق، فسيقوم عنصر التحكم باجتياز البنية حتى الجذر وينتج المخرجات التالية: RootNode>ParentNode>...>ParentNode>CurrentNode. CurrentNode هنا هو عنوان عقدة خريطة الموقع - يتم استخدامه لتعيين عنوان URL لطلب الصفحة الحالية؛ ويتم إنشاء RootNode وParentNodes كارتباطات تشعبية إذا كانت عقدة خريطة الموقع تحتوي على قيمة URL محددة في خريطة الموقع. سيؤدي عنصر تحكم SiteMapPath في صفحة "كتب المحفوظات" (Books/History.aspx) إلى إنشاء الصفحة الرئيسية>الكتب>التاريخ، كما سيقوم أيضًا بإنشاء الصفحة الرئيسية والكتب في شكل ارتباطات تشعبية، تشير إلى Default.aspx وBooks/Default.aspx على التوالي. . عند الوصول إلى Books/Default.aspx، يقوم SiteMapPath بإنشاء الصفحة الرئيسية>الكتب.
لكي نكون واضحين جدًا، تعتمد نتائج SiteMapPath على خريطة الموقع نفسها وعلى الصفحة التي تتم زيارتها. يمكن تخصيص مخرجات SiteMapPath من خلال خصائص عنصر التحكم هذا. توجد بعض الخصائص في تنسيق تحكم الويب القياسي - BackColor، وFont، وForeColor، وما إلى ذلك - وهناك بعض الإعدادات الخاصة بـ SiteMapPath، بما في ذلك:
u PathDirection - يمكن أن يأخذ إحدى القيمتين، RootToCurrent (القيمة الافتراضية) أو CurrentToRoot. عندما تكون القيمة RootToCurrent، يتم إنشاء مسار التنقل في صفحة "كتب التاريخ" كـ الصفحة الرئيسية>الكتب>التاريخ؛ وعندما تكون القيمة هي CurrentToRoot، سيكون الإخراج التاريخ>الكتب>الصفحة الرئيسية.
·PathSeparator - يحدد السلسلة المستخدمة لفصل كل عقدة في مسار التنقل؛ الافتراضي هو >
·RenderCurrentNodeAsLink - سمة منطقية - يحدد ما إذا كان يجب إنشاء CurrentNode كرابط؛
·ParentLevelsDisplayed - قيمة عددية - يمكن استخدامها للحد من ارتفاع بنية الشجرة التي يعرضها مسار التنقل. بشكل افتراضي، قيمة هذه السمة هي -1، مما يعني أنه لا يوجد حد؛ سيؤدي تعيين قيمتها إلى 1 إلى إنشاء كتب التنقل> التاريخ في صفحة "كتب التاريخ". لم يتم تضمين الجذر لأن عنصر تحكم SiteMapPath لا يعبر إلا إلى أصل واحد - من "السجل" إلى "الكتاب".
· ShowToolTips - إذا كانت عقدة خريطة الموقع تحتوي على قيمة وصف، فسيتم عرض الوصف كنص تلميح أداة لكل عقدة مسار التنقل إذا تم تعيين هذه الخاصية على True (الافتراضي).
هناك أيضًا خصائص نمط يمكن استخدامها لتعيين BackColor، وFont، وForeColor، وما إلى ذلك - لأجزاء مختلفة من عنصر تحكم SiteMapPath. يمكنك استخدام خاصية NodeStyle لتخصيص مظهر العقد في مسار التنقل؛ ويمكنك استخدام RootNodeStyle وCurrentNodeStyle لتخصيص العقد الأولى والأخيرة في مسار التنقل بشكل أكبر. بشكل عام، الطريقة الأسهل والأكثر إمتاعًا من الناحية الجمالية لتنسيق عنصر التحكم SiteMapPath هي استخدام معالج "التنسيق التلقائي" الخاص به - ويمكن تمكين ذلك عبر العلامة الحساسة لعنصر التحكم.
5. قم بتخصيص المخرجات التي تم إنشاؤها باستخدام القوالب
يحتوي SiteMapPath على أربعة قوالب - وهي تسمح بمزيد من التخصيص للمخرجات التي تم إنشاؤها. تسمح لك القوالب بمزج علامات HTML الثابتة وعناصر تحكم الويب وبناء جملة ربط البيانات؛ إذا كنت قد استخدمت عناصر تحكم DataList أو Repeater من قبل، فأنت على دراية بالقوالب بالفعل. القوالب في ASP.NET 2.0 هي في الأساس نفس القوالب الموجودة في ASP.NET 1.x، فيما عدا أن ASP.NET 2.0 يقدم بعض الصياغات الجديدة الأكثر إيجازًا لتعبيرات ربط البيانات. على سبيل المثال، في ASP.NET 1.x، يجب عليك استخدام بناء الجملة <%# DataBinder.Eval(Container.DataItem, PropertyName) %> للحصول على قيمة العمود. في ASP.NET 2.0، لا يزال من الممكن استخدام بناء الجملة القديم هذا، ولكن يمكنك اختياريًا استخدام الإصدار الأقصر <%# Eval(PropertyName) %>.
افتراضيًا، يقوم SiteMapPath بإنشاء العقد الجذرية والأصلية كارتباطات تشعبية عادية بحيث عندما ينقر المستخدمون على الارتباط، يمكنهم التحرك سريعًا للأعلى في شجرة التسلسل الهرمي للتحكم. ومع ذلك، قد ترغب في إجراء بعض المعالجة من جانب الخادم قبل إرسال المعلومات مرة أخرى إلى المستخدم - ربما تريد تسجيل المكان الذي يتجه إليه المستخدم أو حفظ أي تغييرات يجريها على الصفحة تلقائيًا. يمكن تحقيق ذلك باستخدام قالب وإنشاء العقدة كزر ارتباط.
على سبيل المثال، إذا كنت تريد فقط إنشاء العقدة الجذرية لـ SiteMapPath كـ LinkButton، فيمكنك استخدام العلامة التالية لإضافة <RootNodeTemplate> إلى عنصر تحكم SiteMapPath:
<asp:SiteMapPath ID="SiteMapPath1" runat="server" >
< قالب العقدة الجذرية >
<asp:LinkButton ID = "LinkButton1" runat = "الخادم"
النص='<%# تقييم("العنوان") %>'
CommandArgument='<%# Eval("url") %>'
OnCommand = "LinkButton1_Command">
</asp:زر الرابط>
</RootNodeTemplate>
</asp:SiteMapPath>
تضيف هذه العلامة عنصر تحكم LinkButton إلى SiteMapPath - ويتم تعيين خاصية النص الخاصة بها إلى خاصية العنوان الخاصة بـ SiteMapNode المقابلة. عند النقر فوق LinkButton، يحدث إعادة نشر ويتم تشغيل حدث أمر عنصر التحكم - يؤدي ذلك إلى تنشيط معالج الأحداث LinkButton1_Command. يتم تمرير خاصية URL الخاصة بـ SiteMapNode إلى معالج الحدث هذا من خلال خاصية CommandArgument. في معالج الحدث هذا، يمكنك إجراء أي معالجة مطلوبة من جانب الخادم، ثم توجيه المستخدم إلى الصفحة التي طلبها من خلال Response.Redirect(e.CommandArgument).