Так как первая версия снипета для загрузки аватар получилась очень сложной для адаптации и часто пользователи просят довести его до состояния "установил и пользуешь", было решено переписать полностью с ипользованием стандартного класса Modx - modPhpThumb для работы с изображениями.
Для работы скрипта нужен установленный jQuery, сам сниппет использует библилиотеку ajaxupload.
Параметры аватар вынесены в системные настройки и теперь легко можно регулировать входные и выходные параметры.
Скачать пакет для установки avaload
Вы должны авторизоваться, чтобы оставлять комментарии.
Установил вывел в чанк, Нажимаю загрузить пишит загрузка и всё… НА этом функционал останавливается в консоле пишит вот что:
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
Судя по ошибке при загрузке сервер возвращает json ответ который не нравится jquery, напишите на электронную почту или через форму обратной связи адрес сайта на котором появляется ошибка, постараюсь разобраться как можно скорее.
Останавливается на «Загрузка...»
Пишет ошибку вот в этой строке
param = $.parseJSON(result);
После нажатия «Загрузить» пишет «Эта операция запрещена неавторизованным пользователям.»
Пользователь точно авторизован (проверяю на странице, доступной только авторизованным пользователям).
у меня такая же проблема. Удалось решить?
Евгений Гришко, я так понял ТС не отвечает… удалось ли решить проблему??
Похоже, что проблема решилась, общались через skype, скорее всего были проблемы в скрипте авторизации.
Загрузка фото для пользователя работает! для комментариев еще не пробовал. Единственный вопрос вот в чем, после того, как нажимаешь загрузить аватар, он загрузил и нужно вручную обновить стр, чтобы увидеть фото. Автообновления после загрузки нет?
Дополнение… поковырялся в файлах… в общем у меня почему то не работает оповещение о загрузке
вот это участок кода просто не обрабатывается… Пробовал пройтись по ошибкам, загружал файлы не того формата, большего размера… статусы ошибок не выводятся…
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);
}
Разобрался почему не отображался и не обновлялся статус… решение банальное… после установки этого дополнения, в файле assets/components/avaload/avaload.php перед <?php стояли вот такие 2 точки •• после их удаления, все работает правильно (предыдущий пост можно удалить)
У меня всё заработало. Одно НО: если после загрузки аватара снова тыкнуть «Загрузить», то поле с выбором имени файла бывает уже заполненым. И после этого если тыкнуть отправить, то ничего не происходит. А если тыкнуть отмена, то запрос уходит на сервер, но файл не отсылается. Приходит ответ, что файл не был загружен.
Создается впечатление, что какая-то переменная заполняется именем файла и пока её не очистить или перезагрузкой страницы, или выбором и отправкой другого файла, она не дает нормально работать скрипту. Может что-то добавить в код, чтобы после успешной отправки аватара все переменные приводились бы в исходное состояние?
всё, разобрался. Добавил такую конструкцию
$('[name=«avaloadImage»]').val("");
«Эта операция запрещена неавторизованным пользователям»
Тоже не могу понять в чем дело