Битрикс – свойства заказа

При помощи init.php можно дополнить существующее письмо, или же просто вывести дополнительную информацию о заказе, разбираемся.

Как в Битриксе вывести свойства заказа?

Для начала, стоит отметить, что CSaleOrder::GetByID – не даст нам набор необходимых свойств. Значит, нам нужно использовать другой метод.
Предлагаю для начала посмотреть на пример кода, адаптированный из официальной документации, под этот сценарий:

// Добавляем данные в письмо заказа
AddEventHandler("sale", "OnOrderNewSendEmail", "PropsToMailAdder");
function PropsToMailAdder ($ID, &$eventName, &$arFields) {

	if ($eventName === "SALE_NEW_ORDER") {

		$OTHER = '';
		$iGroup = -1;
		$db_props = CSaleOrderPropsValue::GetOrderProps($ID);
		while ($arProps = $db_props->Fetch()) {
			if ($arProps["VALUE"]) {

				if ($iGroup != IntVal($arProps["PROPS_GROUP_ID"])) {
					$OTHER .= "
".$arProps["GROUP_NAME"]."
"; $iGroup = IntVal($arProps["PROPS_GROUP_ID"]); } $OTHER .= $arProps["NAME"].": "; if ($arProps["TYPE"] == "CHECKBOX") { if ($arProps["VALUE"] == "Y") { $OTHER .= "Да"; } else { $OTHER .= "Нет"; } } elseif ($arProps["TYPE"] == "TEXT" || $arProps["TYPE"] == "TEXTAREA") { $OTHER .= htmlspecialchars($arProps["VALUE"]); } elseif ($arProps["TYPE"] == "SELECT" || $arProps["TYPE"] == "RADIO") { $arVal = CSaleOrderPropsVariant::GetByValue( $arProps["ORDER_PROPS_ID"], $arProps["VALUE"] ); $OTHER .= htmlspecialchars($arVal["NAME"]); } elseif ($arProps["TYPE"] == "MULTISELECT") { $curVal = split(",", $arProps["VALUE"]); for ($i = 0; $i < count($curVal); $i++) { $arVal = CSaleOrderPropsVariant::GetByValue( $arProps["ORDER_PROPS_ID"], $curVal[$i] ); if ($i > 0) $OTHER .= ", "; $OTHER .= htmlspecialchars($arVal["NAME"]); } } elseif ($arProps["TYPE"] == "LOCATION") { $arVal = CSaleLocation::GetByID($arProps["VALUE"], LANGUAGE_ID); $OTHER .= htmlspecialchars($arVal["COUNTRY_NAME"]." - ".$arVal["CITY_NAME"]); } $OTHER .= '
'; } } $arOrder = CSaleOrder::GetByID($ID); if ($arOrder['USER_DESCRIPTION']) { $OTHER .= 'Комментарий: '.$arOrder['USER_DESCRIPTION']; } if ($OTHER != false) { $arFields["OTHER"] = $OTHER; } } }

Начнём с комментария, который добавляется в самом конце, именно его мы и получим при помощи CSaleOrder::GetByID, это поле не является свойством.

А вот набор свойств заказа, мы будем получать при помощи CSaleOrderPropsValue::GetOrderProps. Чем хорош пример, он автоматически разбивает свойства по группам, а также учитывает их тип .

В письме приходят свойства, которых там ранее не было, но, чтобы они появились, вы должны в самом шаблоне добавить такую метку #OTHER#.

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

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Залишити відповідь