Каталог catalog. HOWTO

Как убрать категорию из каталога

Необходимо в панели управления у категории поставить признак Отключено (isDisabled=true).

Как сделать кастомную верстку для каталога

Для этого в SELECT 2 в cat_search указываем CustomMakeup - эта разметка может принимать следующие параметры:

По дефолту используется такая верстка (если она не указана в CustomMakeup):

<div class="row cat-catalogCont">
   <div class="col-12 col-sm-12 col-md-3 col-lg-2 cat-filtersBlock"> {catalogCats}
   {catalogFilters} </div>
   <div class="col-12 col-sm-12 col-md-9 col-lg-10"> {catalogViewButtons} {catalogTitle}
   {catalogSortPanel} {catalogItems} {catalogPaging} {catalogText} </div>
</div> 

Также можно указать кастомную верстку для элементов каталога  для обоих видов (плитка и панель).

Для этого указываем в SELECT 2 в cat_search параметры ListItemMakeup, PanelItemMakeup:

По умолчанию {attrs} выводится в 2 колонки. Это можно изменить если указать в SELECT 2 параметр AttrTemplateMakeup с нужной разметкой. По умолчанию он имеет такой вид:

<div class="col-6 col-sm-7 col-md-7 col-lg-3 cat-itemAttrName">
    {title}
</div>
<div class="col-6 col-sm-5 col-md-5 col-lg-9 cat-itemAttrValue">
    {value}
</div>

Аналогично для страницы 1 товара можно изменить дефолтовую разметку для атрибута в SELECT 1 параметр AttrTemplateMakeup в GetItem. По умолчанию:

<div class="col-md-8 col-sm-7 col-6">{title}</div>
<div class="col-md-4 col-sm-5 col-6">{value}</div>

Примечание: указывается в SELECT 2 в cat_search такую разметку для CustomMakeup и других разметок, чтобы отдельно редактировать HTML блок.

select dbo.as_htmlBlock(''catalogMakeup'', 0) CustomMakeup,
dbo.as_htmlBlock(''catalogListItemMakeup'', 0) ListItemMakeup,
dbo.as_htmlBlock(''catalogPanelItemMakeup'', 0) PanelItemMakeup

В GetItem:

select dbo.as_htmlBlock('catalogItemMakeup', @langID) CustomMakeup

Как кастомизировать страницу товара

Используем для этого кастомизированную верстку в параметре CustomMakeup в процедуре cat_getItem

Параметры:

По умолчанию верстка имеет следующий вид:

<div class="row">
   <div class="col-12 col-md-12 col-lg-5"> {images} </div>
   <div class="col-12 col-md-12 col-lg-7"> {price} {name} {offers} {attrs}
         <div class="cat-shortDesc my-4"> {shortDesc} </div>
   </div>
</div>

Как скрыть цены в каталоге

Для этого в sp search укажите 0 для цен на товары.

Как установить вид, который по умолчанию открывается в каталоге

По умолчанию ставится вид Плитка.
Укажите list или panel в DefaultView в SELECT 2 (процедура cat-search)

Как управлять внешним видом и расположением элементов каталога

Вывод элемента атрибута вы можете настроить через SQL (т.е. что выводится).
Расположение элемента вы можете задать через стили с position:absolute относительно элемента в каталоге.

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

Для body в Getlayout необходимо добавить класс instantCatalogFilter.

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

Используйте параметры headSection, bodyBottomSection в SELECT 2 в cat_search и аналогичные параметры в  cat_getItem.
Вы можете туда вставлять коды OpenGraph и JSON LD описание страниц.

Как настроить кеширование в каталоге

Для этого установите в WebConfig в разделе AppSettings параметр catalogCacheMinutes. Данный параметр указывает сколько минут будет кешироваться результат выдачи в каталоге (кешируются все запросы по каталогу).

<add key="catalogCacheMinutes" value="60"></add>

Где хранятся картинки товаров

Для хранения картинок используется подсистема менеджера ресурсов с кодом product.

Коллбеки на странице корзины

Вы можете использовать коллбеки на странице корзины: при загрузке скрипта корзины (init - после as.cart.init), после обновления суммы для поставщика (updateTotal), после обновления общей суммы (updateAllTotal). 

as.cartcallbacks = as.cartcallbacks || {};
as.cartcallbacks["init"] = function(total, countTotal){

}
as.cartcallbacks["updateTotal"] = function(supplierID, noUpdateTotal){

}
as.cartcallbacks["updateAllTotal"] = function(total, countTotal){

}

Коллбеки для добавления в корзину и добавление в избранное

Можно заменить обработку результата операции по умолчанию

Добавление в избранное: 

as.cartAddToFavCallback  = function (data,btn){
         // так выглядит реализация по умолчанию 
         if (data.result) {
                    if (compare) {
                        // favUrl - old variant
                        as.sys.bootstrapAlert(as.lang("cart.addedToCompare", "Добавлено к Сравнению") + "
" + as.lang("cart.gotoCompare", "Перейти к сравнению") + "", { type: "success" });
                    } else {
                        as.sys.bootstrapAlert(as.lang("cart.addedToFav", "Добавлено в Избранное") + "
" + as.lang("cart.gotoFav", "Перейти в Избранное") + "", { type: "success" });
                    }
                } else {
                    as.sys.bootstrapAlert(data.msg || as.lang("cart.favAddError", "Ошибка при добавлении в Избранное"), { delay: 20000, type: "danger" });
                }
}

Добавление в корзину: 

as.cartAddToCartCallback = function(data, btn){
                    var msg = data.msg || as.lang("cart.addedToCartMessage", "");
                    msg = msg || (as.lang("cart.addedToCart", "Добавлено в корзину") + "
" + as.lang("cart.gotoCart", "Перейти в корзину") + "");
                    as.sys.bootstrapAlert(msg, { type: "success" });
}

Страница каталога падает, если выбрать 20+ фильтров

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

<httpruntime maxurllength="1024" relaxedurltofilesystemmapping="true"></httpruntime>

Подробнее: https://stackoverflow.com/questions/8245843/how-do-i-increase-the-maxurllength-property-in-the-config-in-asp-net-mvc-3

Как полностью убрать каталог /catalog с сайта 

Для этого укажите настройку редиректа в /settings с кодом CatalogRedirect (например, /)

Как сделать единую процедуру для списка значений фильтров каталога (cat_filter_getFilter)

Если реализована процедура cat_filter_getFilter, то именно она будет использована в качестве источника значений для фильтра (а не SP из поля sqlGetValues). 

На входе: 

На выходе:

Пример процедуры:

CREATE   PROCEDURE [dbo].[cat_filter_getFilter]
	@code nvarchar(max),
	@langID int = 0	
AS
BEGIN
	declare @dbtable nvarchar(max) = (select top 1 sqlTableName from as_cat_filters where code = @code)

	IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = 'dbo' 
                 AND  TABLE_NAME = @dbtable)) begin 

		declare @sql nvarchar(max) = N'select id [Key], name Value
			from '+@dbtable+'
			order by name'
		exec sp_executesql @sql
	 end else  begin 
		select '' [Key], '' Value
	 end 
END

ВАЖНО. Очищайте кеш, чтобы процедура подхватилась после изменения полей  sqlGetValues и создания процедуры cat_filter_getFilter

Как сделать так, чтобы вложенные категории наследовали установленные фильтры

Для этого укажите настройку  с кодом catalogAppendFiltersToCatUrl = 1.

Как получить канонический адрес некоторой страницы в каталоге

Если это страница товара, то адрес хранится в поле url в as_cat_products (либо использовать функцию [cat_getProductURL](productID)). 

Если это страница категории, то поле хранится в поле url в as_cat_categories (либо использовать функцию dbo.cat_getCatURL(catID)).

Если необходим адрес списка товаров с некоторыми фильтрами, то используйте функцию dbo.cat_getCatalogURL. Пример использования: 

declare @isCanonical bit = 1
declare @page int = 5
declare @sort nvarchar(20) = 'name'
declare @filters ExtendedDictionaryParameter  -- from as_cat_filters

insert into @filters ([Key], Value) 
select 'sostoyanie', 'Новое'
union 
select 'inStock', '1'

select dbo.[cat_getCatalogURL](1569, @filters, @sort, @page,  @isCanonical)

Если isCanonical=1, то в адресе не будет участвовать номер страницы @page и сортировка @sort. 

Страница-источник на сайте falconspace.ru