Модификация кода AdvantShop.Net, как вывести товары по типу
 

Модификация кода AdvantShop.Net, как вывести товары по типу

1 декабря 2014 11:15 Категории: Программирование

Небольшая статья о том, как модифицировать ядро движка AdvantShop.NET под свои нужды.

Для многих разработчиков под AdvantShop знакома та ситуация, что необходимо сделать выборку простую выборку из бд, но стандартные репозитории этого не умеют. Вот и я столкнулся с такой задачей, мне необходимо вывести товары по типу в сайдбаре. Блок «Популярные товары» или  блок «Новинки», стандартные элементы любого интернет-магазина.

На уровне MS SQL запросов эта задача решается одним SELECTом с нехитрым JOINом. Но данный функционал, увы, не реализован в том ядре, где я писал. Именно поэтому я и решил написать написать небольшой патч для ядра AdvantShop.

В движке адвантшопа уже изначально уже реализованы несколько репозиториев для работы с файловых хранилищем — бд. И репозитории покрывают большое количество наиболее популярных и используемых запросов к базе данных. Реализованы несколько классов-репозиториев, которые называются ...Service.cs . Они разделены по типу выполняемых работ, что вполне понятно и очевидно для разработчика.

Существующие репозитории:

  1. BrandService  — класс для работы с брендами магазина. Замечу, что в админке бренды называются «Производители».
  2. CatalogService  — класс для работы с каталогом товаров, довольно удобный, но это не тот класс, через который можно получить список товаров.
  3. CategoryService  — класс для работы с категориями.
  4. CityService , CountryService , RegionService  — классы для работы с городами/странами (адресным планом), полезен для расчеты стоимости доставки.
  5. ColorService  — не использовал данный репозиторий, так что сложно сказать что он делает с цветами и какими цветами.
  6. CouponService  — класс для работы со скидочными купонами в advantShop, что часто востребовано в интернет-магазинах.
  7. CustomOptionsService  — репозиторий для работы с пользовательскими полями товара, если они были добавлены.
  8. ProductService — класс для работы с продуктами/товарами. Именно с помощью него можно получить список товаров.
  9. DiscountByTimeService — класс для работы со скидками, которые ориентированы на время, а не за купоны.
  10. LanguageService — класс для работы с языками сайта, мультиязычность сайта реализуется через него.
  11. MetaInfoService — данный класс я часто использую для получения  <title>  страницы, полезен для выведения СЕО настроек страницы.
  12. OfferService — класс для работы с предложениями.
  13. PhotoService  — у любого товара должно быть изображение, это повышает количество покупок. Данный класс поможет вам работать с изображениями товаров.
  14. ProductVideoService  — класс для работы с видео-материалами товара, которые также повышают вероятность покупки.
  15. UrlService  — сервис для работы с URL, без него обойтись невозможно ни в одном проекте.
  16. И другие  PropertyService ,  RatingService ,  SiteMapService ,  SizeService ,  SubscribeService .

Больше всего меня удивило то, что запросы пишутся прямо в Visual Studio, а не оборачиваются на уровне БД в views и не вызываются в C# коде. Я решил не отходить от общей идеологии, не писал вьюшку в бд, а сразу писал запрос. Не крайний случай, если view БД не подходила, можно было бы использовать функцию возвращающую табличное значение в БД. Может быть так работает быстрее, поэтому спорить не буду как правильнее.

Но ни водном из этим репозиториев я не нашел нужный мне метод, который возвращает список товаров по типам. Например, все товары с типом «Новинки» или «Скидка». Поэтому пришлось писать его самому.

Для этого я создал статичный класс ~/App_Code/PromoCustomCore.cs:

Как видно из приведенного кода, был реализован метод  GetProductsByType , который принимает на вход необходимый тип и количество товаров, которое необходимо вернуть в ответ.

Также для нормального маппинга полей в необходимые поля класса необходимо было скопировать и вставить в класс стандартный метод-биндер  GetProductFromReader .

Как работать с данный репозиторием:

Пример получения трех товаров с пометкой «Скидка» из базу данных.

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

Описываемая версия AdvantShop`а: ver 4.0.9 Build 509. Данная версия устарела, поэтому часть данных может потерять свою актуальность для более новых версий.