Baza, C:\fakepath\kartinka.zip, потому, что в файле templates\...\controllers\showcase\tpl\steps\cart_step_fields.tpl.php на ссылке «Оформить заказ» весит событие onchange, которое отправляет данные полей в system\controllers\showcase\actions\save_cart_data.php. А так как ваш файл, как бы не файл, то и прописывается там, то, что ОС считает нужным. Вам надо сделать следующее.
В файлеtemplates\...\controllers\showcase\tpl\steps\cart_step_fields.tpl.php внизу найти такой код
$(".sc_cart_fields .sc_cField_value").on("change blur", "*[name]", function() { if ($(".sc_cart_fields .sc_cField_value *[name]").length) { $(".sc_cart_fields .sc_cField_value *[name]").each(function(index, field) { if ($(field).attr('name')) { data[$(field).attr('name')] = $(field).val(); } }); $.post('/showcase/save_cart_data', data, false, 'json'); } });
и поменять на так
$(".sc_cart_fields .sc_cField_value").on("change blur", "*[name]", function() { if ($(".sc_cart_fields .sc_cField_value *[name]").length) { $(".sc_cart_fields .sc_cField_value *[name]").each(function(index, field) { if ($(field).attr('name') && $(field).attr('name') != 'file') { data[$(field).attr('name')] = $(field).val(); } }); $.post('/showcase/save_cart_data', data, false, 'json'); } });
Далее файл templates\...\controllers\showcase\fields\cart_fields\file.tpl.php
<input onchange="setFile(this)" id="<?php html($field['name']); ?>" name="<?php html($field['name']); ?>" <?php foreach ($field['attributes'] as $key => $val){ ?> <?php if ($key == 'id' || $key == 'name'){ continue; } ?> <?php html($key); ?>="<?php html($val); ?>" <?php } ?> <?php } ?> type="file" value="" /> <style>.sc_cField_value #<?php html($field['name']); ?>{width:100%;padding:6px 8px;border:1px solid #ddd;background:#f7f7f7;outline:none}</style> <script> async function setFile(inp) { let formData = new FormData(); let file = inp.files[0]; formData.append("file", file); fetch('', {method: "POST", body: formData}); } </script>
теперь файл system\controllers\showcase\actions\cart.php в самом верху добавляем
public function run($step = 0){ $file = $_FILES; if($file){ cmsUser::sessionSet('file',$file); }
Всё. Теперь у вас есть все данные для обработки файла. Теперь в файле system\controllers\showcase\actions\save_cart_data.php вы можете получить
данные из сессии, загрузить файл на сервер и в $data['file'] прописать или путь или саму картинку. Хотя это можно сделать сразу, а в сессию уже записать то, что нужно поместить в $data['file'].