From: Vladimir Fomichev Date: Mon, 6 Oct 2025 14:30:16 +0000 (+0300) Subject: Добавление новых файлов X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=dc528baa85d8ffe0bf8d6c5413698c0625b81a7d;p=erp24_rep%2Fyii-erp24%2F.git Добавление новых файлов --- diff --git a/erp24/controllers/MatrixErpPropertyController.php b/erp24/controllers/MatrixErpPropertyController.php index 2602738b..aed15c84 100644 --- a/erp24/controllers/MatrixErpPropertyController.php +++ b/erp24/controllers/MatrixErpPropertyController.php @@ -153,15 +153,27 @@ class MatrixErpPropertyController extends Controller // Фильтруем пустые записи (созданные MultipleInput при добавлении новых строк) if (!empty($loadDataMatrixErpMedia)) { - $loadDataMatrixErpMedia = array_filter($loadDataMatrixErpMedia, function($mediaData) { + // Сначала проверяем, есть ли файлы для загрузки + $filesToUpload = []; + if (isset($_FILES['MatrixErpProperty']['name']['mediaFiles'])) { + foreach ($_FILES['MatrixErpProperty']['name']['mediaFiles'] as $index => $fileData) { + if (!empty($fileData['mediaFile'])) { + $filesToUpload[$index] = true; + } + } + } + + $loadDataMatrixErpMedia = array_filter($loadDataMatrixErpMedia, function($mediaData, $index) use ($filesToUpload) { // Сохраняем запись если: // 1. Есть ID (существующая запись) // 2. Есть file_id (уже загруженный файл) - // 3. Есть заполненное имя ИЛИ есть файл для загрузки в текущей сессии + // 3. Есть заполненное имя + // 4. Есть файл для загрузки в текущей сессии return !empty($mediaData['id']) || !empty($mediaData['file_id']) || - (!empty($mediaData['name']) && trim($mediaData['name']) !== ''); - }); + (!empty($mediaData['name']) && trim($mediaData['name']) !== '') || + isset($filesToUpload[$index]); + }, ARRAY_FILTER_USE_BOTH); // Сортируем данные по foto_order перед обработкой usort($loadDataMatrixErpMedia, function($a, $b) { diff --git a/erp24/web/js/matrix_erp_property/_form.js b/erp24/web/js/matrix_erp_property/_form.js index 48b33c73..2d46b671 100644 --- a/erp24/web/js/matrix_erp_property/_form.js +++ b/erp24/web/js/matrix_erp_property/_form.js @@ -76,11 +76,48 @@ $(document).ready(() => { // Обработчик добавления новых элементов $(document).on('multipleinput.afterAddRow', function(_e, row) { + console.log('multipleinput.afterAddRow triggered for row:', row); // Добавляем handle для нового элемента addSortableHandleToRow(row); updateNumRowValues(); }); + // Дополнительный обработчик для кнопки добавления (любая кнопка с текстом содержащим '+') + $(document).on('click', 'button:contains("+")', function() { + console.log('Add button clicked (generic selector)'); + // Даем время на добавление строки в DOM + setTimeout(function() { + $('.multiple-input-list__item').each(function() { + addSortableHandleToRow(this); + }); + updateNumRowValues(); + }, 100); + }); + + // Также отслеживаем изменения в DOM для надежности + const observer = new MutationObserver(function(mutations) { + mutations.forEach(function(mutation) { + if (mutation.type === 'childList') { + mutation.addedNodes.forEach(function(node) { + if (node.nodeType === 1 && node.classList && node.classList.contains('multiple-input-list__item')) { + console.log('New row detected via MutationObserver'); + addSortableHandleToRow(node); + updateNumRowValues(); + } + }); + } + }); + }); + + // Начинаем наблюдение после инициализации + setTimeout(function() { + const container = document.querySelector('.multiple-input-list'); + if (container) { + observer.observe(container, { childList: true, subtree: true }); + console.log('MutationObserver started'); + } + }, 500); + // Обработчик удаления элементов $(document).on('multipleinput.afterRemoveRow', function(_e) { updateNumRowValues(); @@ -91,10 +128,14 @@ $(document).ready(() => { let mediaSortableInstance = null; function addSortableHandleToRow(row) { + console.log('addSortableHandleToRow called for row:', row); if (!$(row).find('.sortable-handle').length) { + console.log('Adding sortable handle to row'); // Добавляем handle в первую ячейку строки $(row).find('td:first').prepend('
'); $(row).find('td:first').css('display', 'flex'); + } else { + console.log('Sortable handle already exists in row'); } } @@ -159,15 +200,5 @@ function updateNumRowValues() { } } }); - - // Обновляем основную картинку на первую в новом порядке - updateMainImageFromFirstFile(); -} - -function updateMainImageFromFirstFile() { - // Основная картинка обновляется автоматически на сервере - // после сохранения формы в методе updateMainImageFromFirstMedia - // Здесь ничего не делаем - сервер сам обработает обновление - console.log('Main image will be updated on server side'); }