Новый сниппет для загрузки аватр в Modx revolution

  • proGroup
  • 3258
  • 13 Комментариев
  • Загрузка аватар, Revolution, Modx, AJAX

Так как первая версия снипета для загрузки аватар получилась очень сложной для адаптации и часто пользователи просят довести его до состояния "установил и пользуешь", было решено переписать полностью с ипользованием стандартного класса Modx - modPhpThumb для работы с изображениями.

Для работы скрипта нужен установленный jQuery, сам сниппет использует библилиотеку ajaxupload.

Параметры аватар вынесены в системные настройки и теперь легко можно регулировать входные и выходные параметры.

Параметры для загрузки аватар MOdx Revolution

Скачать пакет для установки avaload 

 

13 Комментарии
  1. 09 октября 2014, 16:40

    Установил вывел в чанк, Нажимаю загрузить пишит загрузка и всё… НА этом функционал останавливается в консоле пишит вот что:
    Uncaught SyntaxError: Unexpected token  jquery.js:7020
    b.extend.parseJSON jquery.js:7020
    jQuery.ajaxUpload.onComplete avaload.js:9
    o ajaxupload.min.js:24
    b.event.dispatch jquery.js:9593
    v.handle jquery.js:9273

    1. 11 октября 2014, 10:31

      Судя по ошибке при загрузке сервер возвращает json ответ который не нравится jquery, напишите на электронную почту или через форму обратной связи адрес сайта на котором появляется ошибка, постараюсь разобраться как можно скорее.

    2. 14 ноября 2014, 15:49

      Останавливается на «Загрузка...»

      Пишет ошибку вот в этой строке
      param = $.parseJSON(result);

      1. 01 декабря 2014, 11:00

        После нажатия «Загрузить» пишет «Эта операция запрещена неавторизованным пользователям.»
        Пользователь точно авторизован (проверяю на странице, доступной только авторизованным пользователям).

        1. 25 декабря 2014, 16:28

          у меня такая же проблема. Удалось решить?

        2. 11 декабря 2014, 17:23

          Евгений Гришко, я так понял ТС не отвечает… удалось ли решить проблему??

          1. 12 декабря 2014, 09:31

            Похоже, что проблема решилась, общались через skype, скорее всего были проблемы в скрипте авторизации.

          2. 11 марта 2015, 19:39

            Загрузка фото для пользователя работает! для комментариев еще не пробовал. Единственный вопрос вот в чем, после того, как нажимаешь загрузить аватар, он загрузил и нужно вручную обновить стр, чтобы увидеть фото. Автообновления после загрузки нет?

            1. 11 марта 2015, 20:07

              Дополнение… поковырялся в файлах… в общем у меня почему то не работает оповещение о загрузке
              вот это участок кода просто не обрабатывается… Пробовал пройтись по ошибкам, загружал файлы не того формата, большего размера… статусы ошибок не выводятся…
              function avaLoad() {
              $modx = new Modx();
              $modx->initialize('web');
              $modx->lexicon->load('avaload:default');
              $return_message =array();
              if(!$modx->user->isAuthenticated()){
              $return_message=array(0,'Эта операция запрещена неавторизованным пользователям.','');
              $modx->log(modX::LOG_LEVEL_ERROR,'[avaload] Попытка неавторизированной загрузки файла.');
              }
              else {
              if(($_FILES['avaloadImage']['size'] == 0)||(!file_exists($_FILES['avaloadImage']['tmp_name']))) {
              $return_message = array(0,'Файл не был загружен.','');
              $modx->log(modX::LOG_LEVEL_ERROR,'[avaload] UserID: '.$modx->user->id.', Неудалось загрузить файл ');
              }
              elseif (!getTrueImageTypes($_FILES['avaloadImage']['tmp_name'],explode(',',$modx->getOption('avaload_true_types')))) {
              $return_message = array(0,$modx->getOption('avaload_true_types'),'');
              //$return_message = array(0,'Загрузка файлов такого типа запрещена.','');
              $modx->log(modX::LOG_LEVEL_ERROR,'[avaload] UserID: '.$modx->user->id.', Попытка загрузить запрещенный файл '.$_FILES['avaloadImage']['name'].'.'.$_FILES['avaloadImage']['type'].' размер:'.$_FILES['avaloadImage']['size']);
              }
              elseif (!$modx->loadClass('modPhpThumb',$modx->getOption('core_path').'model/phpthumb/',true,true)) {
              $modx->log(modX::LOG_LEVEL_ERROR,'[avaload] Не загружен класс modPhpThumb.');
              $return_message = array(0,'Не загружен класс modPhpThumb','');
              }
              else {
              $avaloadImagePatch = $modx->getOption('avaload_image_patch');

              $avaOptions = array(
              'zc'=> (int) $modx->getOption('avaload_zc',null,1),
              'h' => (int) $modx->getOption('avaload_height',null,120),
              'w' => (int) $modx->getOption('avaload_width',null,120),
              'q' => (int) $modx->getOption('avaload_quality',null,75),
              'f' => (string) $modx->getOption('avaload_output_format',null,'jpg'),
              'maxb' => (float) $modx->getOption('avaload_max_filesizes',null,2048000),
              );

              $phpThumb = new modPhpThumb($modx);
              $phpThumb->config = array_merge($phpThumb->config,$avaOptions);
              $phpThumb->initialize();
              $phpThumb->setParameter('config_allow_src_above_phpthumb',true);
              $phpThumb->setParameter('allow_local_http_src',true);
              $phpThumb->setParameter('config_allow_src_above_docroot',true);

              foreach($avaOptions as $param=>$value) {
              $phpThumb->setParameter($param,$value);
              }

              $phpThumb->setCacheDirectory();
              $phpThumb->set($_FILES['avaloadImage']['tmp_name']);

              if ($phpThumb->MaxFileSize()) {
              $return_message = array(0,'Превышен допустимый размер файла','');
              $modx->log(modX::LOG_LEVEL_ERROR,'[avaload] UserID: '.$modx->user->id.', Превышен допустимый размер файла '.$_FILES['avaloadImage']['name'].'.'.$_FILES['avaloadImage']['type'].' размер:'.$_FILES['avaloadImage']['size']);

              }
              else {
              $phpThumb->GenerateThumbnail();
              $file_name = $modx->user->id.time().'.'.$avaOptions['f'];
              $outputImage = $avaloadImagePatch.$file_name;
              $phpThumb->RenderToFile($outputImage);

              $profile=$modx->user->getOne('Profile');
              $old_ava = $profile->get('photo');
              $profile->set('photo',$file_name);
              $profile->save();
              $errDelAva='';
              if ($old_ava!='')
              if(!unlink($avaloadImagePatch.$old_ava))
              $errDelAva =' Старый аватар не был удален';

              $return_message = array(1,'Аватар загружен.'.$errDelAva,$modx->getOption('avaload_url_patch').$file_name);
              }
              }
              }
              return json_encode($return_message);
              }

            2. 11 марта 2015, 21:30

              Разобрался почему не отображался и не обновлялся статус… решение банальное… после установки этого дополнения, в файле assets/components/avaload/avaload.php перед <?php стояли вот такие 2 точки •• после их удаления, все работает правильно (предыдущий пост можно удалить)

              1. 14 мая 2015, 17:26

                У меня всё заработало. Одно НО: если после загрузки аватара снова тыкнуть «Загрузить», то поле с выбором имени файла бывает уже заполненым. И после этого если тыкнуть отправить, то ничего не происходит. А если тыкнуть отмена, то запрос уходит на сервер, но файл не отсылается. Приходит ответ, что файл не был загружен.
                Создается впечатление, что какая-то переменная заполняется именем файла и пока её не очистить или перезагрузкой страницы, или выбором и отправкой другого файла, она не дает нормально работать скрипту. Может что-то добавить в код, чтобы после успешной отправки аватара все переменные приводились бы в исходное состояние?

                1. 14 мая 2015, 18:50

                  всё, разобрался. Добавил такую конструкцию
                  $('[name=«avaloadImage»]').val("");

                2. 07 сентября 2015, 16:56

                  «Эта операция запрещена неавторизованным пользователям»
                  Тоже не могу понять в чем дело

                  Вы должны авторизоваться, чтобы оставлять комментарии.

                  Вы можете авторизоваться на сайте через: