Во-первых, я знаю об этом вопросе:
/programming/14799733/remove-name-field-from-joomla-registration-form
Но ссылка в ответе устарела, и упомянутый путь к файлу не существует в последней версии Joomla (версия 3.3), поэтому ответ бесполезен.
То, что я хочу, это просто: форма регистрации для Joomla выглядит следующим образом:
Я хочу, чтобы процесс регистрации был максимально простым для моих пользователей, чтобы они действительно завершили его, и есть некоторые проблемы:
- Мне не нужно знать настоящее имя пользователя.
- Я бы предпочел не иметь «подтвердить» коробки. Общее мнение заключается в том, что они не нужны. /ux/484/is-a-repeat-password-field-necessary-in-a-signup-page
- Все требуется, зачем отмечать обязательные поля?
Конечно, это гораздо лучшая страница регистрации:
Я изменил файл \ components \ com_users \ models \ forms \ registration.xml, чтобы форма выглядела так, как я хочу, и это сработало! Но всякий раз, когда я отправляю форму, проверка все равно ищет пропущенные поля, поэтому она сообщает мне, что мне нужно указать имя:
"Регистрация не удалась: пожалуйста, введите ваше имя."
Как я могу отключить проверки для поля имени, а также двух полей подтверждения?
Поскольку имя является обязательным, я хотел бы установить имя для предоставленного имени пользователя (поэтому имя пользователя и имя совпадают по умолчанию). Если пользователь действительно хочет установить реальное имя на странице своего профиля после регистрации, он должен это сделать, но это не требуется.
Я поступаю об этом неправильно? В некоторых местах я читал, что изменение основных файлов Joomla не очень хорошо, так как оно может сломаться при обновлении, и вместо этого следует использовать «переопределения». Обычно эти ответы просто ссылаются на страницу Joomla о переопределениях и не дают более подробного объяснения о том, как использовать их для выполнения того, что хочет запрашивающий. Я пытался выяснить их, но не могу, поэтому, если переопределения являются подходящим способом, пожалуйста, объясните, как мне поступить с ними, вместо того, чтобы просто ссылаться на учебник по переопределению.
Я был бы очень признателен за любую помощь, которую вы можете оказать, я пытаюсь понять это уже несколько часов!
источник
Ответы:
В идеале все это будет сделано в плагине пользователя. Я не уверен, что многие люди понимают это, но вы можете редактировать форму из плагина (не требуется взлом ядра).
Аналогично, плагин увидит ввод перед тем, как модель попытается сохранить запись, поэтому вы можете смоделировать некоторые поля дублирования полей, чтобы заставить его пройти проверку.
Эта функция в плагине "users" позволяет вам изменять форму:
Затем вы можете использовать функцию onUserBeforeSave для сброса любых полей, которые необходимо сбросить для прохождения проверки. (Это может быть не совсем необходимо, поэтому попробуйте без и посмотрите, какие ошибки вы получите.)
источник
Итак, я думал о подходе без необходимости взламывать что-либо или устанавливать какие-либо сторонние расширения. Мой метод будет включать переопределение шаблона, которое вам нужно будет сделать для компонента com_users , в частности, представления « Регистрация» .
Теперь для полей (при условии, что ваш шаблон переопределения полностью настроен), мы не будем их удалять, а вместо этого будем их скрывать, поскольку контроллер и модал требуют от них данных. Итак, откройте следующий файл, который теперь является переопределением вашего шаблона:
и добавьте следующий код в верхнюю часть файла сразу после
JHtml::_('behavior.formvalidation');
:Я добавил несколько комментариев, чтобы вы знали, что делает каждый фрагмент кода.
Надеюсь это поможет :)
источник
Ответ @ DavidFritsch был очень полезным. Однако я обнаружил пару проблем:
A) Вы не можете полностью удалить некоторые обязательные поля, так как это вызывает проблемы с фильтрацией данных при отправке формы (см. Комментарии в коде ниже). Чтобы бороться с этим, скрывайте, а не удаляйте поля из объекта формы. Б) Событие onUserBeforeSave не запускается, пока не станет слишком поздно, чтобы логика проверки регистрации не отклонила отправку формы. Вместо этого используйте событие onUserBeforeDataValidation.
В моем конкретном случае все, что я хотел, это адрес электронной почты и пароль. Joomla добавила здесь сложность, поскольку адрес электронной почты появлялся после пароля (продиктованного порядком полей, объявленных в файле registration.xml), что выглядело бы глупо с точки зрения взаимодействия с пользователем. Чтобы обойти это, я пометил поле имени пользователя на «Адрес электронной почты» и вместо этого скрыл поле адреса электронной почты. Электронная почта тогда по умолчанию от имени пользователя при отправке формы.
(Небольшое примечание: я ограничил плагин для работы только с формой 'com_users.registration' для моих целей, по сравнению с ответом Дэвида, который учитывает и другие формы.)
источник