Табличный вид заказа в письме в битриксе версии 18

Вот таким образом можно сделать табличный вид заказа с торговыми предложениями и самими товарами в письме. Для вывода таблицы в шаблоне нового заказа необходимо использовать переменную #ORDER_TABLE_ITEMS#. Картинки тоже прилагаются.

Файл init.php:

<?
AddEventHandler("sale", "OnOrderNewSendEmail", "ModifyOrderSaleMails");

function ModifyOrderSaleMails($orderID, &$eventName, &$arFields) {
    if(CModule::IncludeModule("sale") && CModule::IncludeModule("iblock")) {
        $strOrderList = "";
        $dbBasketItems = CSaleBasket::GetList(
            array("NAME" => "ASC"),
            array("ORDER_ID" => $orderID),
            false,
            false,
            array("PRODUCT_ID", "ID", "NAME", "QUANTITY", "PRICE", "CURRENCY")
        );
        $strOrderList = "
                <style>
                    table.example {
                        border-collapse: collapse;
                        width: 585px;
                    }
                    table.example td {
                        border:1px solid black;
                    }
                    table.example td.num {
                        width: 30px;
                        text-align: center;
                    }
                </style>
                <table class=\"example\">
                    <tr>
                        <td class=\"num\" align=\"center\">№</td>
                        <td align=\"center\">Фото товара</td>
                        <td align=\"center\">Наименование</td>
                        <td align=\"center\">Количество</td>
                        <td align=\"center\">Цена, руб.</td>
                        <td align=\"center\">Cумма, руб.</td>
                    </tr>";
        $i = 0;
        while ($arProps = $dbBasketItems->Fetch()) {
            $i += 1;
            // image
            $offer = CIBlockElement::GetById(IntVal($arProps["PRODUCT_ID"]))->GetNext();
            $pictureId = $offer["PREVIEW_PICTURE"];
            if (is_null($pictureId)) {
                $realProductInfo = CCatalogSku::GetProductInfo(IntVal($arProps["PRODUCT_ID"]));
                $realProduct = CIBlockElement::GetById(IntVal($realProductInfo["ID"]))->GetNext();
                $pictureId = $realProduct["PREVIEW_PICTURE"];
            }
            $thumb = CFile::ResizeImageGet(
                $pictureId,
                array("width" => 200, "height" => 200),
                BX_RESIZE_IMAGE_PROPORTIONAL,
                false
            );
            $thumb = $thumb["src"];
            // sum
            $summ = $arProps['QUANTITY'] * $arProps['PRICE'];
            $strOrderList .= "<tr><td class=\"num\">".$i."</td><td><img src=\"http://".$_SERVER['SERVER_NAME'] . $thumb."\"></td><td>".$arProps['NAME']."</td><td>".$arProps['QUANTITY']."</td><td>".number_format((float)$arProps['PRICE'], 2, '.', '')."</td><td>".number_format((float)$summ, 2, '.', '')."</td><tr>";
        }
        echo "</table>";
        // пишем в переменную для письма
        $arFields["ORDER_TABLE_ITEMS"] = $strOrderList; 
    }
}
?>

Подобным образом можно добавить и другие переменные к письму.

bitrix php