Как отправить по электронной почте все значения, созданные с помощью jquery uploader переменных PHP-формы

Я пытаюсь внедрить виджет uploadcare в мою пользовательскую форму php, которая будет загружать все изображения, загруженные пользователем, и добавлять дополнительную информацию, такую ​​как URL изображения и имя файла, к изображениям и отправлять эти дополнительные данные клиенту по электронной почте. Я успешно реализовал форму и шаблон электронной почты. Проблема в том, что когда я отправляю форму, в полученное письмо включается информация только об одном изображении.

Если я звучу немного расплывчато, взгляните на код, в котором все изображения, загруженные виджетом uploadcare, вставляются в список как элементы списка.

 $ = uploadcare.jQuery;
     function installWidgetPreviewMultiple(widget, list) {
       widget.onChange(function(fileGroup) {
         list.empty();
         if (fileGroup) {
           $.when.apply(null, fileGroup.files()).done(function() {

             $.each(arguments, function(i, fileInfo) {
               // display file preview
               var $filename = fileInfo.name;
               var $fileurl = fileInfo.cdnUrl;
               var $src = fileInfo.cdnUrl + '-/resize/100x100/filename.jpg';
               var $sendurl = $("<input>").attr("type","hidden").attr("name","fileurl").val($fileurl);
               var $itemnu = 0;
               list.append(
            $('<li class="thumb_list_item"><input type="hidden" name="items" id="items" value="' + $fileurl +'"><img src="' + $src+ '" alt="Image Preview">' + '<h4 class="filename">' + $filename + '</h4>' + '<div class="get-layer-wraper"><ul class="get-layer"><li class="layer-name"><label for="white-layer" class="layer-title">White Layer : </label></li><li><input id="white-layer" name="white-layer" class="layer" type="number" value="0"/></li><li>PX</li></ul><div class="clear"><ul class="get-layer"><li class="layer-name"><label for="adhesive-layer" class="layer-title">Adhesive Layer : </label></li><li><input id="adhesive-layer" name="adhesive-layer" class="layer" type="number" value="0"/></li><li>PX</li></ul><div class="clear"><ul class="get-layer"><li class="layer-name"><label for="block-layer" class="layer-title">Blocking Layer : </label></li><li><input id="block-layer" name="block-layer" class="layer" type="number" value="0"/></li><li>PX</li></ul><div class="clear"><ul class="get-layer"><li class="layer-name"><label for="clear-layer" class="layer-title">Clear Layer : </label></li><li><input id="clear-layer" name="clear-layer" class="layer" type="number" value="0"/></li><li>PX</li></ul></div></li>').appendTo(".thumb_list")
            );

               list.append(
            $('<div>', {'class': 'layers'}).append($sendurl)                 
          );



             });
           });
         }
       });
     }

И вот мой mailer.php используется для отправки электронного письма:

require 'vendor/autoload.php';
$sendgrid = new SendGrid('send_grid_api');
$mail = new SendGrid\Email();

 $name = "X";
 $email = "test@email.com";
 $fileurl = $_POST['fileurl'];
 $wlayer = $_POST['white-layer'];
 $alayer = $_POST['adhesive-layer'];
 $blayer = $_POST['block-layer'];
 $clayer = $_POST['clear-layer'];

 $msg = "White Layer: $wlayer, Adhesive Layer: $alayer, 
 Blocking Layer:      $blayer, Clear Layer: $clayer. 
 Download Link: $fileurl \n";

 $recipient ="test@email.com";
 $subject = "New Email";

$mail->
addTo( $recipient )->
setFromName($name)->
setFrom( $email )->
setSubject($subject)->
setText($msg);

//Send Mail.
if ($sendgrid->send($mail)) {
    header('Location: /thank-you/');
}
else{
    echo "failed";
}

У меня есть знания jquery среднего уровня, но всегда немного медленно для начала. Поэтому, пожалуйста, помогите мне с этим. Все, что мне нужно, это включить все URL-адреса изображений и другую информацию в электронное письмо, а не только один.

Заранее спасибо.

1 ответ

Решение

Часть почтовой программы - вы можете найти здесь документацию по работе с группами uploadcare в php. После того, как вы пройдете его, вы увидите, что ваш правильный mailer.php, который прикрепляет список URL к телу сообщения, будет выглядеть так:

<html>
<head>
<?php
require_once 'vendor/autoload.php';
use \Uploadcare;

//make sure you replace your key values here
$sendgrid = new SendGrid('send_grid_api');
$api = new Uploadcare\Api('YOUR_PUBLIC_KEY', 'YOUR_SECRET_KEY');

$mail = new SendGrid\Email();
$name = "X";
$email = "test@email.com";


$group_id = $_POST['fileurl'];
$wlayer = $_POST['white-layer'];
$alayer = $_POST['adhesive-layer'];
$blayer = $_POST['block-layer'];
$clayer = $_POST['clear-layer'];
$group = $api->getGroup($group_id);
$group->store();
$files = $group->getFiles();
$msg = "White Layer: $wlayer, Adhesive Layer: $alayer, 
Blocking Layer:      $blayer, Clear Layer: $clayer \n";


for($i = 0; $i < count($files); $i++) {

    $msg.=$files[$i]->getUrl().' \n';

    }

 $recipient ="test@email.com";
 $subject = "New Email";

$mail->
addTo( $recipient )->
setFromName($name)->
setFrom( $email )->
setSubject($subject)->
setText($msg);

//Send Mail.
if ($sendgrid->send($mail)) {
    header('Location: /thank-you/');
}
else{
    echo "failed";
}

?>
</head>

<body>
</body>

</html>

Для первой части - я ответил на аналогичный вопрос здесь - единственное отличие заключается в инициализации виджета:

<?php echo $api->widget->getInputTag('fileurl',array('data-multiple' => true)); ?>`   

вместо

 <?php echo $api->widget->getInputTag('fileurl'); ?>  

И, конечно, имена полей, которые вы отправляете в форме, должны совпадать с именами полей, которые вы получаете в mailer.php в инструкции POST.

Другие вопросы по тегам