Еще одна форма в кабинете пользователя Office
При использовании плагина Office столкнулся с проблемой добавления на страницу пользователя еще одной формы, куда пользователь мог бы занести какие-то данные. Сниппет написал, на отдельной странице он норм работает, а если в личном кабинете форму заполнять — по клику на кнопку идет перегрузка страницы и данные никуда не пишутся. Чую что надо что-то в код формы дописать чтобы Office понял что это не к нему относится и не лез куда не надо, но вот пока не понял что — подскажите, плиз, кто в теме.
сниппет вызывается в шаблоне личного кабинета tpl.Office.auth.logout, форма выглядит так:
сниппет вызывается в шаблоне личного кабинета tpl.Office.auth.logout, форма выглядит так:
<form method="post" class="form_db mb-4 row align-items-center">
<label>Ссылка на видео</label> <input type="text" size="20" name="videolink" value="[[+extended.video]]" />
<button type="submit" name="videosubmit">сохранить</button>
</form>
[[!videolink]]
Сниппет videolink:<?php
if( !empty( $_POST['videolink'] ) && (isset($_POST['videosubmit']))) {
$video = filter_input(INPUT_POST, 'videolink', FILTER_SANITIZE_STRING);
echo $video;
$user = $modx->user;
$profile = $user->getOne('Profile');
echo $user->username;
$extended = $profile->get('extended');
$extended['video'] = $video;
$profile->set('extended', $extended);
$profile->save();
}
Комментарии: 20
Доброе утро.
Вы в пакете Office в форме редактирования профиля вставили ещё одну форму для редактирования профиля? А зачем? Не проще для этого и использовать пакет Office?
Вы в пакете Office в форме редактирования профиля вставили ещё одну форму для редактирования профиля? А зачем? Не проще для этого и использовать пакет Office?
Пробовал в этом же шаблоне вызывать officeProfile, ничего не получилось. Подскажите, пожалуйста, как записать что-то пользователю в extended field средствами Office?
По ссылке все еще раз внимательно прочел, все равно не получается. В шаблоне профиля пользователя tpl.Office.auth.logout вызываю контроллер профиля:
[[!officeProfile?
&profileFields=`extended[video]`
&tplProfile = `tpl.Office.addvideo.form`
]]
шаблон tpl.Office.addvideo.form<form method="post" id="office-profile-form" enctype="multipart/form-data" class="form_db mb-4 row align-items-center">
<label for="extended.video">Ссылка на видео</label> <input type="text" size="20" name="extended[video]" value="[[+extended.video]]" />
<button type="submit">сохранить</button>
</form>
Уже заполненные данные из поля в поле формы при загрузке страницы выводятся, а вот новые не перезаписываются. Как правильно сделать, направьте, пожалуйста? а вот новые не перезаписываютсятак наверное какая то ошибка выводиться при сохранении профиля?
в том то и дело что ни в консоли браузера ни в журнале ошибок modx ничего не появляется
после нажатия кнопки сохранить какой ответ от коннектора? В консоли браузера посмотрите.
«Вы уже авторизованы в системе». Понимаю, что на странице в первую очередь идет вызов officeAuth, то есть в нем вызывать officeProfile, скорее всего, не правильно, тогда во возвращаемся к вопросу — как тогда в officeAuth записать что-то в профиль юзеру?
Осознание благодаря действенной терапии Володи приходит, допер что надо вызывать officeProfile после officeAuth, сейчас в личном кабинете имеем:
Код шаблона
[[!officeAuth? &groups=`Users` &HybridAuth=`0` ]]
[[!officeProfile? &profileFields=`extended[video]` &tplProfile=`tpl.Office.addvideo.form`]]
Такая конструкция выдает панельку с ошибкой «Ошибка при обновлении профиля» Код шаблона
<form method="post" id="office-profile-form" enctype="multipart/form-data" class="form_db mb-4 row align-items-center">
<label for="extended.video">Ссылка на видео</label> <input type="text" size="20" name="extended[video]" value="[[+extended.video]]" />
<button type="submit">сохранить</button>
</form>
Где я опять косячу?
А вопрос все тот же
после нажатия кнопки сохранить какой ответ от коннектора? В консоли браузера посмотрите.вот уверен на 100% что там помимо сообщения с ошибкой есть данные о том чего не хватает.
в 2-х браузерах смотрю в консоли — не вижу ошибок. Дело в том что я не очень то программист, очень начинающий, поэтому то и купил платное приложение. Предлагаю мучительный процесс обучения на собственных ошибках уже завершить и ткнуть носом в косяк. Пожалуйста!
ответ от коннектора в консоли браузера посмотрите!
например на данном сайте запрос joxi.ru/52aJly3hEMj5NA
ответ joxi.ru/823go4Df9PvdG2
вот при нажатии кнопки сохранить в обновлении профиля что у вас отправляется и что приходит в ответ от сервера?
например на данном сайте запрос joxi.ru/52aJly3hEMj5NA
ответ joxi.ru/823go4Df9PvdG2
вот при нажатии кнопки сохранить в обновлении профиля что у вас отправляется и что приходит в ответ от сервера?
ура! заработало!!! спасибо за терпение.
Для тех, кто с этим же столкнется, внимательно читаем документацию к контроллеру, а именно параметр &requiredFields
Для тех, кто с этим же столкнется, внимательно читаем документацию к контроллеру, а именно параметр &requiredFields
Список обязательных полей при редактировании. Эти поля должны быть заполнены для успешного обновления профиля. Например, &requiredFields=`username,fullname,email`В моем случае дефолтный список менять не стал, просто добавил в шаблон формы эти поля в скрытых:
<form method="post" id="office-profile-form" enctype="multipart/form-data" class="form_db mb-4 row align-items-center">
<input type="hidden" name="username" value="{$username}"/>
<input type="hidden" name="fullname" value="{$fullname}"/>
<input type="hidden" name="email" value="{$email}"/>
<label for="extended.video">Ссылка на видео</label><input type="text" size="20" name="extended[video]" value="[[+extended.video]]" class="ml-3" />
<button type="submit">сохранить</button>
</form>
Вы уж простите настойчивость, но вот чтобы вообще все вопросы снять такая еще задача — воткнуть эту форму в середину контента, который выводится контроллером officeAuth, то есть все таки вызвать officeProfile из шаблона tpl.Office.auth.logout — такое в принципе возможно?
На последний вопрос можно внимания не обращать — туплю. Размещение формы на странице решается правкой шаблонов обоих контроллеров.
Просто чтоб ты знал: SendIt тоже умеет работать с профилем пользователя.
То есть вместо встроенных функций Office, которые рекомендует Володя, вы рекомендуете вызывать SendIt из кабинета пользователя (а точнее из шаблона кабинета авторизированного пользователя)? Спасибо, попробую. Вопрос решить надо, каким образом — не так важно. Просто не очень понятно почему не работает самописный сниппет, который работает на любой другой странице.
… Посмотрел SendIt, интересный плагин, тем более автор его советует, попробую, спасибо
… Посмотрел SendIt, интересный плагин, тем более автор его советует, попробую, спасибо
ну то есть с Office парень не разобрался и ты решил его направить в нужное русло да?)
Одно другому не мешает, желание разобраться с Office у меня от этого меньше не стало.
Я просто сказал, что есть альтернатива)))
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.