Навигация по сайту в ASP.NET 2.0 - Расширяем класс StaticSiteMapProvider

ОГЛАВЛЕНИЕ

Расширяем класс StaticSiteMapProvider

.NET Framework имеет в наличии класс StaticSiteMapProvider, который содержит в себе основную функциональность, требуемую для специализированного провайдера карты сайта. Для того чтобы создать своего собственного провайдера карты сайта, нам всего лишь необходим класс, который унаследует класс StaticSiteMapProvider и предоставит реализацию следующих двух методов:

  • GetRootNodeCore() - возвращает корневой узел карты сайта.
  • BuildSiteMap() - формирует карту сайта и возвращает корневой узел.
В дополнение к данным двум методам существует набор других методов, которые могут быть перегружены при необходимости. Например, нам понадобится перегрузить метод Initialize() для любого специализированного провайдера, которому требуется считать специализированные настройки из файла Web.config.

Формируем специализированную модель карты сайта, основанной на системе файлов
Для простых веб-сайтов, составленных из статических страниц, веб-дизайнеры обычно создают систему файлов согласно навигационной структуре веб-сайта.

Структура каталогов и файлов веб-сайта отражает его логическую структуру. Каталог Books содержал страницы, названные Novels.aspx, Romance.aspx, History.aspx и т.д. Аналогично были структурированы файлы в каталогах, названных Electronics, DVDs и Computers. Вместо того чтобы дублировать информацию о системе файлов в файле Web.sitemap (и помнить о том, что необходимо обновлять ее при добавлении новых страниц, переименовывать каталоги и файлы, либо удалять все страницы разом), мы можем создать специализированный провайдер карты сайта, который будет основываться на структуре файловой системы.

Я создал такой специализированный провайдер карты сайта и назвал его FileSystemSiteMapProvider. Данный  класс, вместе с веб-сайтом, использующим данный провайдер, доступен в конце статьи.

Целесообразность использования файлового провайдера карты сайта (File System-Based Site Map Provider)

Имеет ли смысл использовать файловый провайдер карты сайта в реальных веб-приложениях? Это зависит от обстоятельств. Для маленьких веб-сайтов, обладающих сильной связью со структурой файловой системы и навигацией, не имеет смысла использовать такой провайдер. Для сайтов, основанных на информации, содержимое страниц которых создается динамически, основываясь на таких параметрах, как значения запроса, или для сайтов, где нет никакой связи между структурой файловой системы и навигационной структурой, файловый провайдер карты сайта также не является подходящим решением.

Для сайтов, основанных на информации, вы наверняка захотите использовать специализированный провайдер карты сайта, который создает карту сайта, основываясь на информации из базы данных

Свойства провайдера FileSystemSiteMapProvider

По умолчанию, провайдер FileSystemSiteMapProvider подсчитывает все ASP.NET-страницы и каталоги веб-приложений, за исключением папки Bin и папок, начинающихся с префикса App_. Тем не менее могут существовать такие страницы или каталоги, которые вы не хотите отображать в карте сайта. Провайдер FileSystemSiteMapProvider предлагает два опциональных свойства, которые могут быть указаны для достижения данной цели:

  • ExcludeFileList - список тех файлов, которые не должны быть включены в карту сайта. Каждый файл должен полностью соответствовать условиям. Например, в диаграмме, указанной выше, представьте, что мы захотели бы исключить страницу Novels.aspx из карты сайта. Нам необходимо добавить ~/Books/Novels.aspx to ExcludeFileList.
  • ExcludeFoldeerList - список каталогов, которые мы также не хотим включать в карту сайта. Если папка исключена, все файлы и подкаталоги также исключаются. В то же время путь к каталогу также должен быть указан, например ~/DVDs/.

Оба свойства ExcludeFileList и ExcludeFoldeerList являются объектами StringDictionary; более того, оба являются Protected, тем самым означая, что вы можете с ними работать напрямую с вашей ASP.NET-страницы. Вместо этого вам придется использовать подходящие вспомогательные методы для добавления, удаления и пересчета данных свойств. (В качестве более подробного примера использования вспомогательных методов рассмотрите страницу SiteMap_Info.aspx в приложении к данной статье.) Тем не менее вы можете настроить данные свойства в их исходные значения при помощи файла Web.config, и мы это вскоре рассмотрим.

В дополнение к данным исключающим свойствам FileSystemSiteMapProvider содержит еще четыре других свойства:

  • RootUrl - полностью проверенный путь к странице, которая служит корневым узлом в карте сайта. Если данное значение не указано - значение по умолчанию равно ~/Default.aspx.
  • RootTitle - заголовок, который отобразится для корневого SiteMapNode. По умолчанию "Home".
  • UseDefaultPageAsFolderUrl - логическое свойство, значение которого указывает на то, необходимо ли использовать DefaultPage в качестве ссылки на папку или нет. Если данное свойство установлено в значении True (стандартное значение), то каждый созданный в карте SiteMapNode для каталога будет иметь свое собственное свойство Url установленное в ~/FOLDER/DefaultPage.aspx (если файл существует). Более того, файл ~/FOLDER/DefaultPage.aspx (если он существует) не добавляется как потомок каталога.

    Чтобы понять данные свойства, рассмотрите диаграмму логической структуры сайта, указанную выше. Представьте, что сайт имеет страницу ~/Books/Default.aspx. Если вы хотите, чтобы узел Books в карте сайта мог быть нажат и при этом мог переносить пользователя на ~/Books/Default.aspx, то оставьте данное свойство, равное True. Если же вы хотите, чтобы пользователь не мог нажать на узел Books, и вместо этого хотите добавить четвертого наследника узла Books, который посылает пользователя на ~/Books/Default.aspx, то установите данное свойство в False.
  • DefaultPageName - название файла для страницы, которая является документом по умолчанию. По умолчанию равно Default.aspx.