Primeiro, estou ciente dessa pergunta:
/programming/14799733/remove-name-field-from-joomla-registration-form
Mas o link na resposta está inoperante, e o caminho do arquivo mencionado não existe no Joomla mais recente (versão 3.3), então a resposta é inútil.
O que eu quero é simples: O formulário de inscrição para o Joomla é assim:
Quero garantir que o processo de registro seja o mais simples possível para meus usuários, para que eles realmente o concluam e haja alguns problemas:
- Não preciso saber o nome real do usuário.
- Prefiro não ter caixas "confirmar". O consenso geral é que eles não são necessários. /ux/484/is-a-repeat-password-field-necessary-in-a-signup-page
- Tudo é necessário, por que se preocupar em marcar os campos obrigatórios?
Certamente esta é uma página de registro muito melhor:
Modifiquei o arquivo \ components \ com_users \ models \ forms \ registration.xml para fazer com que o formulário se pareça com o que eu quero e funcionou! Porém, sempre que envio o formulário, a validação ainda procura os campos ausentes, por isso me informa que preciso fornecer um nome:
"Falha no registro: digite seu nome."
Como posso desativar as verificações para o campo de nome, bem como os dois campos de confirmação?
Como um nome é obrigatório, eu gostaria de definir o nome para o nome de usuário fornecido (portanto, nome de usuário e nome são os mesmos por padrão). Se o usuário realmente quiser definir um nome real em sua página de perfil após o registro, ele poderá, mas não será necessário.
Estou fazendo isso da maneira errada? Eu li em alguns lugares que modificar os arquivos principais do Joomla não é bom, pois pode ocorrer uma atualização e que "substituições" devem ser usadas. Geralmente essas respostas simplesmente apontam para a página de substituições do Joomla e não fornecem mais explicações sobre como usá-las para fazer o que o solicitante deseja. Eu tentei descobri-los, mas não consigo, portanto, se houver substituições, explique como eu faria isso com elas, em vez de apenas vincular o tutorial de substituição.
Agradeço imensamente qualquer ajuda que você possa fornecer. Estou tentando descobrir isso há algumas horas!
fonte
Respostas:
Idealmente, tudo isso será feito em um plug-in de usuário. Não tenho certeza de que muitas pessoas percebam isso, mas você pode editar o formulário a partir de um plug-in (não é necessário hackear o núcleo).
Da mesma forma, o plug-in verá a entrada antes que o modelo tente salvar a entrada, para que você possa zombar de alguns dos campos de duplicação de campos para forçá-lo a passar na validação.
Esta função em um plug-in "usuários" permite alterar o formulário:
Em seguida, você pode usar uma função onUserBeforeSave para redefinir qualquer um dos campos que você precisa redefinir para passar na validação. (Isso pode não ser totalmente necessário, portanto, tente sem e veja quais erros você recebe.)
fonte
Ok, então eu estava pensando em uma abordagem sem ter que interromper nada ou instalar extensões de terceiros. Meu método envolverá uma substituição de modelo que você precisará fazer para o componente com_users , especificamente a exibição Registro .
Agora, para os campos (supondo que a substituição do modelo esteja toda configurada), não os removeremos, mas os ocultamos, pois o controlador e o modal exigem dados deles. Portanto, abra o seguinte arquivo que agora substitui o seu modelo:
e adicione o seguinte código na parte superior do arquivo logo após
JHtml::_('behavior.formvalidation');
:Adicionei alguns comentários para que você saiba o que cada trecho de código está fazendo.
Espero que isto ajude :)
fonte
A resposta de @ DavidFritsch foi muito útil. Alguns problemas que encontrei foram:
A) Você não pode remover completamente certos campos obrigatórios, pois isso causa problemas com a filtragem de dados no envio de formulários (consulte os comentários no código abaixo). Para combater isso, oculte em vez de remover os campos do objeto de formulário. B) O evento onUserBeforeSave não é acionado até que seja tarde demais para impedir que a lógica de validação do registro rejeite o envio do formulário. Em vez disso, use o evento onUserBeforeDataValidation.
No meu caso particular, tudo que eu queria era endereço de email e senha. O Joomla lançou uma complicação aqui, pois o endereço de e-mail estava aparecendo após a senha (ditada pela ordem dos campos declarados no arquivo registration.xml), que pareceria estúpido da perspectiva da experiência do usuário. Para contornar isso, rotulei novamente o campo de nome de usuário para 'Endereço de email' e, em vez disso, ocultei o campo de endereço de email. O email é padronizado no nome de usuário no envio do formulário.
(Observação secundária: restringi o plug-in a operar apenas no formulário 'com_users.registration' para meus propósitos, em comparação com a resposta de David, que também considera outros formulários.)
fonte