Prestashop: Отправка значения CustomField из OnePageCheckoutPS в письме

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

2 comments on “Prestashop: Отправка значения CustomField из OnePageCheckoutPS в письме

  1. Здравствуйте! Всё сделал как положено, {custom_fields} не пишутся в письмо. Помогите пожалуйста разобраться

  2. Какой у вас модуль и его версия, а так же версия Prestashop?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *