Не работает загрузка файлов в настройках плагина

Исходя из документации:

https://developers.webasyst.ru/cookbook/plugins/pl...

достаточно добавить

 'icon' => array(
'title' => _wp('Icon'),
'description' => _wp('Upload a 16*16px large icon file.'),
'control_type' => waHtmlControl::FILE,
),

и все заработает, однако на практике не происходит, и форма запрашивается как и без файла по AJAX что соответсвено передается без всяких файлов, что то нужно еще где то настроить, указать, ударить в шаманский бубен?

4 ответа

  • 1
    ITFrogs 23 января 2017 00:17 #

    Загрузка файлов из админки - это довольно сложная техническая задача в вебасисте. Нужно очень глубоко покопаться в движке, чтобы с этим разобраться. Либо просто скопипастить часть кода с другого плагина, который это умеет. Думаю тут у каждого разработчика свои рецепты.

  • 1
    Александр Тарасенко 23 января 2017 08:35 #

    Тогда вопрос к WebAsyst будет ли подвижки в данном направление, в идеале исправление функционала чтобы он работал из коробки, на худой конец "правильная" инструкция как нужно делать?

    Просто ломать голову над загрузкой файлов в 21 веке, причем в фремеворке, думаю как то не правильно.

    Можно не AJAX хотя бы простую загрузку реализовать.

  • 1
    Алексей Webasyst 23 января 2017 09:52 #

    Посмотрите https://developers.webasyst.ru/features/upload/ для справки и далее в самом плагине добавляете saveSettings() и пишете обработчик

    • +1
      Александр Тарасенко Александр Тарасенко 23 января 2017 10:00 #

      в saveSettings не передаются файлы, так как у вас сделано ajax сохранение

    • +1
      Александр Тарасенко Александр Тарасенко 24 января 2017 11:43 #

      Не получается. идем по порядку:

      Использую плагин, в нем 'custom_settings' => true,

      форма естественно

      <form action="?module=plugins&id=actions&action=save" method="post" id="plugins-settings-form" enctype="multipart/form-data">

      Поле

      <input type="file" name="test_image">

      Для отладки в saveSettings

      print_r(waRequest::file('test_image'));
      print_r($_FILES);

      В итоге нажимаем сохранить, и по отладке видим что файлы не передаются:

      waRequestFileIterator Object
      (
          [currentIndex:protected] => 0
          [indexes:protected] => Array
              (
              )
      
          [files:protected] => Array
              (
              )
      
          [skip_uploaded_check] => 
          [data:protected] => 
      )
      Array
      (
      )
      {"status":"ok","data":{"message":"\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e"}}

      Можно конечно убрать id у формы и забыть все это как страшный сон вернувшись к простой обработке без всяких iframe_transport но для чего то он же был сделан? Как все таки заставить его работать?

      • +1
        ITFrogs ITFrogs 24 января 2017 12:02 #

        Вы не правильно именуете поля формы. Если имена не подходят под определенный шаблон, вебасист их отбрасывает.

        Копните обработчик форм немного глубже, поймете как он работает.

        • +1
          Александр Тарасенко Александр Тарасенко 24 января 2017 12:38 #

          Да вот и не хотелось бы копаться в коде фрамеворка, проще тогда самому сделать как обычную загрузкую файлов.

          Думаю тут в этом месте затык:

          if (!self.options.useIframeTransport) {
          $('#plugins-settings-form').submit(function () {
          self.saveHandlerAjax(this);
          return false;
          });
          } else {
          $('#plugins-settings-form').submit(function () {
          self.saveHandlerIframe(this);
          });


          как установить useIframeTransport я не увидел

          • +1
            EnsoStudio EnsoStudio 29 марта 2018 21:25 #

            если шаблон настроек кастомный, то думаю нужно добавить туда скрипт:

            $.plugins.options.useIframeTransport = true;

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите