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

FAQ Киоск

19:53:13 - 26.08.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

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

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

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