none
Как быть с SiteMapPath в ASP .NET WebForms? RRS feed

  • Вопрос

  • Передо мной стал такой вопрос: Как быть с SiteMapPath? Начну сначала:

    Есть интернет магазин, у него есть боковое меню TreeView с содержимым из Web.Sitemap.

    Содержимое строит моя утилита, перебирает все товары, разбивает на категории, затем на коллекции и в итоге все коллекции группирует, выходит примерно такое:

      <siteMapNode title="Товары" url="~/ShowProducts.aspx">
        <siteMapNode title="Бельё" url="~/ShowProducts.aspx?ptype=1">
          <siteMapNode title="Для женщин" url="~/ShowProducts.aspx?ptype=1&amp;w=1&amp;">
            <siteMapNode title="Колготки" url="~/ShowProducts.aspx?ptype=1&amp;w=1&amp;category=1">
              <siteMapNode title="Колготки Осень-Зима" url="~/ShowProducts.aspx?ptype=1&amp;cgroup=1"  />
    
              <siteMapNode title="Колготки Свадьба" url="~/ShowProducts.aspx?ptype=1&amp;cgroup=6"  />

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

    По желанию заказчика SiteMapPath был увеличен, он стал как бы основным элементом навигации сайта. Естественно, он отображает только те пути, которые были прописаны в файле. 

    А это значит, что он не показывает коллекции, цветовые группы товаров и артикулы самих товаров.

    Сейчас товаров около 6000, через год будет все 10000, я побоялся, что в случае подробного сайтмапа сайт начнет тормозить, да и как мне специально фильтровать данные отдельно для меню?

    Появилась мысль использовать 2 web.sitemap, причем по содержимому один будет частью другого, но без подробностей. Первый на меню, а подробный на SiteMapPath.

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

    Подскажите, кто сталкивался.





    • Изменено Kutcher 31 мая 2013 г. 12:18

Ответы

  • Ещё лучше, что они уже есть в базе. Ничего дублировать не надо. Просто создайте хранимую процедуру или представление, которая делает соответствующую выборку и передавайте результат в код. А в коде уже строите дерево на основе этих данных.
    • Помечено в качестве ответа Kutcher 1 июня 2013 г. 12:55
    1 июня 2013 г. 12:25
    Модератор

Все ответы

  • В Вашем случае SiteMap вам больше не подойдёт. Он предназначен для отобрашения основных узлов сайта. А дерево к ним уже не относится. Вам нужно обязательно смотреть уже в сторону хранения данных в БД, это лучший выбор.
    Модератор
  • Вы имеете ввиду хранить всю эту бандурину в таблице. Возможно лучше генерировать Путь налету на основе запрса или первого товара из полученного контекста БД?
  • Таблицы наилучший выбор. Если в последующем придётся сортировать, фильтровать, производить поиск и т.п. то никакого другого лучшего выбора нет. И возможно в будущем вам нужно будет создать интерфейс для ввода этих данных в базу, если их будет много, то тут вам без БД не обойтись.
    Модератор
  • Дело в том, что все эти данные уже есть в БД, есть таблица коллекций, цветовых групп, наименований, категорий и прочее. Эти таблицы связаны по ID с таблицей товаров Products.

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

    Единственное, что приходит на ум это вывести все данные таблиц вроде колекций в одну таблицу NavigationTree, добавить параметр "тип записи", определяющей к какой таблице относится запись и еще добавить параметр ParentID для реализации дерева, по идее этого должно хватить.  Вы о такой реализации говорите?

    1 июня 2013 г. 12:19
  • Ещё лучше, что они уже есть в базе. Ничего дублировать не надо. Просто создайте хранимую процедуру или представление, которая делает соответствующую выборку и передавайте результат в код. А в коде уже строите дерево на основе этих данных.
    • Помечено в качестве ответа Kutcher 1 июня 2013 г. 12:55
    1 июня 2013 г. 12:25
    Модератор