在本节中我们将介绍如何在joomla中对前台输入进行验证。
在joomla中验证可以在两个地方那个进行,一个是在前台进行,利用js来进行验证。另一个是后台验证,利用php来进行验证。在这里我们先来看看joomla是怎样完成对前台的验证的。
如果要实现验证功能,我们必须知道下面的几个条件:
- 1,joomla怎样知道要验证的字段。毕竟有一些字段我们需要验证,比喻说邮箱地址。另外一些字段我们可以不用验证,比喻说,留言内容。那么joomla是依据什么来进行区分的。
- 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)