Загрузка файлов на сервер из настроек плагина Есть решение

Задача: загрузить картинку в настройках плагина и сохранить на сервере в папку темы img

Это сама форма в Settings.html

<div class="fields form">
  <form action="?module=plugins&id=test&action=save" method="post" id="plugins-settings-form" enctype="multipart/form-data">
    <div class="field">
      <div class="name">
        Картинка:
      </div>
      <div class="value">
        <input type="file" name="shop_test[image]" value="{if isset($settings.image)}{$settings.image}{/if}">
      </div>
    </div>

    <div class="field">
      <div class="value submit">
        <input type="submit" class="button green" value="[s`Save`]">
        <span id="plugins-settings-form-status" style="display:none"></span>
      </div>
    </div>
  </form>
</div>

Это экшн с обработкой сохранения:

class shopTestPluginSettingsAction extends waViewAction {

  public function execute() {

    $file = waRequest::file("image");
    $directory_for_images = wa()->getDataPath(&#039;themes&#039;, true, &#039;site&#039;).&#039;/&#039;.waRequest::getTheme().&#039;/img&#039;;

    $file->moveTo($directory_for_images);

    $plugin = wa(&#039;shop&#039;)->getPlugin(&#039;test&#039;);
    $settings = $plugin->getSettings();
    $this->view->assign(&#039;settings&#039;, $settings);
  }

}

Выдает ошибку No file uploaded. code 500

print_r($settings['image']) выдаёт это /opt/lampp/temp/phpBevn68, но как я понял по документации нужно делать через waRequest::file

print_r(waRequest::file("image")) выдаёт  это waRequestFileIterator Object ( [currentIndex:protected] => 0 [indexes:protected] => Array ( ) [files:protected] => Array ( ) [skip_uploaded_check] => [data:protected] => ) и это похоже на то, что файла нет

Как заставить работать загрузку файла?

3 ответа

  • 4
    enso_studio@mail.ru 30 июля 2019 13:39 # Решение

    недавно все пофиксили т.ч. эти танцы с бубном не требуются, задаем 'control_type' => waHtmlControl::FILE и 'img_path' => ...

  • 2
    Syrnik.com 28 июля 2019 18:03 # Решение

    надо через iframe настройки сабмитить, по ajax файлы не передадутся

    • +1
      Egor Nikiforov Egor Nikiforov 28 июля 2019 19:12 #

      Надо просто добавить в Settings.html

      <script>
        $.plugins.options.useIframeTransport = true;
      </script>

      ?

    • +1
      Egor Nikiforov Egor Nikiforov 28 июля 2019 19:54 #

      Добавил в Settings.html:

      <script>
        $.plugins.options.useIframeTransport = true;
      </script>

      И еще изменил экшн-обработчик:

      class shopTestPluginSettingsAction extends waViewAction {
      
        public function execute() {
          $file = waRequest::file("image");
          $directory_for_images = wa()->getDataPath('themes', true, 'site').'/'.waRequest::getTheme().'/img';
          try {
            $file->moveTo($directory_for_images);
          } catch(Exception $e) {
            unset($e);
            return;
          }
          
          $plugin = wa()->getPlugin('test');
          $settings = $plugin->getSettings();
          $this->view->assign('settings', $settings);
        }
      
      }

      Теперь после нажатия кнопки submit всё пропадает и появляется одна строчка { "status": "ok", "data": { "message": "Сохранено" } }

      Но фактически ничего не сохранилось(

      • +2
        enso_studio@mail.ru enso_studio@mail.ru 31 июля 2019 18:51 #
        'banner' => [
        	'value' => '',
        	'title' => 'Banner image',
        	'description' => '<script>
        	$(function () {
        		$.plugins.options.useIframeTransport = true;
        		var $banner = $("#plugins-settings-form .value img");
        		if ($banner.length) {
        			var newUrl = $banner.attr("src") + "?v=" + Math.random(99, 9999);
        			$banner.css({maxHeight: 200}).addClass("shadowed").attr("src", newUrl);
        		}
        	});
        	</script>',
        	'control_type' => waHtmlControl::FILE,
        	'img_path' => 'plugins/'.$this->id.'/',
        ],

  • 1

    2 года прошло, а вопросы почти все те-же самые )

    https://developers.webasyst.ru/forum/17182/ne-rabotaet-zagruzka-faylov-v-nastroykakh-plagina/

    Может вам поможет, мы же просто написали свой загрузчик файлов

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

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