При помощи 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#.
Кстати говоря, очень часто просят добавить в письмо о заказе фото товара, и чтобы названия были ссылкой, но это уже совсем другая история 🙂 .