去除Joomla注册表单的重复验证字段

默认的Joomla注册表单,分别是会员名、用户名、密码、密码确认、邮箱、邮箱确认这些字段。

有的时候,我们会希望把网站注册简化一些,于是就希望去掉密码确认、邮箱确认这些重复验证的字段。

这里,我向大家介绍两种实现方式

一、使用PHP实现

主要的思路就是创建一个新的类控制器,这样就可以使用定制的注册字段和表单形式

首先,我们需要把/components/com_users/controllers/registration.php复制并重命名为registration2.php

接下来我们就开始改造registration2.php

查找代码UsersControllerRegistration,把它替换成UsersControllerRegistration2

查找代码$requestData = JRequest::getVar('jform', array(), 'post', 'array'); 然后 在此代码后面添加

$requestData['name'] = $requestData['email1'];
$requestData['username'] = $requestData['email1'];
$requestData['email2'] = $requestData['email1'];
$requestData['password2'] = $requestData['password1'];

不难看出其实就让重复验证的字段值直接从对应字段值获取

然后,我们就可以做模板定制的工作了

修改文件/templates/YOUT_TEMPLATE/html/com_users/registration/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>


注意(如果你需要按你实际情况定制字段,可以参考文件/components/com_users/models/forms/registration.xml补全字段的参数。)

二、使用JavaScript实现

主要是思路就是获取字段1的值,同步到字段2,省去两次输入的麻烦。

修改文件templates/YOUR_TEMPLATE/html/com_users/registration/default.php

在代码JHtml::_('behavior.formvalidation');后面的位置添加

$doc = JFactory::getDocument();

$js = "
jQuery(document).ready(function($){

// 定义变量
var regForm = $('#member-registration');
var name = regForm.find('#jform_name');
var password = regForm.find('#jform_password1');
var password2 = regForm.find('#jform_password2');
var email = regForm.find('#jform_email1');
var email2 = regForm.find('#jform_email2');

// 隐藏重复验证字段
regForm.find('.spacer').parents('.control-group').hide();
regForm.find('.star').hide();
name.parents('.control-group').hide();
password2.parents('.control-group').hide();
email2.parents('.control-group').hide();

// 为用户名字段添加默认值
name.val('Anonymous');

// 复制邮箱、密码字段的值到确认邮箱、密码字段
email.on('keyup', function() {
email2.val( this.value );
});
password.on('keyup', function() {
password2.val( this.value );
});

});
";
$doc->addScriptDeclaration($js);

但这种方法有一个问题,就是复制粘贴输入的话,会无效。