Появилась необходимость добавить в корзину OnePageCheckoutPS на Prestashop дополнительное поле «Не звонить», форамат поля был выбран isBool, то есть если поле выбрано имеем True, иначе — False.
По умолчанию, модуль OnePageCheckoutPS добавляет дополнительные поля только в карточку заказа в адмике и больше никуда, чтобы получить эти данные где-то еще нам необходимо самостоятельно дописать эту логику, в моём случае необходимо добавить вывод этого поля в письме new_order стандартного модуля mailalerts.
Идем в modules/mailalerts/mailalerts.php и добавляем новую функцию в class MailAlerts, которая будет получать из БД все custom fields.
public function GetCustomFields($order, $id_lang)
{
$order = new Order($order->id);
$query = new DbQuery();
$query->select('fc.value, fl.description field_description, fol.description option_description');
$query->from('opc_field_cart', 'fc');
$query->innerJoin('opc_field_lang', 'fl', 'fl.id_field = fc.id_field AND fl.id_lang = '.$id_lang);
$query->leftJoin(
'opc_field_option_lang',
'fol',
'fc.id_option = fol.id_field_option AND fol.id_lang = '.$id_lang
);
$query->where('fc.id_cart = '.$order->id_cart);
$field_options = Db::getInstance()->executeS($query);
if (!count($field_options)) {
return;
}
foreach ($field_options as $field)
return $field['field_description'] . ': ' . $field['option_description'] . '<br/';
}
Далее, в этом же файле цепляем созданную функцию в функции, которая отрабатывает при поступлении нового заказа «public function hookActionValidateOrder»
$custom_fields = $this->GetCustomFields($order, $id_lang);
Выглядит это следующим образом.

И в этой же функции, но ниже, в этап формирования «тэгов» для шаблона письма необходимо добавить новый «тэг», который забирает данные из выше объявленной переменной, которая в свою очередь получает список custom_fields из БД при помощи функции из первого шага.
'{custom_fields}' => $custom_fields
Выглядит это следующим образом.

И теперь, все что осталось сделать, так это добавить «тэг» {custom_fields} в шаблон письма modules/mailalerts/mails/ru/new_order.html в туда, куда вам удобно. Я добавил в блок с именем и номером телефона заказчика.
Небольшой бонус, в моём случае, данное поле должно выводится только для заказов с определенным методом доставки, это можно реализовать через js (override.js в настройках модуля OnePageCheckoutPS)
$(function(){
$(document).on('change', '#shipping_container', function() {
if ($('input[type=radio]:checked').val() == '13,') {
$('div#field_delivery_do_not_call').show();
return true;
}
else
$('div#field_delivery_do_not_call').hide();
$('input#delivery_do_not_call').prop( "checked", false );
});
});
13 — это ID метода доставки, для которого это поле должно выводится. Если метод доставки не ID 13 — поле скрывается, а если оно уже было «отмечено» — отметка снимается. Для работы данного кода, ваш custom_field должен быть обернут в div с id=»field_delivery_do_not_call».
Здравствуйте! Всё сделал как положено, {custom_fields} не пишутся в письмо. Помогите пожалуйста разобраться
Какой у вас модуль и его версия, а так же версия Prestashop?