0 Пользователей и 1 Гость просматривают эту тему.
  • 9 Ответов
  • 379 Просмотров
*

aleks_yug

  • Давно я тут
  • 626
  • 83 / 0
Здравствуйте!

Возникла не совсем тривиальная задачка: передать в тему письма администратору сайта о сделанном заказе в VirtueMart 3.4.2 еще одно дополнительное значение. В данном случае - значение поля extra_field_4, в котором выводятся склады (в которых формируется заказ).
В письме значение этого поля выводится в адресе доставки, наряду со всеми остальными данными. Но передать его в тему письма никак не удается!

Если я правильно понимаю, за формирование темы отвечает код в файле /components/com_virtuemart/views/invoice/view.html:

if ($this->doVendor) {
  $this->subject = vmText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_'.$orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($this->currencyV->priceDisplay($orderDetails['details']['BT']->order_total)),

$orderDetails['details']['BT']->order_number);
  $recipient = 'vendor';
}


У меня этот код на 312 строке.

Все данные, которые формируются в этом коде, берутся из ланг-файла ru-RU.com_virtuemart.ini:
COM_VIRTUEMART_MAIL_SUBJ_VENDOR_U="[%3$s], Товаров размещено %1$s, всего %2$s"
Добавить сюда еще что-либо никак не получается, или хотя бы заменить значение "%2$s" (общая сумма заказа) на нужное мне значение поля extra_field_4
На картинке постарался визуально пояснить то, что нужно получить в результате.

К сожалению, поиск на форуме не помог. Возможно, кто-то уже сталкивался с такой необходимостью.
Буду очень благодарен за помощь, в том числе и возмездную!
*

icom

  • Давно я тут
  • 828
  • 201 / 4
Код
$this->subject = vmText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_'.$orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($this->currencyV->priceDisplay($orderDetails['details']['BT']->order_total)), $orderDetails['details']['BT']->order_number);
поменять на
Код
$this->subject = vmText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_'.$orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($this->currencyV->priceDisplay($orderDetails['details']['BT']->order_total)), $orderDetails['details']['BT']->order_number,$orderDetails['details']['BT']->extra_field_4);

COM_VIRTUEMART_MAIL_SUBJ_VENDOR_U="[%3$s], Товаров размещено %1$s, всего %2$s"
на
COM_VIRTUEMART_MAIL_SUBJ_VENDOR_U="[%3$s], Товаров размещено %1$s, всего %2$s, %4$s"

или чтоб не трогать языковые константы
Код
$this->subject = vmText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_'.$orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($this->currencyV->priceDisplay($orderDetails['details']['BT']->order_total)), $orderDetails['details']['BT']->order_number).', '.$orderDetails['details']['BT']->extra_field_4;
« Последнее редактирование: 31.08.2019, 15:32:26 от icom »
*

aleks_yug

  • Давно я тут
  • 626
  • 83 / 0
Спасибо за помощь!
Подставил оба варианта - с правкой констант и без.
В первом случае в теме отображается только: Тема, т.е. выключается все. кроме запятой.
Во втором (без правки языковых констант) - [3UMD06], Товаров размещено  Светлана Митичкина, всего 45,00 руб,

Т.е. значение extra_field_4 не попадает сюда ни в одном из вариантов.
Думаю дальше... Должен же быть вариант!
*

icom

  • Давно я тут
  • 828
  • 201 / 4
$orderDetails['details']['BT']->extra_field_4;
на
$orderDetails['details']['ST']->extra_field_4;
*

aleks_yug

  • Давно я тут
  • 626
  • 83 / 0
ST
Нет, к сожалению, тот же результат в обоих вариантах. Тут что-то другое...
*

icom

  • Давно я тут
  • 828
  • 201 / 4
die(print_r($orderDetails)); там есть extra_field_4 ?
*

aleks_yug

  • Давно я тут
  • 626
  • 83 / 0
print_r
В этом же файле? print_r здесь вообще отсутствует. Может быть отличаются версии VM? которые у нас (3.4.2)
*

draff

  • Гуру
  • 5361
  • 381 / 7
  • ищу работу
В этом же файле? print_r здесь вообще отсутствует
Так Вы узнаете что есть в данных . Я использую var_dump
*

aleks_yug

  • Давно я тут
  • 626
  • 83 / 0
Сделать пришлось немного по-иному, но работает.

Удаляем или комментируем:
$this->subject = vmText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_'.$orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($this->currencyV->priceDisplay($orderDetails['details']['BT']->order_total)), $orderDetails['details']['BT']->order_number);
$recipient = 'vendor';


Заменяем на:

foreach ($this->shipmentfields['fields'] as $field) {
 if (!empty($field['value'])) {
 $this->subject = vmText::_('COM_VIRTUEMART_ZAKAZ_MAIL_ADM'). '' .$field['value']. '' .vmText::_('COM_VIRTUEMART_ZAKAZ_MAIL_CLIENT_NAME'). '' .$this->shopperName. '' .vmText::_('COM_VIRTUEMART_N_ZAKAZ_MAIL'). '' .$orderDetails['details']['BT']->order_number;
 $recipient = 'vendor';
 }
}


Добавляем несколько языковых переменных ланг-файл VM:

COM_VIRTUEMART_ZAKAZ_MAIL_ADM="Получен заказ на склад: "
COM_VIRTUEMART_ZAKAZ_MAIL_CLIENT_NAME=". Покупатель: "
COM_VIRTUEMART_N_ZAKAZ_MAIL=". № заказа: "


Или что-то на ваш вкус...

В результате получаем тему письма администратору магазина в таком виде:
Получен заказ на склад: магазин такой-то, на ул. какой-то 95/1. Покупатель: Пупкинд Вася. № заказа: J48F030

Вид темы письма самому покупателю остается без изменения.
*

rsn

  • Давно я тут
  • 516
  • 34 / 3
Я решал аналогичный вопрос так:
(но зависимость была - от способа доставки, можно переделать)

Тот же файл, что упомянули - view.html.php:

Вместо:
Код
$this->subject = vmText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_'.$orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($this->currencyV->priceDisplay($orderDetails['details']['BT']->order_total)), $orderDetails['details']['BT']->order_number);

Написал:
Код
                $subj_prefix = '';
                switch((int) $orderDetails['details']['BT']->virtuemart_shipmentmethod_id) {
                    case 1:
                    case 2:
                        $subj_prefix = 'Кашириных: ';
                        break;
                    case 4:
                        $subj_prefix = '15у: ';
                        break;
                    case 5:
                        $subj_prefix = 'СДМ: ';
                        break;
                }
                if (!empty($orderDetails['details']['BT']->coupon_code)) {
                    $subj_prefix .= 'ПРОМОКОД '.$orderDetails['details']['BT']->coupon_code.' ';
                }               

                $this->subject = $subj_prefix . vmText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_'.$orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($this->currencyV->priceDisplay($orderDetails['details']['BT']->order_total)), $orderDetails['details']['BT']->order_number);
Возможно, будет интересно: Интеграция с Ozon
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Отправка уведомления о заказе на несколько адресов

Автор sept

Ответов: 5
Просмотров: 3888
Последний ответ 17.08.2018, 16:48:42
от Akeksandr
Неопубликованный товар доступен по ссылке из письма

Автор antony2606

Ответов: 3
Просмотров: 466
Последний ответ 18.01.2018, 13:42:13
от antony2606
Как передать значение настраиваемого поля в корзину?

Автор 1AZ1

Ответов: 3
Просмотров: 657
Последний ответ 27.08.2017, 18:47:05
от Liss
Добавление постраничной навигации к списку подкатегорий

Автор usmdamir

Ответов: 3
Просмотров: 461
Последний ответ 26.04.2017, 18:49:11
от Strikerus
E-mail администратору о заказе отстутствующего товара

Автор SolopoV

Ответов: 2
Просмотров: 534
Последний ответ 08.01.2017, 16:13:52
от SolopoV