Как отправить по электронной почте все значения, созданные с помощью 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 = "[email protected]";
$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 ="[email protected]";
$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 = "[email protected]";$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 ="[email protected]";
$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.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]