Загрузка фото товара через свой экшен? (интерфейс 2.0) Есть решение

Привет!

В общем вопрос такого плана.

Существует плагин thumbnails, который генерит миниатюры не обрезая изображение и в старом интерфейсе вебасист, все работает адекватно.
А именно часть логики которая подменяет атрибут action форме через которую загружаются фотки к товару.
То есть если соблюдаются определенные условия, то атрибут action меняется на такой
?plugin=thumbnails&module=imageupload
и запрос с инфой о фотке уходит уже в плагин. И все нормально.

В новом же варианте интерфейса уже не существует никакой формы, а существует только input с типом file. И тут уже так просто взять и перенаправить запрос в сторону плагина не получается.
В темплейте ProdMedia.html есть кусок кода который инициализирует логику работы медиа секции в режиме редактирования товара.

$.wa_shop_products.init.initProductMediaSection({
    $wrapper: $("#js-product-media-section-wrapper"),
    tooltips: {$_tooltips|json_encode},
    templates: {$_templates|json_encode},
    components: {$_components|json_encode},
    locales: {
        "file_type": {_w("Unsupported image type. Use PNG, GIF, WEBP and JPEG image files only.")|json_encode},
        "file_size": {_w("Each file’s size cannot be greater than")|json_encode} + " " + {$_max_file_size_mb|json_encode} + {_w("KB")|json_encode} + ".",
        "post_size": {_w("Total size of selected files cannot be greater than")|json_encode} + " " + {$_max_post_size_mb|json_encode} + {_w("KB")|json_encode} + ".",
        "use_in_sku_forms": [
            {_w("Used in %d variant.", "Used in %d variants.", 1, false)|json_encode},
            {_w("Used in %d variant.", "Used in %d variants.", 2, false)|json_encode},
            {_w("Used in %d variant.", "Used in %d variants.", 5, false)|json_encode}
          ]
         },
    urls: {
        "save": "{$wa_app_url}?module=prod&action=saveMedia",
        "video_add": "{$wa_app_url}?module=prod&action=saveVideo",
        "video_delete": "{$wa_app_url}?module=prod&action=saveVideo",
        "change_image_description": "{$wa_app_url}?module=prod&action=saveImageDetails",
        "add_product_image": "{$wa_app_url}?module=prod&action=imageUpload",
        "save_photo_changes": "{$wa_app_url}?module=prod&action=saveImageDetails",
        "delete_images": "{$wa_app_url}?module=prod&action=deleteImage"
    },
    max_file_size: {$_max_file_size|json_encode},
    max_post_size: {$_max_post_size|json_encode},
    product: {$formatted_product|json_encode}
    });
И туда уже прокидывается ссылка на вызов экшена imageUpload.
 "add_product_image": "{$wa_app_url}?module=prod&action=imageUpload",
Но в тупую брать этот темплейт и редактировать его как-то не хочется.

Вот и возник вопрос, может кто-то знает как это организовать более-менее адекватно и без вторжений в системные файлы?

2 ответа

  • 1
    Михаил Ушенин 23 мая 2024 18:22 # Решение

    Попробуйте в обработчике хука backend_prod_content вернуть фрагмент JavaScript-кода, которым модифицируйте или полностью замените на свой блок загрузки изображений. И опишите для него свой обработчик событий, возникающих при попытке загрузить файлы (нажатие мышью и перетаскивание файлов). В этом обработчике можно использовать любую логику загрузки (при желании скопировав ту, что используется по умолчанию в Shop-Script), в том числе указать собственный URL для отправки запросов на сервер.

    • +1
      Alexey Popov Alexey Popov 26 мая 2024 15:15 #

      Спасибо за информацию, попробую!

Эта тема в архиве. Добавление комментариев к ней отключено.