Доработка office
Здравствуйте.
Допиливаю office под свои нужды. В частности в контроллере profile сделал загрузку фото с компьютера пользователя, а не с gravatar-а, т.е. добавил инпут типа «file» и подредактировал метод Update контроллера.
При этом, картинка обновляется только после перезагрузки странички профиля. Вопрос: как бы заставить картинку обновляться (т.е., видимо, как сделать, чтобы страничка профиля обновлялась) после щелчка по кнопке «Сохранить»?
Допиливаю office под свои нужды. В частности в контроллере profile сделал загрузку фото с компьютера пользователя, а не с gravatar-а, т.е. добавил инпут типа «file» и подредактировал метод Update контроллера.
При этом, картинка обновляется только после перезагрузки странички профиля. Вопрос: как бы заставить картинку обновляться (т.е., видимо, как сделать, чтобы страничка профиля обновлялась) после щелчка по кнопке «Сохранить»?
Комментарии: 12
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Если не путаю, то Office возвращает все отправленные поля в ответе, массиве data. Если картинка нормально грузится и сохраняется, то там должно быть поле photo с url загруженного.
Надо его словить и подставить в src изображения на странице.
P.S. Контроллер было не обязательно менять. Лучше использовать плагин на событие OnBeforeUserFormSave, чтобы получить картинку, проверить и добавить в сохраняемый массив.
В поле «photo» таблицы user_attributes — пишется правильный адрес этой картинки.
В чанке в src подставлен плейсхолдер [[+photo]], но картинка обновляется только после перезагрузки страницы. Как бы сделать чтобы она обновлялась сразу?
У любого запроса есть ответ, В случае с Office, в ответе массив с ключами
* success — статус ответа
* message — сообщение об ошибке или успехе
* data — массив с полями профиля юзера
Вот data тебе и надо проверить, если там есть photo, то нужно его взять и подставить на страницу. Не знаю, как еще понятнее объяснить.
Спасибо, за ответы.
Это событие вызывается когда у тебя в функции Update запускается соответствующий процессор:
"$response = $this->office->runProcessor('profile/update', $fields);"
Я не могу понять, как мне в плагине получить массив $fields и добавить туда нужное мне поле.
Конечно в плагине доступен объект user, и я могу адрес картинки записать через него, но как тогда добиться чтобы этот адрес картинки попал в ответ ajax запроса?
А пока держи готовое решение плагином:
Поэтому, надо в форме сделать так:
В поле newfile отправится загружаемый файл — именно его мы ловим в плагине.
А скрытое поле photo нужно только для того, чтобы в ajax ответе появилось значение.
Иначе, при изменении других полей, картинка из профиля будет будет удаляться.
В любом случае, я очень надеюсь добавить это в родной функционал, и читать не придётся.