Moodle在表现层的实现有多种机制,分别针对页面、表单、导航条、页面头部、页面底部等。

  1、针对页面的实现,直接编辑HTML页面,然后在业务逻辑处理完毕之后,include编辑好的html页面即可。这种机制的实现可以看login/index.php和 login/index_form.php页面。

  2、针对表单的实现,一般是创建一个父类为moodleform的类,如

class test_form extends moodleform {//定义表单元素function definition() {//获得表单引用$mform =& $this->_form;//添加header对象$mform->addElement('header', '', get_string('createuserandpass'), '');//添加text对象,$mform->addElement('text', 'username', get_string('username'), 'maxlength="100" size="12"');$mform->setType('username', PARAM_NOTAGS);$mform->addRule('username', get_string('missingusername'), 'required', null, 'server');}//定义过滤function definition_after_data(){}//定义验证逻辑function validation($data, $files) {}}

  然后,业务逻辑层中声明test_form对象,即

$test = new test _form();

  最后调用test_form对象的display方法,即可把表单对象显示出来。

$test ->display();

  表单元素的类型和规则如下:

$GLOBALS['HTML_QUICKFORM_ELEMENT_TYPES'] =array('group'         =>array('HTML/QuickForm/group.php','HTML_QuickForm_group'),'hidden'        =>array('HTML/QuickForm/hidden.php','HTML_QuickForm_hidden'),'reset'         =>array('HTML/QuickForm/reset.php','HTML_QuickForm_reset'),'checkbox'      =>array('HTML/QuickForm/checkbox.php','HTML_QuickForm_checkbox'),'file'          =>array('HTML/QuickForm/file.php','HTML_QuickForm_file'),'image'         =>array('HTML/QuickForm/image.php','HTML_QuickForm_image'),'password'      =>array('HTML/QuickForm/password.php','HTML_QuickForm_password'),'radio'         =>array('HTML/QuickForm/radio.php','HTML_QuickForm_radio'),'button'        =>array('HTML/QuickForm/button.php','HTML_QuickForm_button'),'submit'        =>array('HTML/QuickForm/submit.php','HTML_QuickForm_submit'),'select'       =>array('HTML/QuickForm/select.php','HTML_QuickForm_select'),'hiddenselect' =>array('HTML/QuickForm/hiddenselect.php','HTML_QuickForm_hiddenselect'),'text'          =>array('HTML/QuickForm/text.php','HTML_QuickForm_text'),'textarea'      =>array('HTML/QuickForm/textarea.php','HTML_QuickForm_textarea'),'link'          =>array('HTML/QuickForm/link.php','HTML_QuickForm_link'),'advcheckbox'   =>array('HTML/QuickForm/advcheckbox.php','HTML_QuickForm_advcheckbox'),'date'          =>array('HTML/QuickForm/date.php','HTML_QuickForm_date'),'static'        =>array('HTML/QuickForm/static.php','HTML_QuickForm_static'),'header'        =>array('HTML/QuickForm/header.php', 'HTML_QuickForm_header'),'html'          =>array('HTML/QuickForm/html.php', 'HTML_QuickForm_html'),'hierselect'    =>array('HTML/QuickForm/hierselect.php', 'HTML_QuickForm_hierselect'),'autocomplete' =>array('HTML/QuickForm/autocomplete.php', 'HTML_QuickForm_autocomplete'),'xbutton'       =>array('HTML/QuickForm/xbutton.php','HTML_QuickForm_xbutton'));$GLOBALS['_HTML_QuickForm_registered_rules'] = array('required'      => array('html_quickform_rule_required', 'HTML/QuickForm/Rule/Required.php'),'maxlength'     => array('html_quickform_rule_range',    'HTML/QuickForm/Rule/Range.php'),'minlength'     => array('html_quickform_rule_range',    'HTML/QuickForm/Rule/Range.php'),'rangelength'   => array('html_quickform_rule_range',    'HTML/QuickForm/Rule/Range.php'),'email'         => array('html_quickform_rule_email',    'HTML/QuickForm/Rule/Email.php'),'regex'         => array('html_quickform_rule_regex',    'HTML/QuickForm/Rule/Regex.php'),'lettersonly'   => array('html_quickform_rule_regex',    'HTML/QuickForm/Rule/Regex.php'),'alphanumeric' => array('html_quickform_rule_regex',    'HTML/QuickForm/Rule/Regex.php'),'numeric'       => array('html_quickform_rule_regex',    'HTML/QuickForm/Rule/Regex.php'),'nopunctuation' => array('html_quickform_rule_regex',    'HTML/QuickForm/Rule/Regex.php'),'nonzero'       => array('html_quickform_rule_regex',    'HTML/QuickForm/Rule/Regex.php'),'callback'      => array('html_quickform_rule_callback', 'HTML/QuickForm/Rule/Callback.php'),'compare'       => array('html_quickform_rule_compare', 'HTML/QuickForm/Rule/Compare.php'));

  具体可以查看lib/pear/HTML/QuickForm.php,和各个表单元素和规则的实现文件。

来源:http://www.goodu.info/gc/node/354

moodle架构分析---表现层的设计(一)相关推荐

  1. moodle架构分析---表现层的设计(二)

    3.针对导航条的实现,一般是直接调用build_navigation函数即可.使用方法可以看下面一个例子. $newaccount = get_string('newaccount');$login ...

  2. NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导

    5 决定数据绑定的需求 数据绑定在应用中,提供了一种在用户界面的控件和数据或者逻辑组件建立连接的方式.数据绑定允许你将数据库的数据,或者是其他结构的数据进行显示或者和他们进行交互.数据绑定是绑定目标( ...

  3. 面向对象——三层架构(表现层、业务层、持久层)

    ① 持久层:采用DAO模式,建立实体类和数据库表映射(ORM映射).也就是哪个类对应哪个表,哪个属性对应哪个列.持久层 的目的就是,完成对象数据和关系数据的转换. ② 业务层:采用事务脚本模式.将一个 ...

  4. moodle架构分析---数据连接层的设计

    1.数据连接抽象类ADOConnection Moodle支持Mysql.Oracle.Sql Server等多种数据库.由于不同的数据库操作有所不同,为支持多种数据库,Moodle定义了数据库连接抽 ...

  5. 系统架构师-基础到企业应用架构-表现层

    一.前言 最近也许是由于假期的原因,我发布的文章的速度变慢了,对大家说下抱歉,这个系列的确我很难写,感谢大家对我的支持和关注,的确我在发布后得到大家的支 持和认可,让我有了更多的动力,之前发布的有些内 ...

  6. 领域驱动实践总结(基本理论总结与分析V+架构分析与代码设计+具体应用设计分析)

    目录 领域驱动实践总结一:基本理论总结与分析 一.领域驱动设计两大设计:战略设计和战术设计 (一)战略设计 1.出发角度与目标 2.实现方式:事件风暴与模型确立(用例分析.场景分析和用户旅程分析) 3 ...

  7. SLG手游Java服务器的设计与开发——架构分析

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  8. 三层架构理解(表现层、业务层、持久层)

    三层架构:即表现层.业务层.持久层. 大话一下这三个层. 举例1+1=? 你输入1+1=?的地方就是表现层,业务层把1+1=?拆成"1","+","1 ...

  9. 领域驱动实践总结(基本理论总结与分析+架构分析与代码设计+具体应用设计分析V)

    目录 领域驱动实践总结三:具体应用设计分析 一.应用项目的基本背景 二.针对项目进行领域驱动的战略设计阶段 (一)事件风暴确定产品愿景 (二)事件风暴进行业务场景分析 场景分析一:请假       用 ...

最新文章

  1. 计算机组成原理实验报告名,计算机组成原理的实验报告
  2. 微软确定 Win10 付费才能玩 还能不能愉快玩耍?
  3. CAP 理论、BASE 理论、FLP 理论
  4. Java事件侦听器函数_SWT 计算器 按钮事件监听 获取按钮text值
  5. 如何快速的打造python 版的vim ide
  6. 解读顶会CIKM‘21 Historical Inertia论文
  7. 设计模式:001面向对象设计原则
  8. C 语言实例 - 删除字符串中的特殊字符
  9. W ndows7安装Hp1020,hp1020打印机驱动
  10. 项目——网络对战五子棋(Web-Gobang)
  11. php 获取当前 周,php如何获取当前时间是第几周
  12. 微软掷豪金投资海底数据电缆
  13. java 数组 eqlue_Java源码浅析,Character(3)
  14. 扫雷c语言完整源代码,C语言扫雷源码
  15. Mysql数据库简单回滚操作
  16. wordpress博客添加微博、微信分享等等
  17. cocos2d-x 图片纹理优化 资源加载方案
  18. Linux系统管理及服务配置
  19. ORB_SLAM2中特征提取之图像金字塔尺度不变性理解
  20. 陈天桥和那些散落江湖的盛大“遗珠”丨价值封面人物

热门文章

  1. 合并石子(信息学奥赛一本通-T1274)
  2. 信息学奥赛C++语言:枪声问题
  3. mac微软雅黑字体_“微软雅黑”有坑,小编向你推荐免费的开源字体
  4. Kubesphere V2.1.1安装后开启可拔插组件DevOps(2)
  5. [Unity][FlowCanvas] 预制体中新建的组件无法拖入 GameObject 类型的黑板的解决办法:关闭预制体之后再打开
  6. docker公共存储库_Docker入门(2)——镜像结构和私有镜像库
  7. Xshell安装sql报错:The GPG keys listed for the “MySQL 8.0 Community Server“ repository are already instal
  8. Linux定期执行xshell脚本(入门)
  9. vue 页面不置顶问题(页面内操作、页面跳转后) - 集合篇
  10. vantUI 自定义引入iconfont图标(3种风格)- 案例篇