如何禁用Joomla 3注册中某些字段的验证

stc*_*vrw 5 validation joomla registration joomla3.0

我正在构建基于Joomla 3的网站.我需要禁用字段的验证:名称,用户名,密码1(第二个,因为第一个是password2)和email2并使用email1作为用户名(我安装了插件电子邮件用户授权).我试图删除文件组件/ com_users/models/forms/registration.xml中的这些字段,但仍然保留验证.如果我不删除它们但仅将这些字段的required ="true"更改为false,则注册根本不起作用,并且存储在DB中的任何用户都不起作用.如何禁用这些字段?

di3*_*sel 6

这不是一个简单的解决方法,你需要一些Joomla和PHP的基本知识,但我会尽量向你解释它.

>>>创建视图模板覆盖

首先,您需要创建注册视图模板覆盖(以保持Joomla更新证明).为此,请在那里创建文件夹/ templates/YOUT_TEMPLATE/html/com_users/registration并复制/components/com_users/views/registration/tmpl/default.php文件.

从现在开始,您可以修改模板文件夹中的注册输出.

>>>修改注册表单输出

默认情况下,Joomla从表单文件/components/com_users/models/forms/registration.xml获取所有字段,并在其中定义它们,并在视图中输出它们.但是如果我们不想使用所有字段,我们需要手动输出字段.我的示例代码仅输出电子邮件和密码字段以进行注册.这是一个示例代码:(default.php文件)

<?php
defined('_JEXEC') or die;
JHtml::_('behavior.keepalive');
?>
<div class="grid_8" id="register_block">
<div class="content_block">
<h1>Registracija</h1>
<div class="login<?php echo $this->pageclass_sfx?>">
<form id="member-registration" action="<?php echo JRoute::_('index.php?option=com_users&task=registration2.register'); ?>" method="post" enctype="multipart/form-data">
<div>
<div class="login-fields">
<label id="jform_email1-lbl" for="jform_email1">E-mail:</label>
<input type="text" name="jform[email1]" id="jform_email1" value="" size="30">
</div>
<div class="login-fields">
<label id="jform_password1-lbl" for="jform_password1">Password:</label>
<input type="password" name="jform[password1]" id="jform_password1" value="" autocomplete="off" size="30">
</div>
<button type="submit" class="button"><?php echo JText::_('JREGISTER');?></button>
<input type="hidden" name="option" value="com_users" />
<input type="hidden" name="task" value="registration2.register" />
<?php echo JHtml::_('form.token');?>
</div>
</form>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)

请注意,我还将registration.register中的任务值替换为registration2.register,我这样做是为了绕过一些使用我自己的控制器的验证规则.

>>>创建控制器覆盖

找到文件/components/com_users/controllers/registration.php并在同一文件夹中创建名为registration2.php的副本.

打开文件registration2.php并将其类名从UsersControllerRegistration更改为UsersControllerRegistration2

从现在开始,Joomla注册表将使用此类创建新用户.

找到一个名为register的方法并找到这一行:

$requestData = JRequest::getVar('jform', array(), 'post', 'array');
Run Code Online (Sandbox Code Playgroud)

这是Joomla获取注册表数据的地方.添加以下行:

$requestData['name'] = $requestData['email1'];
$requestData['username'] = $requestData['email1'];
$requestData['email2'] = $requestData['email1'];
$requestData['password2'] = $requestData['password1'];
Run Code Online (Sandbox Code Playgroud)

它将添加缺少的注册信息,并帮助您通过验证.

注意:这是一个示例代码,用于显示主要逻辑.如果有人有更好的解决方案,我会非常乐意听到它.