Еще одна форма в кабинете пользователя Office

При использовании плагина Office столкнулся с проблемой добавления на страницу пользователя еще одной формы, куда пользователь мог бы занести какие-то данные. Сниппет написал, на отдельной странице он норм работает, а если в личном кабинете форму заполнять — по клику на кнопку идет перегрузка страницы и данные никуда не пишутся. Чую что надо что-то в код формы дописать чтобы Office понял что это не к нему относится и не лез куда не надо, но вот пока не понял что — подскажите, плиз, кто в теме.
сниппет вызывается в шаблоне личного кабинета 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();
    }
Евгений
12 декабря 2023, 06:11
modx.pro
655
0

Комментарии: 20

Володя
12 декабря 2023, 08:07
0
Доброе утро.
Вы в пакете Office в форме редактирования профиля вставили ещё одну форму для редактирования профиля? А зачем? Не проще для этого и использовать пакет Office?
    Евгений
    12 декабря 2023, 08:52
    0
    Пробовал в этом же шаблоне вызывать officeProfile, ничего не получилось. Подскажите, пожалуйста, как записать что-то пользователю в extended field средствами Office?
        Евгений
        12 декабря 2023, 13:40
        0
        По ссылке все еще раз внимательно прочел, все равно не получается. В шаблоне профиля пользователя 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>
        Уже заполненные данные из поля в поле формы при загрузке страницы выводятся, а вот новые не перезаписываются. Как правильно сделать, направьте, пожалуйста?
          Володя
          12 декабря 2023, 14:04
          0
          а вот новые не перезаписываются
          так наверное какая то ошибка выводиться при сохранении профиля?
            Евгений
            12 декабря 2023, 14:25
            0
            в том то и дело что ни в консоли браузера ни в журнале ошибок modx ничего не появляется
              Володя
              12 декабря 2023, 15:04
              0
              после нажатия кнопки сохранить какой ответ от коннектора? В консоли браузера посмотрите.
                Евгений
                12 декабря 2023, 15:41
                0
                «Вы уже авторизованы в системе». Понимаю, что на странице в первую очередь идет вызов officeAuth, то есть в нем вызывать officeProfile, скорее всего, не правильно, тогда во возвращаемся к вопросу — как тогда в officeAuth записать что-то в профиль юзеру?
                  Евгений
                  13 декабря 2023, 09:36
                  0
                  Осознание благодаря действенной терапии Володи приходит, допер что надо вызывать 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>
                  Где я опять косячу?
                    Володя
                    13 декабря 2023, 09:42
                    0
                    А вопрос все тот же
                    после нажатия кнопки сохранить какой ответ от коннектора? В консоли браузера посмотрите.
                    вот уверен на 100% что там помимо сообщения с ошибкой есть данные о том чего не хватает.
                      Евгений
                      13 декабря 2023, 09:57
                      0
                      в 2-х браузерах смотрю в консоли — не вижу ошибок. Дело в том что я не очень то программист, очень начинающий, поэтому то и купил платное приложение. Предлагаю мучительный процесс обучения на собственных ошибках уже завершить и ткнуть носом в косяк. Пожалуйста!
                      Володя
                      13 декабря 2023, 10:56
                      0
                      ответ от коннектора в консоли браузера посмотрите!
                      например на данном сайте запрос joxi.ru/52aJly3hEMj5NA
                      ответ joxi.ru/823go4Df9PvdG2
                      вот при нажатии кнопки сохранить в обновлении профиля что у вас отправляется и что приходит в ответ от сервера?
                      Евгений
                      13 декабря 2023, 14:31
                      0
                      ура! заработало!!! спасибо за терпение.
                      Для тех, кто с этим же столкнется, внимательно читаем документацию к контроллеру, а именно параметр &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>
                      Евгений
                      13 декабря 2023, 14:45
                      0
                      Вы уж простите настойчивость, но вот чтобы вообще все вопросы снять такая еще задача — воткнуть эту форму в середину контента, который выводится контроллером officeAuth, то есть все таки вызвать officeProfile из шаблона tpl.Office.auth.logout — такое в принципе возможно?
                      Евгений
                      14 декабря 2023, 09:28
                      0
                      На последний вопрос можно внимания не обращать — туплю. Размещение формы на странице решается правкой шаблонов обоих контроллеров.
Артур Шевченко
12 декабря 2023, 14:25
0
Просто чтоб ты знал: SendIt тоже умеет работать с профилем пользователя.
    Евгений
    12 декабря 2023, 14:52
    0
    То есть вместо встроенных функций Office, которые рекомендует Володя, вы рекомендуете вызывать SendIt из кабинета пользователя (а точнее из шаблона кабинета авторизированного пользователя)? Спасибо, попробую. Вопрос решить надо, каким образом — не так важно. Просто не очень понятно почему не работает самописный сниппет, который работает на любой другой странице.
    … Посмотрел SendIt, интересный плагин, тем более автор его советует, попробую, спасибо
      Володя
      12 декабря 2023, 15:01
      0
      ну то есть с Office парень не разобрался и ты решил его направить в нужное русло да?)
        Евгений
        12 декабря 2023, 15:23
        0
        Одно другому не мешает, желание разобраться с Office у меня от этого меньше не стало.
          Артур Шевченко
          12 декабря 2023, 21:29
          0
          Я просто сказал, что есть альтернатива)))
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        20