سال نو مبارک! با آرزوی بهترینها برای تمام همراهان سایت.
فرصتی پیدا شد تا قالب سایت، با بوت استرپ 3 انطباق داده شود و در این بین یکی از کمبودهایی که احساس میشد، نبود bread crumb و مشخص نبودن عمق صفحهی جاری مورد مطالعه، در قسمتهای مختلف سایت بود:
پس از بررسی نمونههای bread crumbs موجود، مشکلی که اکثر آنها داشتند یا استفاده از سشن جهت تشکیل لیست آیتمها (سشن در سایت جاری غیرفعال است) و یا بیش از اندازه پیچیده بودن آنها بود. به همین جهت یک نمونهی سادهتر و سبکتر تهیه شد که در ذیل نحوهی نصب و استفادهی آنرا بررسی خواهیم کرد.
نصب DNTBreadCrumb
برای نصب این bread crumb مبتنی بر بوت استرپ 3، تنها کافی است دستور ذیل را در کنسول پاورشل نیوگت صادر کنید:
PM> install-package DNTBreadCrumb
تنظیمات اولیهی DNTBreadCrumb
پس از نصب، علاوه بر فایل اسمبلی DNTBreadCrumb، فایل جدید Views\Shared\_BreadCrumb.cshtml نیز به پروژهی شما اضافه میشود. این فایل، لیست نهایی آیتمهای تنظیم شدهی توسط اکشن متدها را به صورت یک bread crumb رندر میکند. مزیت کار کردن با فایلهای cshtml (بجای HTML Helperها)، امکان سفارشی سازی نهایی آنها توسط استفاده کنندهاست.
بنابراین برای نمایش لیست bread crumb تنها کافی است یک سطر ذیل را به فایل layout برنامه اضافه کنید:
@{Html.RenderPartial("_BreadCrumb");}
طراحی یک bread crumb سه سطحی
اگر به فایل
Views\Shared\_BreadCrumb.cshtml مراجعه کنید، مشاهده خواهید کرد که سطح اول bread crumb یا همان نمایش Home، به صورت پیش فرض قرار داده شدهاست و در اینجا اگر میخواهید نام دیگری را بجای Home (مثلا خانه) تنظیم کنید، به سادگی قابل انجام است.
دو سطح بعدی یک bread crumb، نام کنترلر و سپس نام اکشن متد خواهند بود:
[BreadCrumb(Title = "News Root", UseDefaultRouteUrl = true, RemoveAllDefaultRouteValues = true,
Order = 0, GlyphIcon = "glyphicon glyphicon-link")]
public class NewsController : Controller
{
[BreadCrumb(Title = "Main index", Order = 1)]
public ActionResult Index(string id)
{
if (!string.IsNullOrWhiteSpace(id))
{
this.SetCurrentBreadCrumbTitle(id);
}
return View();
}
در این مثال، از ویژگی جدید BreadCrumb بر روی کنترلر و سپس یک اکشن متد مدنظر، استفاده شدهاست.
کار با تنظیم Title یا همان عناوینی که در لینکهای bread crumb ظاهر میشوند، شروع خواهد شد. سپس اگر علاقمند بودید، میتوانید یک گلیف آیکن را نیز در اینجا مشخص کنید تا در bread crumb نهایی، کنار عنوان مشخص شده، رندر شود.
هر ویژگی BreadCrumb دارای خاصیت Url نیز هست. اما با توجه به اینکه میتوان از طریق مسیریابیهای پیش فرض، این آدرسها را پیدا کرد، نیازی به ذکر آنها نیست. برای مثال تنظیم UseDefaultRouteUrl در BreadCrumb یک کنترلر، مقدار Url مرتبط با آنرا به صورت خودکار از مسیریابی پیش فرض آن دریافت و محاسبه میکند. خاصیت RemoveAllDefaultRouteValues به این معنا است که اگر در اکشن متد index، مقدار id تنظیم شده بود، نیازی نیست تا حین تشکیل آدرس ریشهی کنترلر، این مقدار نیز لحاظ شود.
و ... همین مقدار تنظیم، برای کار با این سیستم کافی است.
موارد تکمیلی
- نیاز است عنوان bread crumb به صورت پویا تنظیم شود. چگونه اینکار را انجام دهیم؟
برای اینکار میتوانید از متد الحاقی SetCurrentBreadCrumbTitle استفاده کنید. برای نمونه تصویر ابتدای مطلب نیز به همین ترتیب تولید شدهاست. در اینجا عنوان پویای مقاله، توسط متد SetCurrentBreadCrumbTitle بجای Title پیش فرض bread crumb تنظیم شدهاست.
- چگونه میتوان بیش از سه سطح را تعریف کرد؟
برای تعریف بیش از سه سطح پیش فرض خانه/کنترلر/اکشن متد، میتوانید از متد الحاقی AddBreadCrumb استفاده کنید:
[BreadCrumb(Title = "News Archive", Order = 2)]
public ActionResult Archive(int? id)
{
if (id != null)
{
this.SetCurrentBreadCrumbTitle(string.Format("News item {0}", id.Value));
this.AddBreadCrumb(new BreadCrumb
{
Title = "News Archive",
Order = 1,
Url = Url.Action("Archive", "News", routeValues: new { id = "" })
});
}
return View();
}
در اینجا به هر تعدادی که نیاز است میتوانید AddBreadCrumb را انجام دهید. فقط باید دقت داشت که تقدم و تاخر اینها بر اساس خاصیت Order انجام میشود. بنابراین اگر پس از رندر شدن مشاهده کردید که لینک تولیدی، پس یا پیش از آیتم مدنظر شما است، فقط کافی است Orderها را صحیح مقدار دهی کنید.
سورس کامل مثالهای مطرح شدهی در این مطلب را در پروژهی
MVCBreadCrumbTest میتوانید مشاهده کنید.