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

Тема в разделе "Opencart", создана пользователем zek24, 11 дек 2013.

Информация :
Внимание форумчане! При создании тем, или выкладывании какой-либо информации проверьте в какой ветке форума вы находитесь! Не путайте Opencart и Opencart2. При несоблюдении данного условия выносится соответствующее наказание! И потом не говорите что вас НЕ ПРЕДУПРЕЖДАЛИ! По возможности используйте обменники mail, yandex, google, dropbox, rghost Дабы избежать просьб перезалить и проблем с рекламой!
Модераторы: ZiX
  1. zek24

    zek24

    Moderator
    Регистр.:
    14 ноя 2009
    Сообщения:
    778
    Симпатии:
    233
    Привет,
    как можно сделать чтобы вместе с письмом о заказе админу приходил аттач файл csv типа
    product_id, 2шт
    product_id , 2шт
    product_id , 1шт
    product_id уникальный для каждого товара из заказа.
    Казалось, что не сложно...
    ОК 1551
     
  2. Anton_Fadeev

    Anton_Fadeev Постоялец

    Регистр.:
    3 фев 2014
    Сообщения:
    50
    Симпатии:
    10
    Сейчас на работе и не помню где у Опенкарта лежит файлик, отвечающий за отправку 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");?>


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

    Пришлось повозиться:
    В общем в файл 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 товара, во втором количество
     
    Последнее редактирование модератором: 5 фев 2014
  3. Anton_Fadeev

    Anton_Fadeev Постоялец

    Регистр.:
    3 фев 2014
    Сообщения:
    50
    Симпатии:
    10
    Если не нужно чтобы CSV файлы хранились на сервере - после строки $mail->send(); надо добавить unlink(DIR_CSV.'order_'.$order_id.'.csv');
     
  4. yurets86

    yurets86 Постоялец

    Заблокирован
    Регистр.:
    25 сен 2011
    Сообщения:
    135
    Симпатии:
    32
    а как можно прикрепить файл только в комментарию в заказе, при установленной галочке "уведомить покупателя" ?
     
  5. Anton_Fadeev

    Anton_Fadeev Постоялец

    Регистр.:
    3 фев 2014
    Сообщения:
    50
    Симпатии:
    10
    Подробнее распишите алгоритм. Я понимаю так - каждый раз, когда ставится галочка "уведомить покупателя" и отправляется сообщение (вне зависимости от выбранного статуса) покупателю будет приходить CSV файл?
    Или же необходима кнопка типа "прикрепить файл" и если файл указан, то он будет прикрепляться к письму?
     
  6. yurets86

    yurets86 Постоялец

    Заблокирован
    Регистр.:
    25 сен 2011
    Сообщения:
    135
    Симпатии:
    32
    я добавил кнопку выбора файла возле галочки "уведомить покупателя", долго мучался и понял почему файл не получается загрузить на сервер, т.к. там обработка идет через аякс, получается, что надо как -то при выборе файла сразу его грузить на сервер, потом подставлять его в отправку, а после отправки - удалить