在本节中我们将介绍如何在joomla中对前台输入进行验证。

 在joomla中验证可以在两个地方那个进行,一个是在前台进行,利用js来进行验证。另一个是后台验证,利用php来进行验证。在这里我们先来看看joomla是怎样完成对前台的验证的。

如果要实现验证功能,我们必须知道下面的几个条件:

  1. 1,joomla怎样知道要验证的字段。毕竟有一些字段我们需要验证,比喻说邮箱地址。另外一些字段我们可以不用验证,比喻说,留言内容。那么joomla是依据什么来进行区分的。
  2. 2,对于每一个字段的验证规则是不一样,那么我们应该怎样分别给每一个字段来设定验证规则。

带着这样的两个问题,我们来看一下joomla的前台js验证是怎样实现。

1,引入校验的库

JHtml::('behavior.formvalidation');

2,修改表单的XML文件,指定需要校验的字段。

要让一个字段能够被校验,需要设置两个参数。第一个参数是 我们需要给该filed 增加一个required = true. 

第二个参数我们要在表单的类中增加一个类 。该类的类名为 validate-(改字段的name属性的值)

一个典型的校验如下:

<field
				name="message_subject"
				type="text"
				label="COM_GUESTBOOK_MSG_TITLE_LABEL"
				description="COM_GUESTBOOK_MSG_TITLE_DESC"
				size="40"
				class="inputbox form-control validate-message_subject"
				default="留言主题"
				required="true"
				
			/>

 

3,书写校验的js代码。典型的代码如下:

/**
 *	valedate js for item.xml form
 */
 
 window.addEvent('domready' ,function(){
		document.formvalidator.setHandler('message_subject',function(value){
			//regex=//;
			// return regex.test(value);
			return (value == '111');
		});
 
 });

4,增加提交按钮的js.典型的代码如下:

/**
 * when sumit form this js will be called
 */
 
 Joomla.submitbutton = function (task)
 {
	if( task == '')
	{
		return false;
	}
	else
	{
		var isValid = true;
		//var action = task.split(',');于2014-07-14日改:这里应该是点而不是逗号
                var action=task.split('.');
		if( action[1] != 'cancel' && action[1] != 'close' )
		{
			var forms = $$('form.form-validate');
			for(var i = 0 ; i < forms.length ; i++ )
			{
				if( !document.formvalidator.isValid(forms[i]))
				{
					isValid = false;
					break;
				}
			}
		}
		
		if(isValid)
		{
			Joomla.submitform(task);
		}
		else
		{
			alert(Joomla.JText._('COM_GUESTBOOK_ERROR_UNACCEPTABLE','Some value are unacceptable'));
			return false;
		}
	}
 }

 5,将这两个js加载到页面中。

$document = JFactory::getDocument();
$document->addScript(JURI::root().'components/com_guestbook/models/forms/submitbutton.js');
		JText::script('COM_GUESTBOOK_ERROR_UNACCEPTABLE');

 

完成了这5步,你的网站就有了前台校验的功能了。

 

 于2014-07-14日改:当我在j33上做前台输入验证的是否,发现上面的代码并不如j25上工作那么好。系统老是提示document.formvalidator为NULL.多方查找资料无果,后分析系统自带的文章组件,发现需要在JHtml::_('behavior.formvalidation');前加上JHtml::_('behavior.tabstate');就可以正常工作了。以上结果为实际中总结的情况,至于为什么如此,还不是很理解。

评论 (0)

  • 最新在前
  • 最佳在前