Готовые тиражные решения на 1С-Битрикс
Техническая поддержка:
+7-908-208-1965
Отдел продаж, с 7:00 до 18:00 (по Москве)
Звонок по России бесплатный
Вы также можете заказать звонок

FAQ Киоск

20:12:47 - 29.09.2016

1. Что входит в состав модуля?
В состав модуля входят следующие компоненты:
catalog.basket - компонент отвечающий за отображение товаров в корзине и процедуру оформления заказа
catalog.basket.small - компонент отвечающий за отображение количества товаров в корзине, а так же является обработчиком события добавления товара в корзину. Поэтому данный компонент должен присутствовать на всех страницах, на которых нужен функционал добавления товара в корзине.
market.yandex_market - компонент позволяет генерировать xml для выгрузки товаров в Яндекс.Маркет (находится в папке /ys-ym/ относительно корня сайта). Компонент выводит настройки если вы админ и выводит XML если вы гость. Предварительно зарегистрируйтесь в системе Яндекс.маркет.
2. Что происходит в процессе установки модуля?
При первой установке модуля "Киоск", автоматически создаются разделы:
/account/orders/ - отображение заказов пользователя;
/account/cart/ - корзина;

После установки модуля во вкладке “Сервисы” будет создано меню настройки модуля “Киоск”.

Модуль создаёт два типа почтовых событий и по одному почтовому шаблону для каждого из них: SALE_ORDER и SALE_ORDER_ADMIN. Первый используется для отправки писем клиенту об успешном оформлении заказа. Второй используется для отправки аналогичного письма администратору сайта (указывается в параметрах компонента yenisite:catalog.basket).


3. Какие настройки нужно обязательно сделать в административном разделе?
1) Отмечаем инфоблоки, которые являются торговыми каталогами нажимаем кнопку “Сохранить”

В инфоблоке, указанном как торговый каталог, создается числовое свойство MARKET_QUANTITY для хранения количества товара и PRICE_BASE для хранения цены (тип цены PRICE_BASE создается по умолчанию, для его редактирования и создания новых типов цен см. пункт "Как создать несколько типов цен").
Если в настройках Киоска включить количественный учет для каталога товаров, значение в этом поле будет автоматически уменьшаться при оформлении заказа с помощью большой корзины Киоска.

2) Далее необходимо заполнить цены и количество каждого товара

4. Как вывести малую/летающую корзину в публичной части сайта?
Малая корзина отвечает за добавления товара в корзину и поэтому она должна находится перед компонентом каталога.
Для вызова компонента малой корзины используйте следующий код:
&lt? $APPLICATION->IncludeComponent(
	"yenisite:catalog.basket.small", 
	"", 
	array(), 
	false
);?&gt
				

Для отображения малой корзины на всех страницах сайта необходимо поместить ее в header.php вашего шаблона.
Если же хотите отображать корзину только на страницах каталога, то ее необходимо поместить в файл, где непосредственно вызывается компонент каталога (например: /catalog/index.php).
В состав решения входит шаблон bitronic, для малой корзины. Он делает корзину “летающей” и позволяет выбирать количество товара прямо в корзине.

5. Как вывести кнопки для добавления товара в корзину (без AJAX, универсально для любого шаблона)?
Для работы с каталогом, необходимо использовать стандартный компонент bitrix:catalog
Внимание! Настоятельно рекомендуем скопировать шаблон компонента в шаблон сайта для внесения последующих правок.

Добавление кнопок в список элементов (bitrix:catalog.section)

После того как вы скопировали шаблон комплексного компонента bitrix:catalog в шаблон сайта, необходимо найти следующий файл:

bitrix/templates/ВАШ_ШАБЛОН/components/bitrix/catalog/bitrix/.default/bitrix/catalog.section/.default/template.php

Далее в этом файле ищем часть где выводятся элементы каталога.

Для справки: каждый компонент по завершению своей работы формирует массив результатов. Обычно массив результатов обозначается как $arResult. Компонент bitrix:catalog по умолчанию имеет вложенный массив элементов $arResult[‘ITEMS’]. В нем хранятся данные об элементах (товарах), которые в последующем выводятся в шаблон компонента.

Вывод элементов в шаблоне осуществляется примерно следующим образом:
foreach ($arResult[‘ITEMS’] as $arItem) //цикл для перебора всех элементов в массиве
{
	if ($arItem[‘CAN_BUY’]) //если элемент разрешен к покупке
	{
		//Выводим кнопки “купить” и “в корзину”
	}
}

					

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

foreach ($arResult[‘ITEMS’] as $arItem) //цикл для перебора всех элементов в массиве
{
	if ($arItem[‘CAN_BUY’]) //если элемент разрешен к покупке
	{
		//Выводим кнопки “купить” и “в корзину”
		&ltnoindex&gt 
			&lta href="<?echo $arElement["BUY_URL"]?&gt" rel="nofollow"&gt //Кнопка "купить"
				&lt?echo GetMessage("CATALOG_BUY")?&gt
			&lt/a&gt 
			&lta href="<?echo $arElement["ADD_URL"]?&gt" rel="nofollow"&gt //Кнопка "добавить в корзину"
				&lt?echo GetMessage("CATALOG_ADD")?&gt
			&lt/a&gt 
		&lt/noindex&gt
	}
}
			

Если ничего не выводится, то скорей всего в языковых файлах не определены следующие константы:

$MESS["CATALOG_BUY"] = "Купить";
$MESS["CATALOG_ADD"] = "В корзину";

6. Как интегрировать Киоск в стандартный AJAX в новых шаблонах каталога?

bitrix:catalog.element

в шаблоне компонента детальной страницы находим файл result_modifier.php и в самый конец файла (до закрывающего тега ?> ) добавляем:

if (CModule::IncludeModule('yenisite.market')) {
	$prices = CMarketPrice::GetItemPriceValues($arResult["ID"], $arResult['PRICES']);
	if(count($prices)>0)
		unset ($arResult["PRICES"]);
	$minPrice = false;
	foreach ($prices as $k => $pr) {
		$pr = floatval($pr);
		$arResult["PRICES"][$k]["VALUE"] = $pr;
		$arResult["PRICES"][$k]["PRINT_VALUE"] = $pr;
		if ((empty($minPrice) || $minPrice > $pr) && $pr > 0) {
			$minPrice = $pr;
			$minPriceId = $k;
		}
	}
	if ($minPrice !== false) {
		$arResult['MIN_PRICE']['PRICE_ID'] = $minPriceId;
		$arResult['MIN_PRICE']['VALUE'] = $minPrice;
		$arResult['MIN_PRICE']['PRINT_VALUE'] = $minPrice;
		$arResult['MIN_PRICE']['DISCOUNT_VALUE'] = $minPrice;
		$arResult['MIN_PRICE']['PRINT_DISCOUNT_VALUE'] = $minPrice;
		$arResult['CAN_BUY'] = true;
	}
	$arResult['CHECK_QUANTITY'] = (CMarketCatalog::UsesQuantity($arParams['IBLOCK_ID']) == 1);
	$arResult['CATALOG_QUANTITY'] = intval($arResult['PROPERTIES']['MARKET_QUANTITY']['VALUE']);
	
	if ($arResult['CHECK_QUANTITY'] && $arResult['CATALOG_QUANTITY'] <= 0) {
		$arResult['CAN_BUY'] = false;
	}
	$arResult['CATALOG_TYPE'] = 1; //simple product
}

Что делает этот код.

  • Выборка минимальной цены из имеющихся в Киоске с учётом права на просмотр.
  • Проверка количественного учёта.
  • Установка типа продукта для корректной работы шаблона и скриптов.

bitrix:catalog.section

в шаблоне компонента страницы раздела каталога находим файл result_modifier.php и в самый конец файла (до закрывающего тега ?> ) добавляем:

if (CModule::IncludeModule('yenisite.market')) {
	$arResult['CHECK_QUANTITY'] = (CMarketCatalog::UsesQuantity($arParams['IBLOCK_ID']) == 1);
	
	foreach ($arResult['ITEMS'] as $index => &$arItem) {
		$prices = CMarketPrice::GetItemPriceValues($arItem['ID'], $arItem['PRICES']);
		if (count($prices) > 0) {
			unset($arItem['PRICES']);
		}
		$minPrice = false;
		foreach ($prices as $k => $pr) {
			$pr = floatval($pr);
			$arItem['PRICES'][$k]['VALUE'] = $pr;
			$arItem['PRICES'][$k]['PRINT_VALUE'] = $pr;
			if ((empty($minPrice) || $minPrice > $pr) && $pr > 0) {
				$minPrice = $pr;
			}
		}
		if ($minPrice !== false) {
			$arItem['MIN_PRICE']['VALUE'] = $minPrice;
			$arItem['MIN_PRICE']['PRINT_VALUE'] = $minPrice;
			$arItem['MIN_PRICE']['DISCOUNT_VALUE'] = $minPrice;
			$arItem['MIN_PRICE']['PRINT_DISCOUNT_VALUE'] = $minPrice;
			$arItem['CATALOG_MEASURE_RATIO'] = 1;
			$arItem['CAN_BUY'] = true;
		}
		$arItem['CHECK_QUANTITY'] = $arResult['CHECK_QUANTITY'];
		$arItem['CATALOG_QUANTITY'] = CMarketCatalogProduct::GetQuantity($arItem['ID'], $arItem['IBLOCK_ID']);
		
		if ($arItem['CHECK_QUANTITY'] && $arItem['CATALOG_QUANTITY'] <= 0) {
			$arItem['CAN_BUY'] = false;
		}
		$arItem['CATALOG_TYPE'] = 1; //simple product
	}
	unset($arItem);
}

bitrix:catalog.top

в шаблоне компонента страницы топа каталога находим файл result_modifier.php и в самый конец файла (до закрывающего тега ?> ) добавляем:

if (CModule::IncludeModule('yenisite.market')) {
	$arResult['CHECK_QUANTITY'] = (CMarketCatalog::UsesQuantity($arParams['IBLOCK_ID']) == 1);

	foreach ($arResult['ITEMS'] as &$itemSection)
	{
		foreach ($itemSection as $index => &$arItem) {
			$prices = CMarketPrice::GetItemPriceValues($arItem['ID'], $arItem['PRICES']);
			if (count($prices) > 0) {
				unset($arItem['PRICES']);
			}
			$minPrice = false;
			foreach ($prices as $k => $pr) {
				$pr = floatval($pr);
				$arItem['PRICES'][$k]['VALUE'] = $pr;
				$arItem['PRICES'][$k]['PRINT_VALUE'] = $pr;
				if ((empty($minPrice) || $minPrice > $pr) && $pr > 0) {
					$minPrice = $pr;
				}
			}

			if ($minPrice !== false) {
				$arItem['MIN_PRICE']['VALUE'] = $minPrice;
				$arItem['MIN_PRICE']['PRINT_VALUE'] = $minPrice;
				$arItem['MIN_PRICE']['DISCOUNT_VALUE'] = $minPrice;
				$arItem['MIN_PRICE']['PRINT_DISCOUNT_VALUE'] = $minPrice;
				$arItem['CATALOG_MEASURE_RATIO'] = 1;
				$arItem['CAN_BUY'] = true;
			}
			$arItem['CHECK_QUANTITY'] = $arResult['CHECK_QUANTITY'];
			$arItem['CATALOG_QUANTITY'] = CMarketCatalogProduct::GetQuantity($arItem['ID'], $arItem['IBLOCK_ID']);
			
			if ($arItem['CHECK_QUANTITY'] && $arItem['CATALOG_QUANTITY'] <= 0) {
				$arItem['CAN_BUY'] = false;
			}
			$arItem['CATALOG_TYPE'] = 1; //simple product
		}
		unset($arItem);
	}
}

bitrix:catalog

в параметрах комплексного компонента необходимо указать путь к странице, на которой расположен компонент с большой корзиной Киоска:



7. Где и в каком виде хранятся заказы клиентов?

Заказы клиентов хранятся в инфоблоке "Заказы" (тип инфоблока "yenisite_market")

Каждый элемент данного инфоблока - отдельный заказ



8. Может ли Киоск оповещать о создании нового заказа? Куда приходят письма?

Да, Киоск оповещает о создании нового заказа как клиента, так и администратора интернет магазина

Адрес администратора необходимо указывать в настройках компонента yenisite:catalog.basket (большая корзина)

9. Как добавить свойство в умный фильтр?

Для этого необходимо зайти в параметры редактирования соответствующего свойства:

Далее сделать следующие настройки:

10. Как создать несколько типов цен?

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


Далее переходим в раздел "типы цен" (Сервисы->Киоск->Типы цен)

И добавляем новый тип цены


В форме добавления необходимо указать следующие параметры:

  • Название типа цены
  • Символьный код - должен соответствовать символьному коду свойства, которое создали для хранения данного типа цены
  • Выбрать необходимые группы пользователей, которым будет доступна данный тип цены


11. Как настроить, чтобы разные группы пользователей видели разные типы цен?
В каждом типе цены нужно указать, каким группам пользователей он доступен (см. предыдущий пункт). Для того, чтобы получить список цен, доступных текущему пользователю, используется метод CMarketPrice::GetItemPriceValues($elementID, $arPrices) - подробнее в третьем примере использования API.
12. Может ли Киоск работать на многосайтовости, что для этого нужно сделать?

Да, Киоск может работать на многосайтовости. Для этого необходимо, cкопировать папку /account/ в корневой каталог каждого сайта (где предполагается использование модуля Киоск)*

Далее при оформлении заказа происходит передача перменной SITE_ID в свойство заказа, которые в последующем фильтрутся для каждого сайта

* - данный раздел копируются только на один сайт (который стоит по умолчанию).
В файле /account/order/index.php в параметрах компонента bitrix:news.list (вывод списка заказов), происходит передача SITE_ID для фильтрации заказов по сайту. 

Так же необходимо отметить в шаблонах почтовых собыитий SALE_ORDER и SALE_ORDER_ADMIN галочку для использования их на новых сайтах.

Переходим в почтовое событие


Переходим в шаблон почтового события


И выбираем необходимые сайты уже в шаблоне



13. Как настроить добавление свойств в корзину (покупка с характеристикой)?

вывод свойств для покупки в комплексном компоненте bitrix:catalog и всех остальных компонентах каталога активируется с помощью четырёх параметров, которые находятся в группе "Добавление в корзину":

Описание параметров в официальной документации Битрикса.

Вид параметров в настройках компонента.

В качестве PRODUCT_PROPS_VARIABLE необходимо указать стандартное название переменной "prop". Необходимые для добавления характеристики появятся в arResult компонента. В шаблоне нужно вывести поля для выбора характеристик. Можно посмотреть, как это выглядит в стандартных шаблонах Битрикса. Все необходимые свойства товара должны передаваться на сервер в момент добавления в корзину в массиве prop[код_свойства] = ID значения.

При передаче запроса на добавление в корзину должен передаваться массив PROP, содержащий коды свойств в качестве ключей и ID элементов списка в качестве значений.

Передающиеся параметры.

Свойство инфоблока типа "Список".

Свойства, с которыми товар был добавлен в корзину, будут отображаться в шаблонах малой и большой корзины Киоска. В истории заказов в публичной части сайта (шаблон bitronic для компонента bitrix:news.detail). В письмах, которые отправляются администратору и покупателю после оформления заказа. А также в административной части в текстовом поле с описанием заказа.

14. Как подключить автоматический обработчик платёжной системы Платрон?

В первую очередь необходимо подключить свой сайт к платежной системе Платрон. Это можно сделать на следующей странице: https://www.platron.ru/info/connect/

После установки модуля "Киоск" в системе появится инфоблок "Платежные системы" типа "Справочники". В этом инфоблоке уже содержится запись для подключения платежной системы. Ее необходимо активировать:


У данного элемента НЕОБХОДИМО либо оставить название "Platron", либо задать символьный код "platron" (с версии 1.5.1)
Далее необходимо изменить элемент "Platron" и указать идентификатор магазина и кодовое слово, которые вы получите, подключив свой сайт к платежной системе.  
Теперь магазин готов к приему платежей через систему Платрон: Скриншот 1 Скриншот 2

15. Как именно работает «Количественный учёт» в Киоске?

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

Включение количественного учета


Форма редактирования товара


Получить текущий остаток товара можно с помощью метода CMarketCatalogProduct::GetQuantity($elementID, $iblockID), подробнее в четвёртом примере использования API.

Компонент большой корзины yenisite:catalog.basket для товаров, у которых включен количественный учёт, производит сверку между количеством положенным в корзину и имеющимся количеством в наличии на данный момент. Количество товара автоматически уменьшается до максимально возможного. Если это происходит в момент оформления заказа, например, когда кто-то другой уже оформил заказ с этим же товаром, оформление заказа прерывается и выдаётся сообщение о том, что содержимое корзины изменилось.


16. Проверить, является ли инфоблок торговым каталогом.
CMarketCatalog::IsCatalog($iblockID);

$iblockID - идентификатор проверяемого инфоблока

Метод возвращает 1, если инфоблок является торговым каталогом в Киоске. В противном случае - 0.

17. Проверить, включен ли количественный учёт для указанного инфоблока.
CMarketCatalog::UsesQuantity($iblockID);

$iblockID - идентификатор проверяемого инфоблока

Метод возвращает 1, если в указанном инфоблоке производится количественный учёт. В противном случае - 0.

18. Получить список цен, доступных текущему пользователю.
CMarketPrice::GetItemPriceValues($elementID, $arPrices);

$elementID - идентификатор элемента инфоблока (товара)

$arPrices - массив с ценами, где в качестве ключей массива выступают символьные коды типов цен, которые необходимо обработать. Например, массив со списком цен может задаваться в параметрах компонента. После чего, его нужно передать в этот метод, чтобы отсеять цены, недоступные текущему пользователю. В шаблоне компонента bitrix:catalog.element сюда можно передавать массив $arResult['PRICES'], в шаблоне компонентов bitrix:catalog.section и bitrix:catalog.top - массив $arItem['PRICES'] (из цикла перебора товаров). Если второй аргумент не указать, или передать пустой массив, будут выбраны все типы цен, доступные текущему пользователю.

Метод возвращает массив с парами ("КОД_ТИПА_ЦЕНЫ" => "СТОИМОСТЬ_ТОВАРА").

19. Получить доступное количество для указанного товара.
CMarketCatalogProduct::GetQuantity($elementID, $iblockID);

$elementID - идентификатор элемента инфоблока (товара)

$iblockID - идентификатор инфоблока с каталогом (необязателен, но его отсутствие приводит к дополнительному запросу к базе данных).

Метод возвращает целое число с количеством товара. При возникновении ошибки (товар не найден, отсутствует свойство с количеством) метод возвращает false.

20. Как поменять текст о новом заказе, который приходит на почту клиенту / админу
Для этого необходимо открыть файл как PHP:
/bitrix/components/yenisite/catalog.basket/lang/ru/component.php

Далее внутри файла видим два шаблона: https://screencast.com/t/3zrFSpmpogX
Соответственно $MESS ['TEXT'] -- шаблон, который уходит на почту клиенту и $MESS ['TEXT_ADMIN'] -- шаблон, который приходит на почту администратору.

ВНИМАНИЕ! Фразы в шаблоне, которые находятся между решеток менять нельзя! (пример: #FIO#) их можно только менять местами, т.к. это макросы для вставки данных о заказе.

1. Как передавать количество товара в корзину?
Для этого, в первую очередь, нужно в параметрах компонента каталога разрешить указывать количество товара: https://screencast.com/t/mmmpfp5OCvU
Затем это количество необходимо передавать при добавлении в корзину в GET параметре.
Пример ссылки: https://site.ru/catalog/element/71/?action=ADD2BASKET&id=71&quantity=3

Поясним как это сделать.

Для того что бы добавить кнопку купить, для покупки одной единицы товара, мы например, в код компонента bitrix:catalog.element, добавляли следующий код:

<noindex>
< a href="<?echo $arResult["BUY_URL"]?>" rel="nofollow"><?echo GetMessage("CATALOG_BUY")?></a > 
< a href="<?echo $arResult["ADD_URL"]?>" rel="nofollow"><?echo GetMessage("CATALOG_ADD_TO_BASKET")?></a > 
</noindex>

Константы в языковом файле: 
$MESS["CATALOG_ADD_TO_BASKET"] = "В корзину"; 
$MESS["CATALOG_BUY"] = "Купить";


В $arResult["BUY_URL"] содержится https://сайт/раздел каталога/файл.php?action=BUY&id=ИД_элемента
В $arResult["ADD_URL"] содержится https://сайт/раздел каталога/файл.php?action=ADD2BASKET&id=ИД_элемента

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

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

Для этого вместо тега <a>, для создания ссылки, мы будем использовать тег <form>, для установки формы на странице:
- В форме мы передаем все необходимые параметры, в том числе id товара (name="id") и его количество (name="quantity").
- Поля с именами action и id пользователь изменить не может. Для quantity (количество) пользователь может поставить необходимое ему число.
<form action="<?echo $arResult["BUY_URL"]?>" method="get">
 <input type="text" value="BUY" name="action" hidden />
 <input type="text" value="<?=$arResult["ID"]?>" name="id" hidden />
 <input type="text" value="1" name="quantity" />
 <button type="submit"><?echo GetMessage("CATALOG_BUY")?></button>
</form>

<form action="<?echo $arResult["ADD_URL"]?>" method="get">
 <input type="text" value="ADD2BASKET" name="action" hidden />
 <input type="text" value="<?=$arResult["ID"]?>" name="id" hidden />
 <input type="text" value="1" name="quantity" />
 <button type="submit"><?echo GetMessage("CATALOG_ADD_TO_BASKET")?></button>
</form>

Константы в языковом файле: 
$MESS["CATALOG_ADD_TO_BASKET"] = "В корзину"; 
$MESS["CATALOG_BUY"] = "Купить";


Код для компонента bitrix:catalog.section будет выглядеть так (соответствие может быть не полным - переменные содержащие параметры могут отличаться, все зависит от кастомизируемого шаблона): 

<form action="<?echo $arResult["BUY_URL"]?>" method="get">
 <input type="text" value="BUY" name="action" hidden />
 <input type="text" value="<?=$arItem["ID"]?>" name="id" hidden />
 <input type="text" value="1" name="quantity" />
 <button type="submit"><?echo GetMessage("CATALOG_BUY")?></button>
</form>

<form action="<?echo $arResult["ADD_URL"]?>" method="get">
 <input type="text" value="ADD2BASKET" name="action" hidden />
 <input type="text" value="<?=$arItem["ID"]?>" name="id" hidden />
 <input type="text" value="1" name="quantity" />
 <button type="submit"><?echo GetMessage("CATALOG_ADD_TO_BASKET")?></button>
</form>

Константы в языковом файле: 
$MESS["CATALOG_ADD_TO_BASKET"] = "В корзину"; 
$MESS["CATALOG_BUY"] = "Купить";


Для передачи в корзину товара с выбором характеристик необходимо добавить в ссылке параметры вида:
prop[#КОД свойства#]
https://site.ru/catalog/element/71/?action=ADD2BASKET&id=71&quantity=3&prop[COLOR_REF]=purple&prop[SIZE]=50

На примере формы:
<form action="<?echo $arResult["BUY_URL"]?>" method="get">
 <input type="text" value="BUY" name="action" hidden />
 <input type="text" value="<?=$arItem["ID"]?>" name="id" hidden />
 <input type="text" value="1" name="quantity" />
 <input type="text" value="purple" name="prop[COLOR_REF]" />
 <input type="text" value="50" name="prop[SIZE]" />
 <button type="submit"><?echo GetMessage("CATALOG_BUY")?></button>
</form>
2. Нюансы при использовании PHP7
При использовании на сервере с установленным решением PHP версии 7, есть вероятность столкнуться с рядом проблем в платформе 1С-Битрикс

1. ошибка в мастере установки решения  -
/bitrix/wizards/yenisite/bitronic2/site/services/.services.php
Using $this when not in object context 
$wizard = &$this->GetWizard();

Для исправления данной ошибки необходимо в следующих файлах
  • bitrix/modules/yenisite.[module]/install/wizards/yenisite/[module]/site/services/.services.php
  • bitrix/wizards/yenisite/[module]/site/services/.services.php

заменить строку 
$wizard = &$this->GetWizard();
на
$wizard = \Yenisite\Core\Wizard\Main::getCurrentWizard();

А также убедитесь, что у Вас установлен модуль "Служебные инструменты ROMZA (yenisite.core)" версии не ниже 1.6.0

2. ошибка в компоненте баннеров - 
Using $this when not in object context (0)
/bitrix/modules/main/classes/general/component_template.php:285
#0: CBitrixComponentTemplate::ApplyCachedData(array)

Данная ошибка зафиксирована специалистами 1С-Битрикс. До её исправления в ядре платформы как временное решение проблемы возможно отключить кеширование данных компонент - https://screencast.com/t/sQXULOMa5



3. Class CMarketPrice
CMarketPrice::GetList($by = 'id', $order = 'desc');
Отдает все параметры всех типов цен, записанных в Сервисы -> Киоск -> Типы цен
Ответ формируется из таблицы yen_market_catalog_price, сортировка по полю $by (по дефолту "id") в порядке $order (по дефолту "desc").
$by - поле сортировки (необязательное)
$order - порядок сортировки (необязательное)

CMarketPrice::GetItemPriceValues($productID, $arPrices = array());
Возвращает массив (Тип цены => Значение для товара) все заполненные значения цен для конкретного товара для всех или указанных типов цен.
$productID - id товара (обязательное)
$arPrices - символьные коды типов цен; если передается пустой массив - array() - то для ответа учитываются все типы цен (необязательное)

CMarketPrice::GetPriceGroup($id);
Возвращает массив id групп пользователей, которым доступен указанный тип цены.
Доступность группам пользователей типа цены задается при создании или редактировании типов цен в Сервисы -> Киоск -> Типы цен.
Группы пользователей можно увидеть в Настройки -> Пользователи -> Группы пользователей.
$id - id или символьный код типа цен (обязательное)

CMarketPrice::IsCanAdd($id);
Проверка на доступность пользователю типа цены.
Возвращает 1 если пользователь состоит в группе пользователей которой доступен конкретный тип цен.
Возвращает 0 если пользователь НЕ состоит в группе пользователей которой доступен конкретный тип цен.
$id - id или символьный код типа цен (обязательное)


CMarketPrice::GetByCode($code);
Возвращает объект mysqli_result с параметрами указанного по символьному коду типа цен или false если такого типа цен не существует.
$code - символьный код типа цен (обязательное)
Пример:
$code = "PRICE_BASE";
$db_res = CMarketPrice::GetByCode($code);
$ar_res = $db_res->GetNext();
if ($ar_res != false){
print_r($ar_res);
}

CMarketPrice::GetByID($id);
Возвращает объект mysqli_result с параметрами указанного по id типа цен или false если такого типа цен не существует.
$id - id типа цен (обязательное)
Пример:
$id = 1;
$db_res = CMarketPrice::GetByID($id);
$ar_res = $db_res->GetNext();
if ($ar_res != false){
print_r($ar_res);
}

CMarketPrice::Update($id, $name, $code, $base, $group);
При помощи этой функции можно внести правки в уже существующие типы цен.
$id - id (обязательное) - по этому параметру вносятся изменения.
$name - название типа цен (обязательное)
$code - символьный код типа цен (обязательное)
$base - флаг базового типа цен (обязательное) - принимает значения "Y" и "N" (обязательное)
$group - массив содержащий перечисление групп пользователей для которых доступен данный тип цен (обязательное)
При изменении названия и/или символьного кода типа цен так же будут внесены изменения в название и/или код соответствующего свойства инфоблока каталога товаров.
А так же при присвоении $base значения "Y", тип цены с отмеченным базовым типом будет изменен, т.е. тип цены с отмеченным базовым типом, который был до вызова функции, примет значение $base = "N".
Попытка снять флаг базового типа цен будет проигнорирована - всегда должен быть один базовый тип цен.

CMarketPrice::GetBasePrice();
Возвращает объект mysqli_result с параметрами базового типа цен или false если нет ни одного типа цен
Пример:
$id = 1;
$db_res = CMarketPrice::GetByID($id);
$ar_res = $db_res->GetNext();
if ($ar_res != false){
print_r($ar_res);
}

CMarketPrice::Delete($id);
Удаляет указанный тип цен.
$id - id типа цен (обязательное)

CMarketPrice::Add($name, $code, $base, $group);
При помощи этой функции можно внести правки в уже существующие типы цен.
$name - название типа цен (обязательное)
$code - символьный код типа цен (обязательное)
$base - флаг базового типа цен (обязательное) - принимает значения "Y" и "N" (обязательное)
$group - массив содержащий перечисление групп пользователей для которых доступен данный тип цен (обязательное)
Если символьный код ($code) нового типа цен будет совпадать с символьным кодом уже существующего типа цен, добавления не будет.
А так же при присвоении $base значения "Y", тип цены с отмеченным базовым типом будет изменен, т.е. тип цены с отмеченным базовым типом, который был до вызова функции, примет значение $base = "N".
4. Class CMarketCatalog
CMarketCatalog::GetList($by = "id", $order = "asc");
Возвращает объект mysqli_result с массивом содержащим id записи, id инфоблока и флаг количественного учета инфоблоков отмеченных как торговые каталоги.
Настройка возможна в административной части Сервисы -> Киоск -> Каталог товаров
Ответ формируется из таблицы yen_market_catalog сортировка по полю $by (по дефолту "id") в порядке $order (по дефолту "asc").
$by - поле сортировки (необязательное)
$order - порядок сортировки (необязательное)

CMarketCatalog::Add($iblock_id, $use_quantity = 0);
Причисляет инфоблок к торговым каталогам (аналогичен отметке "Является торговым каталогом" в Сервисы -> Киоск -> Каталог товаров).
Возвращает 0 если инфоблок уже является торговым каталогом или id добавленной записи в таблице, с инфоблоками являющимися торговыми каталогоми, yen_market_catalog.
$iblock_id - id инфоблока (обязательное)
$use_quantity - отметка включения количественного учета (необязательное), по дефолту количественный учет НЕ включен.

CMarketCatalog::Delete($id);
Снимает отметку "Является торговым каталогом" с инфоблока по id записи в таблице, с инфоблоками являющимися торговыми каталогами, yen_market_catalog.
$id - id инфоблока (обязательное), принимает значения id записи в таблице yen_market_catalog или - '*', тогда флаг "Является торговым каталогом" снимается со всех инфоблоков.

CMarketCatalog::IsCatalog($iblock_id);
Проверка инфоблока на принадлежность к торговым каталогам.
Возвращает 1 если инфоблок является торговым каталогом.
Возвращает 0 если инфоблок НЕ является торговым каталогом.
$iblock_id - id инфоблока (обязательное)

CMarketCatalog::UsesQuantity($iblock_id);
Проверка активности параметра "Количественный учет" для инфоблоков являющихся торговыми каталогами.
Возвращает 1 если параметр "Количественный учет" включен.
Возвращает 0 если параметр "Количественный учет" НЕ включен.
$iblock_id - id инфоблока (обязательное)
5. Class CMarketCatalogProduct
private CMarketCatalogProduct::_GetByID($element_id, $iblock_id);
Приватный метод.
Возвращает массив со значениями следующих параметров для конкретного товара ($element_id): Количество товара (число или false, если значение отсутствует), включен или нет "Количественный учет" (N/Y), 'CAN_BUY_ZERO' => 'N'.

private CMarketCatalogProduct::_GetQuantity($element_id, $iblock_id);
Приватный метод.
Возвращает количество товара (свойство MARKET_QUANTITY) или false, если значение отсутствует, для конкретного товара ($element_id).

private CMarketCatalogProduct::_TraceQuantity($delta, $element_id, $iblock_id);
Приватный метод.
Уменьшает количество товара (свойство MARKET_QUANTITY) на $delta для конкретного товара ($element_id).
Возвращает false, если не включен количественный учет для инфоблока $iblock_id.
Возвращает true, если уменьшение количества товара прошло штатно.

private CMarketCatalogProduct::__checkID(&$element_id, &$iblock_id);
Приватный метод.
Проверяет id товара и инфоблока на корректность и если это необходимо ищет и восстанавливает id инфоблока по id товара.
Возвращает true, если
$element_id<=0
или обнаружено отсутствие товара при восстановлении значения $iblock_id (если $iblock_id<=0).
Возвращает false, если id товара и инфоблока принимают положительное (корректное) значение.

CMarketCatalogProduct::GetByID($element_id, $iblock_id = 0);
Проверяет на на корректность (положительность) id товара и инфоблока и передает эти значения приватному методу _GetByID.
Возвращает массив со значениями следующих параметров для конкретного товара ($element_id): Количество товара (число или false, если значение отсутствует), включен или нет "Количественный учет" (N/Y), 'CAN_BUY_ZERO' => 'N'.
$element_id - id товара (обязательное)
$iblock_id - id инфоблока (необязательное), если значение не задается или принимает значение <=0, то при проверке на корректность будет найдено и восстановлено по id товара (дополнительные запросы - увеличивают время выполнения)

CMarketCatalogProduct::GetQuantity($element_id, $iblock_id = 0);
Проверяет на на корректность (положительность) id товара и инфоблока и передает эти значения приватному методу _GetQuantity.
Возвращает количество товара (свойство MARKET_QUANTITY) при успешном выполнении.
Возвращает false, если
значение свойства для конкретного товара ($element_id) отсутствует
или сам товар ($element_id) не существует.
$element_id - id товара (обязательное)
$iblock_id - id инфоблока (необязательное), если значение не задается или принимает значение <=0, то при проверке на корректность будет найдено и восстановлено по id товара (дополнительные запросы - увеличивают время выполнения)

CMarketCatalogProduct::TraceQuantity($delta, $element_id, $iblock_id = 0);
Проверяет на на корректность (положительность) $delta, id товара и инфоблока и передает эти значения приватному методу _TraceQuantity.
Уменьшает количество товара (свойство MARKET_QUANTITY) на $delta для конкретного товара ($element_id).
Возвращает false, если
не включен количественный учет для инфоблока $iblock_id,
величина уменьшения количества товара - $delta <=0,
значение свойства для конкретного товара ($element_id) отсутствует
или сам товар ($element_id) не существует.
Возвращает true, если уменьшение количества товара прошло штатно.
6. Class CMarketBasket
CMarketBasket::Add($id, $props = array(), $quantity = 1);
Добавляет в корзину товар. Количество товаров в корзине записывается в $_SESSION по закодированным параметрам $id и $props.
$id - id товара (обязательное)
$props - код множественного свойства (или в случае свойства-справочникаXML_ID) товара (если есть)(необязательное)
$quantity - количество товара (необязательное)(ВНИМАНИЕ! При превышении данным параметром значения свойства MARKET_QUANTITY, ответственного за количество товара, MARKET_QUANTITY уйдет в минус)

CMarketBasket::DecodeBasketItems($key);
Раскодирует ключ использующийся для записи количества товаров в $_SESSION при добавлении в корзину.
Возвращает массив содержащий $id товара и $props - код(ы) множественного свойства товара.
$key - строка - закодированный товар (обязательное)

CMarketBasket::EncodeBasketItems($id, $props);
Возвращает ключ использующийся для записи количества товаров в $_SESSION при добавлении в корзину. Кодирует ключ из параметров $id и $props.
$id - id товара (обязательное)
$props - массив из кодов множественного свойства (или в случае свойства-справочникаXML_ID) товара, если у товара нет множественных свойств то необходимо задать пустой массив.

CMarketBasket::Delete($key);
Удаляет товар из корзины. Очищает $_SESSION по ключу $key.
$key - строка - закодированный товар (обязательное)

CMarketBasket::setQuantity($key, $quantity);
При присутствии товара, с указанным ключом, в корзине ($_SESSION['YEN_MARKET_BASKET']) - устанавливает для него количество добавленное в корзину равное $quantity.
$key - строка - закодированный ключ товара (обязательное)
$quantity - число - количество товара (обязательное)(ВНИМАНИЕ! Если $quantity<=0, тогда товар с указанным ключом удаляется из корзины)

CMarketBasket::getCartTotal();
Возвращает массив содержащий общую сумму товаров (SUM_FORMATTED), находящихся в корзине, а так же их суммарное количество (QUANTITY).
array('BUY' => array('SUM_FORMATTED' => XXX, 'QUANTITY' => YYY))

CMarketBasket::GetList($id, $iblock_id = false);
Возвращается объект CDBResult с массивом содержащим перечисление товаров находящихся в указанном заказе ($id).
$id - id заказа (обязательное)
$iblock_id - id инфоблока заказов (необязательное). Если значение не задано, id инфоблока определяется по символьному коду YENISITE_MARKET_ORDER (дополнительные запросы - увеличивают время выполнения)
7. Class CMarketOrderProperties
CMarketOrderProperties::GetList($arSort);
Возвращает объект CDBResult с массивом активных свойств инфоблока заказов. Инфоблок заказов определяется по символьному коду YENISITE_MARKET_ORDER.
$arSort - Массив для сортировки, имеющий вид by1=>order1[,by2=>order2 [, ..]], (обязательное) где: by - поле сортировки, может принимать значения:
id - код;
block_id - код информационного блока, которому принадлежит свойство; name - название;
name - название;
active - активность;
sort - индекс сортировки;
timestamp_x - дата последнего изменения
searchable - по признаку участия значения свойства в поиске;
filtrable - по признаку участия свойства в фильре на странице списка элементов;
order - порядок сортировки, может принимать значения:
asc - по возрастанию;
desc - по убыванию;

CMarketOrderProperties::Add($name, $code, $type = "S", $multiple = "N");
Добавляет новое свойство в инфоблок заказов.
Возвращает id свойства если добавление проведено успешно и 0, если инфоблок заказов (YENISITE_MARKET_ORDER) не существует или свойство с указанным символьным кодом ($code) уже существует или добавление свойтсва оказалось неудачным.
$name - название свойства (обязательное)
$code - символьный код свойства (обязательное)
$type = "S" - тип свойства (необязательное), по дефолту тип - строка
$multiple = "N" - отметка о множественности свойства (необязательное), по умолчанию - свойство не множественное
8. Class CMarketOrder
CMarketOrder::GetByID($id);
Возвращает массив свойств конкретного заказа ($id), в том числе и данные о платежной системе.
$id - id заказа (обязательное)

CMarketOrder::GetList($arOrder = array("SORT"=>"ASC"), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array());
Возвращает список активных заказов.
Использует CIBlockElement::GetList.
Устанавливает базовый фильтр:
$baseFilter = array(
"IBLOCK_CODE" => "YENISITE_MARKET_ORDER",
"ACTIVE" => "Y",
"PROPERTY_SITE_ID" => SITE_ID
);
Базовый фильтр ($baseFilter) и фильтр заданный в параметрах ($arFilter) склеиваются и попадают в вызов CIBlockElement::GetLis.
Остальные параметры передаются для вызова CIBlockElement::GetLis без изменений. О них можно прочитать в документации для разработчиков 1C-Битрикс: Управление сайтом https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php.

CMarketOrder::SetStatus($id,$status);
Устанавливает статус конкретного заказа ($id).
$id - id заказа (обязательное)
$status - принимает значение "PAYED", переводя заказ в статус - Оплачен.

CMarketOrder::GetStatus($id);
Определяет статус оплаты конкретного заказа ($id).
Возвращает PAYED, если заказ был оплачен и NOT_PAYED, если не был.
$id - id заказа (обязательное)
9. Class CMarketPayment
CMarketPayment::GetByName($name);
Возвращает массив с id платежной системы по ее названию или символьному коду.
$name - название или символьный код платежной системы (обязательное)
10. Нюансы при использовании HTTPS
Если Вы перевели Ваш сайт на использование защищенного протокола HTTPS, то возможно Вы столкнетесь со следующими сложностями, пути решения которых описаны ниже:

  • модуль "Расшаривание материалов" - если данный модуль используется на Вашем сайте, то для корректной работы на HTTPS протоколе необходимо соответствующим образом кастомизировать его. Для этого в файле \bitrix\components\bitrix\asd.share.buttons\component.php необходимо произвести следующие кастомизации - https://screencast.com/t/zzpAdZA8eN 

  • модуль "Все виджеты ВКонтакте" - если данный модуль используется на Вашем сайте, то для корректной работы на HTTPS протоколе необходимо соответствующим образом кастомизировать его. Для этого в файле \bitrix\components\primepix\vkontakte.group\component.php необходимо произвести следующие кастомизации - https://screencast.com/t/XtDpJiAXZ

Если у Вас возникнут сложности с любым из указанных пунктов, с удовольствием поможем Вам в нашей технической поддержке.
1. Как настроить возможность оплаты заказов через сервис Robokassa?
После установки модуля "Киоск" в системе появится инфоблок "Платежные системы" типа "Справочники" (Контент -> Справочники -> Платежные системы). В этом инфоблоке уже содержится запись для подключения платежной системы. Ее необходимо активировать.
Если модуль "Киоск" был обновлен до версии 1.7.0, тогда необходимо добавить элемент с именем и символьным кодом "robokassa".
https://screencast.com/t/HPKQOtAqHn7k

0. Указать в "Путь до обработчика" путь до обработчика робокассы, если его нет. По умолчанию "/bitrix/modules/yenisite.market/payment/roboxchange/payment.php"


1. Зарегистрируйтесь и оформите свой магазин на сайте робокассы https://auth.robokassa.ru/my/Account/

Пройдите регистрацию в системе ROBOKASSA (https://docs.robokassa.ru/ru#1049)

Создайте магазин в системе ROBOKASSA (https://docs.robokassa.ru/ru#1140)

Выполните техническую настройку (https://docs.robokassa.ru/ru#1160)


2. Обязательные значения для некоторых параметров для регистрации:
https://screencast.com/t/InGYJHKmwlg
Алгоритм расчета хеша - MD5
Метод отсылки данных по Result Url - GET или POST
Result Url - путь до обработчика result робокассы, по умолчанию https://адрес-вашего-сайта/bitrix/tools/yenisite.market/roboxchange/result.php (например https://apparel-lite.romza.ru/bitrix/tools/yenisite.market/roboxchange/result.php)
Success Url - путь до обработчика success робокассы, по умолчанию https://адрес-вашего-сайта/bitrix/tools/yenisite.market/roboxchange/success.php (например https://apparel-lite.romza.ru/bitrix/tools/yenisite.market/roboxchange/success.php)
Fail Url - путь до обработчика success робокассы, по умолчанию https://адрес-вашего-сайта/bitrix/tools/yenisite.market/roboxchange/fail.php (например https://apparel-lite.romza.ru/bitrix/tools/yenisite.market/roboxchange/fail.php)

3. Перенесите некоторые параметры, заполненные при регистрации, создании магазина и технической настройке в параметры элемента робокассы у себя на сайте:
https://screencast.com/t/InGYJHKmwlg
Идентификатор магазина - Логин магазинa (robokassa)
Данное свойство множественное и имеет описание.
Каждый логин магазинa (robokassa) должен соответствовать отдельному идентификатору магазина, созданного вами на сайте робокассы. https://screencast.com/t/i6cS33P5n
В описание необходимо добавить идентификатор соответствующего сайта (например - s1).

Пароль #1 - Пароль магазина (robokassa)
Пароль #2 - Пароль магазина #2 (robokassa)
Пароль #1 - Тестовый пароль магазина (robokassa)
Пароль #2 - Тестовый пароль магазина #2 (robokassa)

Пароли должны быть ОДИНАКОВЫМИ для ВСЕХ магазинов, созданных вами на сайте робокассы.

Тестовый режим
1 - Включить тестовый режим (используется для отладки)
0 или пусто - Выключить тестовый режим
Прочее - ошибка

4. Настройте страницы вашего сайта для граничного взаимодействия пользователя с робокассой:

  При нажатии на кнопку Оформить заказ https://screencast.com/t/yQwWwK0Bx, пользователь попадает на страницу подтверждения создания заказа и кнопки оплаты https://screencast.com/t/1JYqgOF9. Что-бы изменить текст до кнопки оплаты робокассы: Создайте в публичке своего сайта файл \personal\order\payment.php (например Сайт.ru\personal\order\payment.php). Если данный файл будет отсутствовать, тогда будет добавлена стандартная вставка - https://screencast.com/t/yQwWwK0Bx.

  При ошибке оплаты робокассы или отказа от оплаты пользователь попадает на страницу Fail URL https://screencast.com/t/9wQ7fNKq7. Что-бы изменить текст: Создайте в публичке своего сайта файл \personal\order\fail.php (например Сайт.ru\personal\order\fail.php). Если данный файл будет отсутствовать, тогда будет добавлена стандартная вставка - https://screencast.com/t/aFyfcGa6Yf.

  При удачной оплате пользователь попадает на страницу Success URL https://screencast.com/t/n5YcwmqUv9dG. Что-бы изменить текст: Создайте в публичке своего сайта файл \personal\order\fail.php (например Сайт.ru\personal\order\fail.php). Если данный файл будет отсутствовать, тогда будет добавлена стандартная вставка - https://screencast.com/t/Z37McvVI7.

В своих страницах можно использовать переменную $inv_id - номер заказа.
Так же $out_summ - сумма заказа и $Email - E-mail.
В fail в success переменные можно извлечь из $_REQUEST.


5. Протестируйте работу обработчика робокассы на тестовом режиме (не взимается оплата).
По завершении проверки подайте заявку на активацию.