Отправка файла с заказом
Как реализовать отправку файла с заказом в minishop2?
Я попробовал тип одного из input'ов в заказе изменить на файл, добавил форме enctype, но после выбора файла в assets/components/minishop2/action.php массив S_FILES пуст. При отправке заказа тоже.
Подскажите, хотя бы, в каком направлении читать мануалы.
Я попробовал тип одного из input'ов в заказе изменить на файл, добавил форме enctype, но после выбора файла в assets/components/minishop2/action.php массив S_FILES пуст. При отправке заказа тоже.
Подскажите, хотя бы, в каком направлении читать мануалы.
Комментарии: 16
Та же задача. Похоже этот вопрос везде игнорируется. Нашли решение?
Как это сделать в рамках minishop я не разобрался. Отложил задачу на потом. Последней идеей было грузить на странице заказа iframe с формой отправки файла и своим обработчиком.
У меня пока идея: грузить файлы куда-то в tmp и как-то аттачить к заказу, после чего удалять. Пока кажется что это реально. Попробую.
Создаете табу в базе
в нее пишите пути сохренения файла и айди заказа
На странице где оформляется заказ, то бишь корзина сделать форму отправки файла
эта форма без перезагрузки страницы загружает файл и пишет в табу данные
Главное узнать айди заказа )
Надеюсь помог
в нее пишите пути сохренения файла и айди заказа
На странице где оформляется заказ, то бишь корзина сделать форму отправки файла
эта форма без перезагрузки страницы загружает файл и пишет в табу данные
Главное узнать айди заказа )
Надеюсь помог
Задача, в моём случае — увеличить стоимость товара при загрузке файла пользователем. Файл — фотка. Делаем продукт с фоткой пользователя — увеличиваем его стоимость. Так что загружаться файл должен ещё до добавления товара в корзину.
плагином в корзине делаем проверку если файл был загружен то добавляем в корзину какой то товар с определенной стоимостью, возможно обновляем корзину.
Хз ) чисто размышления.
Хз ) чисто размышления.
Это понятно. Осталось решить две «простецких» задачи: аккуартно и безопасно загрузить файл куда-то и как-то приаттачить его к письму менеджеру. А потом ещё удалить, чтоб не создавать помойку на хостинге.
Ну приаттачить к письму можно ссылкой на файл, там же рядом сделать ссылку на удаление файла. Свой сниппет будет удалять файл и строку из таблицы аттачей
Это слишком геморойно для менеджеров. Почта практически бесконечна, в отличии от хостинга. Нужно чтоб файлы именно аттачились к письму, а не были ссылкой на файл, который в скором времени исчезнет, пусть даже это случится через месяц. Заставлять манагеров удалять файлы самостоятельно (пусть даже ссылкой) — гиблое дело. Забьют.
Письмо будет отправляться минишопом?
Тогда в чанке письма менеджеру вы размещаете сниппет который будет отправлять например второе письмо менеджеру) с аттачем, например используя это
Тогда в чанке письма менеджеру вы размещаете сниппет который будет отправлять например второе письмо менеджеру) с аттачем, например используя это
/*Активируем почтовый сервис MODX*/
$modx->getService('mail', 'mail.modPHPMailer');
хммм… стоит попробовать. Спасибо.
Пока решение такое.
1. На странице товара, добавил dropzone в отдельной форме. То есть в шаблоне у меня есть такое:
2. Сделал тупой загрузчик upload.php:
3. В /core/components/minishop2/model/minishop2/minishop2.class.php изменил функцию sendEmail, следующим образом:
Ясно, что нужно расширять класс, а не править minishop2.class.php. Что удалять папку нужно в другом месте (сейчас аттачи приходят только менеджеру). Но, вроде работает. Попробую допилить дальше. Хотя есть сомнения в правильности такого способа. Как я уже 100 раз говорил, я дизайнер, а не программист. Хотелось бы услышать мнение программистов.
1. На странице товара, добавил dropzone в отдельной форме. То есть в шаблоне у меня есть такое:
<script src="/assets/js/dropzone.js"></script>
<link rel="stylesheet" href="/assets/js/dropzone.css">
<form action="/upload.php" class="dropzone">
<div class="fallback">
<input name="file" type="file" multiple />
</div>
</form>
2. Сделал тупой загрузчик upload.php:
<?php
session_start();
$ds = DIRECTORY_SEPARATOR; //1
$ses = session_id();
$storeFolder = 'uploads/'.$ses; //2
if (!is_dir($storeFolder))
mkdir($storeFolder);
if (!empty($_FILES)) {
$tempFile = $_FILES['file']['tmp_name']; //3
$targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds; //4
$targetFile = $targetPath. $_FILES['file']['name']; //5
move_uploaded_file($tempFile,$targetFile); //6
}
?>
Загруженный файл сохраняется в папку /uploads/session_id/.3. В /core/components/minishop2/model/minishop2/minishop2.class.php изменил функцию sendEmail, следующим образом:
public function sendEmail($email, $subject, $body = 'no body set') {
if (!isset($this->modx->mail) || !is_object($this->modx->mail)) {
$this->modx->getService('mail', 'mail.modPHPMailer');
}
$this->modx->mail->set(modMail::MAIL_FROM, $this->modx->getOption('emailsender'));
$this->modx->mail->set(modMail::MAIL_FROM_NAME, $this->modx->getOption('site_name'));
$this->modx->mail->setHTML(true);
$this->modx->mail->set(modMail::MAIL_SUBJECT, trim($subject));
$this->modx->mail->set(modMail::MAIL_BODY, $body);
$this->modx->mail->address('to', trim($email));
$storeFolder = MODX_BASE_PATH .'uploads/'.session_id();
if (is_dir($storeFolder)){
$files = scandir($storeFolder);
foreach($files as $file) {
$attachment = $storeFolder.'/'.$file;
$this->modx->mail->attach($attachment);
}
}
if (!$this->modx->mail->send()) {
$this->modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$this->modx->mail->mailer->ErrorInfo);
}
$this->modx->mail->reset();
if($files){
foreach ($files as $file) {
unlink($storeFolder.'/'.$file);
}
rmdir($storeFolder);
}
}
Функция цепляет все файлы из папки /uploads/session_id/ к отправляемому письму и удаляет папку.Ясно, что нужно расширять класс, а не править minishop2.class.php. Что удалять папку нужно в другом месте (сейчас аттачи приходят только менеджеру). Но, вроде работает. Попробую допилить дальше. Хотя есть сомнения в правильности такого способа. Как я уже 100 раз говорил, я дизайнер, а не программист. Хотелось бы услышать мнение программистов.
Здравствуйте, удалось, решить данный вопрос?
Хорошее решение! Не подскажите в чём может быть проблема на тестовом сайте всё работает норм, делаю на рабочий папочка с сессией создаётся и удаляется, а вот файлик не аттачиться.
Не приходит файл, почему?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.