Jump to main content Jump to doc navigation

Что такое UpdateProfile?

UpdateProfile даёт авторизованным на фронтенде пользователям редактировать свой профиль.

Использование

Создайте ресурс, куда пользователь перейдёт для редактирования профиля. Добавьте сниппет:

[[!UpdateProfile? &validate=`fullname:required,email:required:email`]]

Свойства UpdateProfile

Name Description Default
submitVar Имя кнопки отправки формы, которая запускает обработку. login-updprof-btn
validate Список полей для валидации через запятую в формате name:validator (например username:required,email:required). Validators можно цепочкой, например email:email:required. Свойство можно задать в несколько строк.
redirectToLogin Если true, неавторизованных пользователей перенаправляет на страницу Unauthorized. 1
reloadOnSuccess Если true, страница перезагружается с GET-параметром против двойной отправки. Если false, выставляется плейсхолдер успеха. 1
emailField Имя поля email в форме. email
preHooks Список «хуков» или сниппетов через запятую. Выполняются до обновления профиля, но после валидации. Можно указать captcha как хук.
postHooks Список «хуков» или сниппетов через запятую. Выполняются после обновления профиля.
syncUsername Если задано имя колонки Profile, UpdateProfile попытается синхронизировать username с этим полем после успешного сохранения.
allowedFields Список полей, которые можно обновлять, через запятую. Пустое значение разрешает все поля профиля.
useExtended Сохранять ли дополнительные поля формы в extended-поле Profile. Полезно для пользовательских полей. 1
allowedExtendedFields Список extended-полей, разрешённых в форме при useExtended. Пустое значение разрешает любые дополнительные поля.
excludeExtended Список полей, которые не сохранять как extended, через запятую.
placeholderPrefix Префикс для всех плейсхолдеров, которые задаёт этот сниппет.

Форма UpdateProfile

Ниже добавьте HTML (уберите ненужные поля). Разметку можно менять, имена полей формы сохраняйте. Тот же код есть в core/components/login/chunks/lgnupdateprofile.chunk.tpl.

<div class="update-profile">
    <div class="updprof-error">[[+error.message]]</div>
    [[+login.update_success:is=`1`:then=`[[%login.profile_updated? &namespace=`login` &topic=`updateprofile`]]`]]

    <form class="form" action="[[~[[*id]]]]" method="post">
        <input type="hidden" name="nospam" value="" />

        <label for="fullname">[[!%login.fullname? &namespace=`login` &topic=`updateprofile`]]
            <span class="error">[[+error.fullname]]</span>
        </label>
        <input type="text" name="fullname" id="fullname" value="[[+fullname]]" />

        <label for="email">[[!%login.email]]
            <span class="error">[[+error.email]]</span>
        </label>
        <input type="text" name="email" id="email" value="[[+email]]" />

        <label for="phone">[[!%login.phone]]
            <span class="error">[[+error.phone]]</span>
        </label>
        <input type="text" name="phone" id="phone" value="[[+phone]]" />

        <label for="mobilephone">[[!%login.mobilephone]]
            <span class="error">[[+error.mobilephone]]</span>
        </label>
        <input type="text" name="mobilephone" id="mobilephone" value="[[+mobilephone]]" />

        <label for="fax">[[!%login.fax]]
            <span class="error">[[+error.fax]]</span>
        </label>
        <input type="text" name="fax" id="fax" value="[[+fax]]" />

        <label for="address">[[!%login.address]]
            <span class="error">[[+error.address]]</span>
        </label>
        <input type="text" name="address" id="address" value="[[+address]]" />

        <label for="country">[[!%login.country]]
            <span class="error">[[+error.country]]</span>
        </label>
        <input type="text" name="country" id="country" value="[[+country]]" />

        <label for="city">[[!%login.city]]
            <span class="error">[[+error.city]]</span>
        </label>
        <input type="text" name="city" id="city" value="[[+city]]" />

        <label for="state">[[!%login.state]]
            <span class="error">[[+error.state]]</span>
        </label>
        <input type="text" name="state" id="state" value="[[+state]]" />

        <label for="zip">[[!%login.zip]]
            <span class="error">[[+error.zip]]</span>
        </label>
        <input type="text" name="zip" id="zip" value="[[+zip]]" />

        <label for="website">[[!%login.website]]
            <span class="error">[[+error.website]]</span>
        </label>
        <input type="text" name="website" id="website" value="[[+website]]" />

        <br class="clear" />

        <div class="form-buttons">
            <input type="submit" name="login-updprof-btn" value="[[!%login.update_profile]]" />
        </div>
    </form>
</div>

Обновление фото профиля в UpdateProfile

Чтобы обновить аватар, добавьте поле загрузки файла в HTML-форму и реализуйте pre-hook сниппет. Пример: Profile logo update custom postHook example

См. также

  1. Login.Login
  2. Login.Profile
  3. Login.UpdateProfile
  4. Login.Register
    1. Register.Example Form 1
  5. Login.ConfirmRegister
  6. Login.ForgotPassword
  7. Login.ResetPassword
  8. Login.ChangePassword
  9. Login.Tutorials
    1. Login.Basic Setup
    2. Login.Extended User Profiles
    3. Login.Request Membership
    4. Login.User Profiles
    5. Login.Using Custom Fields
    6. Login.Using Pre and Post Hooks

Support the team building MODX with a monthly donation.

The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.

Backers

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • CrewMark
  • Fabian Christen
  • Sepia River Studios
  • Dannevang Digital
  • Alex
  • A. Moreno
  • Chris Fickling
  • Stéphane Jäggi
  • Murray Wood
  • Anton Tarasov
  • deJaya
  • JT Skaggs
  • Lefthandmedia
  • eydolan
  • Following Sea
  • Guido Gallenkamp
  • YJ
  • Raffy
  • Snow Creative
  • Nick Clark
  • Guest
  • Helen
  • krisznet
  • Yanni
  • Richard

Budget

$204 per month—let's make that $500!

Learn more