去除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);
但这种方法有一个问题,就是复制粘贴输入的话,会无效。