-
Notifications
You must be signed in to change notification settings - Fork 23
Formslib.php
1. abstract class moodleform`
2. class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless`
3. class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless
4. class MoodleQuickForm_Rule_Required extends HTML_QuickForm_Rule
moodleform类的构造函数中创建了mooleQuickForm类的实例,moodleQuickForm是从HTML_QuickForm中继承过来的。 下面自定义一个继承moodleform的类。首先要重写definition()函数,在其中定义将要使用的元素,以及规则。在server端还可以进一步定义一些本地化的输入规则,重写validation()函数,它用来判断用户输入的data以及file是否符合规范。
require_once("$CFG->libdir/formslib.php");
class simplehtml_form extends moodleform {
function definition() {
global $CFG;
$mform =& $this->_form;
$mform->addElement()...
...
}
function validation($data, $files) {
$errors = parent::validation($data, $files);
...
return $errors;
}
}
定义好类之后,创建一个类的实例,即构建一个moodleform。其中setAdvanced()可将指定元素设为高级元素,这样在表单显示页面就会有选项按钮,可选则显示高级,会有更多细致内容展示。display()将表单显示给用户,允许用户填写表单。
<?php
require_once "simplehtml.php";
$form = new simplehtml('frmTest', 'get');
$form->addElement('header', 'MyHeader', 'Testing QuickForm');
$form->addElement('select', 'display', get_string('displaymode', 'choice'), $CHOICE_DISPLAY);
$mform->setAdvanced('display');
...
$form->addRule('MyTextBox', 'Your name is required', 'required');
if ($form->validate()) {
$form->freeze();
}
$form->display();
?>
1.new HTML_QuickForm($formName='', $method='post', $action='', $target='', $attributes=null, $trackSubmit = false)
创建一个HTML_QuickForm类的对象,提交的目的地址action的缺省值是当前PHP文件,提交的类型method缺省值是post,而使用get的好处是用户可以将返回结果页面加入书签。
2. registerElementType($typeName, $include, $className)
自定义一种元素类型,将其加入到$GLOBALS['HTML_QUICKFORM_ELEMENT_TYPES']中。 参数$include表示新类型所在文件的路径。 在/moodle/lib/pear/HTML/QuickForm/可以查看HTML中已有元素类型的源码。
Moodle新定义了一些元素类型,如modgrade,grading,warning,filemanager,filepicker等。 在/moodle/lib/forms/可以查看到新定义的元素类型以及重新定义的旧元素类型源码。
3.createElement($elementType)
新建一个指定类型的表单元素,可以接受不定数量的参数,根据元素类型而定。
4. addElement($element_name, $type, $contents, $attr_collections, $attributes = array())
向表单中添加元素,常用到的有:advcheckbox,button,checkbox,date,file,header,hidden,hierselect,html,image link,password,radio,reset,select,static,submit,text,textarea。
5. addGroup($elements, $name=null, $groupLabel='', $separator=null, $appendName = true)
把几个元素绑定成一组,使用同一个标签,并且会在同一行显示。
6. registerRule($ruleName, $type, $data1, $data2 = null)
_自定义输入规则,将其加入到$GLOBALS['HTML_QuickForm_registered_rules']中。 参数type可选‘regex’,‘function’或‘rule’ 参数$data1根据type分别对应 regular expression,function名称,HTML_QuickForm_Rule classname。 参数$data2可选function所在类的名称,HTML_QuickForm_Rule所在文件路径。 在/moodle/lib/pear/HTML/QuickForm/Rule/可以查看HTML中已有规范的源码。
Moodle中仅更改了一条规范,‘required’。 _registerRule('required', null, 'MoodleQuickForm_Rule_Required', "$CFG->libdir/formslib.php"); _
7.(1)addRule($element, $message, $type, $format=null, $validation='server', $reset = false, $force = false)
制定用户输入数据的格式。默认是在服务器端检验提交的数据是否符合定义的规范,若要在客户端进行检测,将'server'改为‘client’。 常用到的规范有:required,maxlength,rangelength,regex,email,emailorblank,lettersonly,alphanumeric _numeric,nopunctuation,nonzero _
(2)addGroupRule($group, $arg1, $type='', $format=null, $howmany=0, $validation = 'server', $reset = false)
为指定的组设定规范,相当于对组内全部元素都添加此规范。
(3)addFormRule($rule)
设置全局整个表单的规范
8.(1)setDefaults($defaultValues = null, $filter = null)
给元素设置缺省值,该值可由用户修改。
(2)setConstants($constantValues = null, $filter = null)
将元素赋值为常量,不可被用户更改。
(3)setDatasource(&$datasource, $defaultsFilter = null, $constantsFilter = null)
为表单选择数据源对象,若该对象有setDefault,setConstant方法,可以用第二,三个参数为该数据源设置默认值或常量。
9.(1)getElement($element)
返回指向元素的指针
(2)getElementValue($element)
返回元素未经过滤的值,或其默认值,常量值。
(3)exportValue($element)
返回提交的‘clean-up’过的元素值或setValue/setDefault/setConstant中的值。
(4)getSubmitValue($elementName)
返回提交后的经过滤处理的元素值。
(5)getSubmitValues($mergeFiles = false)
返回全部提交的元素值
(6)getElementType($element)
返回元素类型。
10.removeElement($elementName, $removeRules = true)
删除一指定元素,并返回指向它的指针。
11.process($callback,$option = false)
处理用户提交的数据。用第一个参数可以是自定义的数据处理函数,第二个参数用来选择是否处理提交的文件。
12. applyFilter($element, $filter)
指定某函数处理用户输入数据,如使用内建函数trim,可以过滤掉用户提交内容中开始与结尾的空白符,常和addRule(required)配合使用, 由于用户输入空白字符也被认为符合“required”规范。其中第一个参数若设为__ALL__则对所有元素进行过滤处理。
13.(1)validate()
判别一个表单是否有效,调用此函数需要至少一个GET/POST参数,若参数还能满足预先定义好的规范(rules),此时函数返回TRUE,否则FALSE。
(2)validate($value, $options = null)
在MoodleQuickForm_Rule_Required类中,改写了validate函数,该函数在服务器端识别给定的元素是否符合规范,允许用户输入 space或empty tag作为元素值。
(3)getValidationScript($format = null)
在MoodleQuickForm_Rule_Required中,该函数返回在客户端判别给定元素是否为空的javaScript code。
14.freeze($elementList=null)
冻结表单元素。去掉input tag,用户不能再编辑此表单。通过改变元素渲染(render)实现此函数。
15.toHtml ($in_data = null)
返回HTML版本的表单。
Moodle的formslib中新定义的各函数功能及接口 详细文档
1.definition()
该函数在modleform类的构造函数中使用,它用来定义表单中可使用的全部元素,以及表单的输入规范。为validate提供依据。若要删除元素则在 definition_after_data()中处理。
3.addHelpButton($elementname,$identifier,$component)
为元素添加帮助按钮,在$component中寻找由标识符$identifier标识的两个string: get_string($identifier, $component): 文章的标题 _get_string("{$identifier}help", $component):文章的内容
4.disabledIf($elementName, $dependentOn, $condition = 'notchecked', $value='1')
判断条件是否满足决定是否要禁用一组元素或某个元素。
5.setType($elementname, $paramtype)
为元素指定PARAM* types,选择提交的变量如何清除。除了select,radio,checkbox外,其余元素必须指明其类型。_