文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>moodle架构分析---表现层的设计

moodle架构分析---表现层的设计

时间:2010-04-11  来源:lsstarboy

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, 和各个表单元素和规则的实现文件。


3、针 对导航条的实现,一般是直接调用build_navigation函数即可。使用方法可以看下面一个例子。

$newaccount = get_string('newaccount');

$login      = get_string('login');

if (empty($CFG->langmenu)) {

    $langmenu = '';

} else {

    //获得语言列表

    $currlang = current_language();

    $langs    = get_list_of_languages();

    //生成语言下拉列表

    $langmenu = popup_form ("$CFG->wwwroot/login/signup.php?lang=", $langs, "chooselang", $currlang, "", "", "", true);

}

//定义导航数组

$navlinks = array();

$navlinks[] = array('name' => $login, 'link' => "index.php", 'type' => 'misc');

$navlinks[] = array('name' => $newaccount, 'link' => null, 'type' => 'misc');

// 这里可以添加更多的导航信息,省略

//生成导航

$navigation = build_navigation($navlinks);

这里需要注意的是,build_navigation函数并不直接把生成的html发送到浏览器中,而是作为返回值返回。

4、针 对页面头部的实现,一般是直接调用print_header函数即可,即

print_header($newaccount, $newaccount, $navigation, $mform_signup->focus(), "", true, "<div class=\"langmenu\">$langmenu</div>");

这样,就把生成的头部文件发送到浏览器中了。print_header的实现,会根据系统的主题/皮肤,找到header.html,并进行处理。

ob_start();

include($CFG->header);   //$CFG->header = $CFG->themedir .'/'. $theme .'/header.html';

$output = ob_get_contents();

ob_end_clean();

更加详细请查看lib/weblib.php文件的实现。

5、针 对页面底部的实现,一般是在业务逻辑的代码最后面,直接调用print_footer函数即可,即

print_footer();

print_footer的实现与print_header一样,都是借用php中的页面缓存机制来实现,这样能够在一定程度上提高 系统的反应速度,增强用户体验。具体实现,这里就不再详述。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载