Недавно столкнулся с тем, что битрикс не имеет штатных средств, для прикрепления файла к письму. В интернете нашел вот этот пост https://dev.1c-bitrix.ru/community/web...blog/1623/ И вот этот модуль http://marketplace.1c-bitrix.ru/solut...attaching/ Решение описанное в первом блоге мне понравилось, но хотелось бы управлять прикреплением файлов из шаблона письма. Это позволило бы добавить файлы к шаблонам, которые используются в стандартных компонентах системы без кастомизации этих компонентов. По моей задумке к письму нужно добавить заголовок Add-File, а содержание этого заголовка должно быть таким
#CARD#=>card.jpg; #CARD2#=>card2.jpg;
#CARD# - это путь к файлу на диске card.jpg - это то как будет называться файл после прикрепления к письму
Подскажите, как нужно правильно прописать вызов этой функции если мне например нужно приаттачивать логотип сайта в шапку письма, которое отправляется пользователю и админу при оформлении заказа в ИМ ?
Для преобразования списка товаров в заказе, я использую вот такое событие OnOrderNewSendEmail и свою функцию ModifyOrderSaleMails
т.е вот так: AddEventHandler('sale', 'OnOrderNewSendEmail', 'ModifyOrderSaleMails');
Как мне вызывать вашу функцию что бы приаттачить логотип и он отображался в письме?
Прикрепление файла к шаблонам письма нового заказа. Поиск выводить на эту старую тему, так что оставлю тут на будущее.
//получаем свойство с файлом
AddEventHandler("sale", "OnOrderNewSendEmail", "modifySendingSaleData");
function modifySendingSaleData($orderID, &$eventName, &$arFields) {
// получаем свойства заказа
$orderProps = CSaleOrderPropsValue::GetOrderProps($orderID);
//находим свойство с файлом
while ($arProps = $orderProps->Fetch()) {
if ($arProps['CODE'] == 'MY_ATTACH') {
$arFields['MY_ATTACH'] = $arProps['VALUE']; //тут будет ID файла
break; //если больше не нужно добавлять свойств, то останавливаем перебор
}
}
}
//прикрепление файла к письму
AddEventHandler("main", "OnBeforeEventAdd", "onBeforeEventAddHandler");
function onBeforeEventAddHandler(&$event, &$lid, &$arFields, &$message_id, &$files)
{
if ($event === 'SALE_NEW_ORDER') { //событие создания заказа, прикрепляем ко всем шаблонам этого события
if (!is_array($files)) $files = [];
foreach ($arFields as $key => $field) { //находим поле с ID нашего файла
if ($key == 'MY_ATTACH' && boolval($field)) {
$files[] = $field;
break;
}
}
}
}
Пометка главным образом для себя, что бы снова не искать как это сделать. В одном из проектов мне понадобилось сделать кастомную проверку условий скидки на товар. Для этой проверки используются защищенные (protected) и недокументированные методы класса CAllCatalogDiscount. Поэтому класс CAllCatalogDiscount нужно расширить. В простейшем виде это выглядит вот так. Этот код выполняет проверки в условиях для скидки на товар.
class CMyCatalogDiscount extends \CAllCatalogDiscount
{
/** * Метод проверяет что для данного продукта выполняются все условия
* @param int $productID - идентификатор продукта
* @param array $arDiscount - мссив с информацией о скидке, который возвращается методом CCatalogDiscount::GetList
* @return bool
* @internal param string $unpack - строка UNPACK которая получается при вызове CCatalogDiscount::GetList
*/
public static function check($productID, $arDiscount)
{
if (!isset($arDiscount['UNPACK'])) {
return false;
}
$arProduct = array('ID' => $productID, 'IBLOCK_ID' => PRODUCT_IBLOCK_ID);
self::__GenerateFields($arProduct); // Заполняет информацию о продукте
return self::__Unpack($arProduct, $arDiscount['UNPACK']); // Выполняет сами проверки
}
}
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».