Отправка файла с заказом
        Как реализовать отправку файла с заказом в 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 раз говорил, я дизайнер, а не программист. Хотелось бы услышать мнение программистов.
                Здравствуйте, удалось, решить данный вопрос?            
                    
                Хорошее решение! Не подскажите в чём может быть проблема на тестовом сайте всё работает норм, делаю на рабочий папочка с сессией создаётся и удаляется, а вот файлик не аттачиться.            
                    
                Не приходит файл, почему?            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.