Появилась необходимость добавить в корзину 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?