Помощь Приаттачить файл к письму о заказе

zek24

Мой дом здесь!
Команда форума
Модератор
Регистрация
14 Ноя 2009
Сообщения
811
Реакции
310
  • Автор темы
  • Модер.
  • #1
Привет,
как можно сделать чтобы вместе с письмом о заказе админу приходил аттач файл csv типа
product_id, 2шт
product_id , 2шт
product_id , 1шт
product_id уникальный для каждого товара из заказа.
Казалось, что не сложно...
ОК 1551
 
Сейчас на работе и не помню где у Опенкарта лежит файлик, отвечающий за отправку email-ов.
На Stack Overflow уже делали что-то подобное:
<?php
$cr ="\n";
$csvdata ="First Name".','."Last Name". $cr;
$csvdata .= $txtFName .','. $txtLName . $cr;

$thisfile ='file.csv';

$encoded = chunk_split(base64_encode($csvdata));

// create the email and send it off

$subject ="File you requested from RRWH.com";
$from ="scripts@rrwh.com";
$headers ='MIME-Version: 1.0'."\n";
$headers .='Content-Type: multipart/mixed;
boundary="----=_NextPart_001_0011_1234ABCD.4321FDAC"'."\n";

$message ='

This is a multi-part message in MIME format.

------=_NextPart_001_0011_1234ABCD.4321FDAC
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: 7bit

Hello

We have attached for you the PHP script that you requested from Для просмотра ссылки Войди или Зарегистрируйся
as a zip file.

Regards

------=_NextPart_001_0011_1234ABCD.4321FDAC
Content-Type: application/octet-stream; name="';

$message .="$thisfile";
$message .='"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="';
$message .="$thisfile";
$message .='"

';
$message .="$encoded";
$message .='

------=_NextPart_001_0011_1234ABCD.4321FDAC--

';

// now send the email
mail($email, $subject, $message, $headers,"-f$from");?>
[/spoil]

Буду дома - попробую прикрутить к опенкарту, если к этому времени никто не реализует

Пришлось повозиться:
[spoil]
В общем в файл config.php в корне добавляем строку:
Код:
define('DIR_CSV', 'C:\xampp\htdocs\cart/csv/');
Где вместо C:\xampp\htdocs\cart/csv/ необходимо указать путь куда будут сохраняться CSV файлы (в принципе, можно этого не делать, тогда вместо переменной DIR_CSV надо будет прописывать полный путь)

Далее лезем в catalog/model/checkout/order.php

Находим начало письма для Админа
Код:
// Admin Alert Mail

После нее ищем (примерно на 9-10 строк ниже)
Код:
foreach ($order_product_query->rows as $product) {

после нее вставляем код
Код:
$csv_data .= $product['product_id']. ';' . $product['quantity']."\n";

далее смотрим код ниже и находим строку
Код:
$mail = new Mail();

Над ней добавляем:
Код:
$fp = fopen(DIR_CSV.'order_'.$order_id.'.csv', 'w');
                fwrite($fp, $csv_data);
                fclose($fp);

Еще чуть ниже ищем код
Код:
$mail->setTo($this->config->get('config_email'));

Под ним вставляем
Код:
$mail->addAttachment(DIR_CSV.'order_'.$order_id.'.csv');


Вот и все. Теперь при заказе Админу будет приходить письмо с вложенным CSV файлом с именем order_[номер заказа] В первом столбце ID товара, во втором количество
 
Последнее редактирование модератором:
Если не нужно чтобы CSV файлы хранились на сервере - после строки $mail->send(); надо добавить unlink(DIR_CSV.'order_'.$order_id.'.csv');
 
  • Заблокирован
  • #4
а как можно прикрепить файл только в комментарию в заказе, при установленной галочке "уведомить покупателя" ?
 
а как можно прикрепить файл только в комментарию в заказе, при установленной галочке "уведомить покупателя" ?
Подробнее распишите алгоритм. Я понимаю так - каждый раз, когда ставится галочка "уведомить покупателя" и отправляется сообщение (вне зависимости от выбранного статуса) покупателю будет приходить CSV файл?
Или же необходима кнопка типа "прикрепить файл" и если файл указан, то он будет прикрепляться к письму?
 
  • Заблокирован
  • #6
Подробнее распишите алгоритм. Я понимаю так - каждый раз, когда ставится галочка "уведомить покупателя" и отправляется сообщение (вне зависимости от выбранного статуса) покупателю будет приходить CSV файл?
Или же необходима кнопка типа "прикрепить файл" и если файл указан, то он будет прикрепляться к письму?
я добавил кнопку выбора файла возле галочки "уведомить покупателя", долго мучался и понял почему файл не получается загрузить на сервер, т.к. там обработка идет через аякс, получается, что надо как -то при выборе файла сразу его грузить на сервер, потом подставлять его в отправку, а после отправки - удалить
 
Назад
Сверху