Опубликован: 07.05.2010 | Доступ: свободный | Студентов: 1 / 0 | Оценка: 4.56 / 4.06 | Длительность: 34:11:00
Лекция 17:

Карты сайта

< Лекция 16 || Лекция 17: 1234 || Лекция 18 >
Аннотация: Определение карты сайта. Декларативная привязка к карте сайта. Навигация с использованием мастер-страниц. Программное управление картой сайта. Навигация с использованием фреймов.

Файлы к лекции Вы можете скачать здесь.

Навигация является необходимым средством путешествия по сайту. Навигацию можно обеспечить разными средствами, но в ASP.NET 2.0 существует специализированное средство навигации с большими функциональными возможностями - карты сайта. Новая модель карты сайта позволяет определить структуру навигации и связать ее с полнофункциональными элементами управления. Она существенно упрощает задачу программиста по разработке и сопровождению гибких средств навигации и состоит из следующих частей:

  1. Файл Web.sitemap с описанием структуры навигации на языке XML (как в базах данных: сами данные)
  2. Элементы управления SiteMapDataSource и XmlSiteMapProvider для преобразования описания структуры навигации в объектную модель (как в базах данных: поставщик и источник данных)
  3. Элементы управления TreeView, Menu и SiteMapPath, непосредственно взаимодействующие с пользователем при выполнении навигации (как в базах данных: элементы отображения и редактирования данных)

Определение карты сайта

Описание структуры навигации следует начинать с создания карты сайта, которая может быть представлена единственным для приложения XML-файлом со стандартным именем Web.sitemap. Чтобы создать заготовку этого сайта, выполните следующее

  • В панели Solution Explorer выделите корень дерева сайта и через контекстное меню вызовите мастер Add New Item. Установите шаблон в значение Site Map и щелкните на кнопке Add

Оболочка создаст заготовку карты сайта с парным XML-дескриптором <siteMap>... </siteMap> и вложенными дескрипторами узлов <siteMapNode>. Дескриптор <siteMap> поддерживается одноименным классом System.Web.SiteMap, который обеспечивает доступ к иерархическому представлению сайта для выполнения навигации. Заготовка файла Web.sitemap будет выглядеть так

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="" title=""  description="">
        <siteMapNode url="" title=""  description="" />
        <siteMapNode url="" title=""  description="" />
    </siteMapNode>
</siteMap>

После создания заготовки файла Web.sitemap ее нужно правильно скорректировать, чтобы она соответствовала структуре сайта. При этом нужно соблюсти два обязательных условия:

  1. Сайт должен начинаться с одного корневого узла
  2. Все узлы карты сайта должны иметь уникальные URL

От этого зависит правильная работа класса-поставщика XmlSiteMapProvider, который непосредственно считывает и расшифровывает информацию из файла Web.sitemap. Для считывания информации из файла другого формата потребуется другой нестандартный поставщик.

Корневой узел и все последующие вложенные в него родительские (раскрывающиеся) узлы иерархического дерева карты сайта должны быть представлены парными дескрипторами <siteMapNode>...</siteMapNode>. Листья дерева можно представить самозакрывающимся (одиночным) дескриптором <siteMapNode>.

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


  • Скорректируйте заготовку файла Web.sitemap, созданного нами ранее, следующим образом
    <?xml version="1.0" encoding="utf-8" ?>
    <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
        <siteMapNode url="~/Default.aspx" title="Домой"  
    					description="Корневой узел (домашняя страница)">
    		<siteMapNode url="~/Products.aspx" title="Товары"  
    					description="Что мы продаем">
    			<siteMapNode url="~/Hardware.aspx" title="Аппаратура"  
    					description="Компьютеры и комплектующие" />
    			<siteMapNode url="~/Software.aspx" title="Программы"  
    					description="Программное обеспечение компьютеров" />
    		</siteMapNode>
    		<siteMapNode url="~/Services.aspx" title="Услуги"  
    					description="Наши услуги">
    			<siteMapNode url="~/Training.aspx" title="Обучение"  
    					description="Обучение программированию" />
    			<siteMapNode url="~/Consulting.aspx" title="Консультации"  
    					description="Консультации по эксплуатации" />
    			<siteMapNode url="~/Support.aspx" title="Поддержка"  
    					description="Помощь в сопровождении программ" />
    		</siteMapNode>
    	</siteMapNode>
    </siteMap>

Декларативная привязка к карте сайта

Создание в приложении файла Web.sitemap в корне виртуального каталога автоматически инициирует запуск поставщика XmlSiteMapProvider. Его задача заключается в извлечении данных карты сайта и заполнении этими данными экземпляра класса SiteMapDataSource, который далее можно подключать для генерации HTML-кода отображения карты сайта к таким элементам, как Menu, TreeView и SiteMapPath. Технологическая цепочка извлечения и отображения данных об иерархии страниц сайта приведена на рисунке


< Лекция 16 || Лекция 17: 1234 || Лекция 18 >

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.7598104432824watchdog( )../bootstrap.inc:0
23.7601104435272module_invoke( )../bootstrap.inc:967
33.7601104437128call_user_func_array ( )../module.inc:462
43.7601104437464devel_watchdog( )../module.inc:462
53.7603104438312decode_entities( )../devel.module:382
63.7603104440232drupal_error_handler( )../devel.module:340
73.7603104443840watchdog( )../common.inc:663
83.7603104445888module_invoke( )../bootstrap.inc:967
93.7604104447744call_user_func_array ( )../module.inc:462
103.7604104448080devel_watchdog( )../module.inc:462
113.7604104448776decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.7598104432824watchdog( )../bootstrap.inc:0
23.7601104435272module_invoke( )../bootstrap.inc:967
33.7601104437128call_user_func_array ( )../module.inc:462
43.7601104437464devel_watchdog( )../module.inc:462
53.7603104438312decode_entities( )../devel.module:382
63.7603104440232drupal_error_handler( )../devel.module:340
73.7603104443840watchdog( )../common.inc:663
83.7603104445888module_invoke( )../bootstrap.inc:967
93.7604104447744call_user_func_array ( )../module.inc:462
103.7604104448080devel_watchdog( )../module.inc:462
113.7604104448776decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.7598104432824watchdog( )../bootstrap.inc:0
23.7601104435272module_invoke( )../bootstrap.inc:967
33.7601104437128call_user_func_array ( )../module.inc:462
43.7601104437464devel_watchdog( )../module.inc:462
53.7603104438312decode_entities( )../devel.module:382
63.7610104440424drupal_error_handler( )../devel.module:340
73.7611104444112watchdog( )../common.inc:663
83.7611104446160module_invoke( )../bootstrap.inc:967
93.7611104448016call_user_func_array ( )../module.inc:462
103.7611104448352devel_watchdog( )../module.inc:462
113.7611104449128decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.7598104432824watchdog( )../bootstrap.inc:0
23.7601104435272module_invoke( )../bootstrap.inc:967
33.7601104437128call_user_func_array ( )../module.inc:462
43.7601104437464devel_watchdog( )../module.inc:462
53.7603104438312decode_entities( )../devel.module:382
63.7610104440424drupal_error_handler( )../devel.module:340
73.7611104444112watchdog( )../common.inc:663
83.7611104446160module_invoke( )../bootstrap.inc:967
93.7611104448016call_user_func_array ( )../module.inc:462
103.7611104448352devel_watchdog( )../module.inc:462
113.7611104449128decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.7618104433368watchdog( )../bootstrap.inc:0
23.7618104435416module_invoke( )../bootstrap.inc:967
33.7618104437272call_user_func_array ( )../module.inc:462
43.7618104437608devel_watchdog( )../module.inc:462
53.7619104438312decode_entities( )../devel.module:382
63.7619104440232drupal_error_handler( )../devel.module:340
73.7619104443840watchdog( )../common.inc:663
83.7619104445888module_invoke( )../bootstrap.inc:967
93.7619104447744call_user_func_array ( )../module.inc:462
103.7619104448080devel_watchdog( )../module.inc:462
113.7620104448776decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.7618104433368watchdog( )../bootstrap.inc:0
23.7618104435416module_invoke( )../bootstrap.inc:967
33.7618104437272call_user_func_array ( )../module.inc:462
43.7618104437608devel_watchdog( )../module.inc:462
53.7619104438312decode_entities( )../devel.module:382
63.7619104440232drupal_error_handler( )../devel.module:340
73.7619104443840watchdog( )../common.inc:663
83.7619104445888module_invoke( )../bootstrap.inc:967
93.7619104447744call_user_func_array ( )../module.inc:462
103.7619104448080devel_watchdog( )../module.inc:462
113.7620104448776decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.7618104433368watchdog( )../bootstrap.inc:0
23.7618104435416module_invoke( )../bootstrap.inc:967
33.7618104437272call_user_func_array ( )../module.inc:462
43.7618104437608devel_watchdog( )../module.inc:462
53.7619104438312decode_entities( )../devel.module:382
63.7625104440424drupal_error_handler( )../devel.module:340
73.7625104444112watchdog( )../common.inc:663
83.7625104446160module_invoke( )../bootstrap.inc:967
93.7625104448016call_user_func_array ( )../module.inc:462
103.7625104448352devel_watchdog( )../module.inc:462
113.7626104449128decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.7618104433368watchdog( )../bootstrap.inc:0
23.7618104435416module_invoke( )../bootstrap.inc:967
33.7618104437272call_user_func_array ( )../module.inc:462
43.7618104437608devel_watchdog( )../module.inc:462
53.7619104438312decode_entities( )../devel.module:382
63.7625104440424drupal_error_handler( )../devel.module:340
73.7625104444112watchdog( )../common.inc:663
83.7625104446160module_invoke( )../bootstrap.inc:967
93.7625104448016call_user_func_array ( )../module.inc:462
103.7625104448352devel_watchdog( )../module.inc:462
113.7626104449128decode_entities( )../devel.module:382