码迷,mamicode.com
首页 > 其他好文 > 详细

Moodle插件开发——Blocks(版块)

时间:2016-05-21 06:41:17      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:

前提:

1)     基于Moodle3.0,要求Moodle版本高于2.0

2)     PHP编程基础:语言的了解和开发工具使用

有经验的开发人员和那些只是想程序员的参考文本应参阅附录A

 

  1. 1.   简述

从无到有,创建一个名为“SimpleHtml”的版块,为了保持一致性,遵循使用小写“simplehtml”。同时新建版块相应文件均在/blocks/simplehtml目录下。每当一个文件的路径在本文档中提到的,它会始终以斜线开始。这是指Moodle的主目录; 所有文件和目录将相对于该目录中提及。

  1. 2.   基础

要创建Moodle的版块,最基本情况下,需要提供4个php文件。注意:当前示例为创建名为“simplehtml”的版块,在实际的开发中,要替换为实际的版块名。4个文件如下图所示:

 技术分享

下面将逐一进行讲解。

2.1    block_simplehtml.php

此文件作为版块的类文件,既用来管理,也包括页面显示。

创建文件后,开始编写代码:

<?php
class block_simplehtml extends block_base {
    public function init() {
        $this->title = get_string(‘simplehtml‘, ‘block_simplehtml‘);
    }
    // The PHP tag and the curly bracket for the class definition
    // will only be closed after there is another function added in the next section.

}

第一行是定义版块类:精确的显示命名,以“block_”作为类前缀,加上版块名,即为类名”block_simplehtml”。默认版块类均继承基类“block_base”。

初始化方法init(),是所有版块必不可少的。目的是初始化类成员变量。

       在这个例子中,我们只需要设置$this->title,即在版块顶部显示的标题,我们可以随意设置。在这种情况下,需要读取真实的标题,从下面提到的语言文件(即2.3),通过get_string()方法。

补充:get_string(‘simplehtml‘, ‘block_simplehtml‘)表示获取版块名为simplehtml的语言索引为‘simplehtml’对应的字符串,即2.3语言文件中的 $string[‘simplehtml‘] = ‘Simple HTML‘;

2.2    db/access.php

此文件包含版块创建的新功能。

自Moodle2.4起,推出了核心功能模块addinstance和myaddinstance。它们被引入控制每个版块的使用。这些功能应该被添加到自定义的版块中。

在这里保持默认即可,将下面的代码覆盖到文件中。

<?php
    $capabilities = array(
 
    ‘block/simplehtml:myaddinstance‘ => array(
        ‘captype‘ => ‘write‘,
        ‘contextlevel‘ => CONTEXT_SYSTEM,
        ‘archetypes‘ => array(
            ‘user‘ => CAP_ALLOW
        ),
 
        ‘clonepermissionsfrom‘ => ‘moodle/my:manageblocks‘
    ),
 
    ‘block/simplehtml:addinstance‘ => array(
        ‘riskbitmask‘ => RISK_SPAM | RISK_XSS,
 
        ‘captype‘ => ‘write‘,
        ‘contextlevel‘ => CONTEXT_BLOCK,
        ‘archetypes‘ => array(
            ‘editingteacher‘ => CAP_ALLOW,
            ‘manager‘ => CAP_ALLOW
        ),
 
        ‘clonepermissionsfrom‘ => ‘moodle/site:manageblocks‘
    ),
);

 

2.3    lang/en/block_simplehtml.php

lang表示是语言包目录,en表示英文,fr表示法语,zh_ch就是中文,即文件下的语言包是支持相应语言的,根据所选语言进行切换。所有版块语言文件均在版块安装目录的/lang子目录下。

<?php
$string[‘pluginname‘] = ‘Simple HTML block‘;
$string[‘simplehtml‘] = ‘Simple HTML‘;
$string[‘simplehtml:addinstance‘] = ‘Add a new simple HTML block‘;
$string[‘simplehtml:myaddinstance‘] = ‘Add a new simple HTML block to the My Moodle page‘;

第一行, $string[‘ pluginname ‘] 即插件名,Moodle 2.0及以上版本需要,在升级页面中显示,以区分其他插件。

 技术分享

第二行,$string[‘simplehtml‘]即版块名,用于区分其他版块。

 技术分享

第三行,$string[‘simplehtml:addinstance‘]表示在Moodle编辑模式下,为Moodle公共页添加版块实例后设置版块权限时,显示的版块选项。

 技术分享

第四行,$string[‘simplehtml:myaddinstance‘] 表示在Moodle编辑模式下,用户为“my“页面添加版块实例后设置权限时,显示的版块选项。

 

2.4    version.php

此文件保存插件的版本信息,以及其他预设参数(这里没有涉及到 - 看version.php如果你想了解更多详细信息)。

版本文件其实非常简单,根据需要,只包含几个字段定义。下面是个例子:

<?php
$plugin->component = ‘block_simplehtml‘;  // Recommended since 2.0.2 (MDL-26035). Required since 3.0 (MDL-48494)
$plugin->version = 2016022400;  // YYYYMMDDHH (year, month, day, 24-hr time)
$plugin->requires = 2014112400; // YYYYMMDDHH (This is the release version for Moodle 2.0)

文件包含组件定义(‘block_’+版块名)、插件版本号,以及可在Moodle上安装和使用插件的最低版本号。

版本号格式为:YYYYMMDDHH,即年月日和24小时制,如2016022400,就表示版本为2016年2月24号00点发布。

注意:这里使用的对象总是$plugin,不用自己创建,也不要修改。文件也没有PHP结束标记(?>)。这个有必要的,以避免文件空白问题。其他文件也是。

至此,版块插件基本文件已经完成,可在Moodle站点中进行插件的添加和查看。.

使用管理员用户登录,并打开编辑模式,在页面中添加我们的版块,见下图。同时打开编辑模式可进行版块的设置等,由于版块没有内容,所以版块不会显示。

 技术分享

  1. 3.   添加功能

3.1    显示版块内容

在2.1版块插件类文件中,加入如下方法,代码为:

public function get_content() {
    if ($this->content !== null) {
      return $this->content;
    }
    $this->content         =  new stdClass;
    $this->content->text   = ‘The content of our SimpleHTML block!‘;
    $this->content->footer = ‘Footer here...‘;
 
    return $this->content;
 
}  

该方法在用户添加版块实例时,自动调用,得到版块的内容。

首先,检查当前版块实例属性$this->content是否为空,若不为空(版块内容已经计算过),则直接返回。

注:由于计算可能是耗时的操作,且在每个版块会多次调用,所以采取以防措施,以节省时间,提高效率。

其次,就是定义内容,$this->content是版块预定义显示的内容,以标准类对象形式存储。

$this->content->text 是版块内容文本,是固定写法。

$this->content->footer 是版块内容页脚,是固定写法。

然后将内容返回。

补充:版块内容不只是text,footer,还有其他类型,如list列表,tree树结构等,有关版块实例属性$this->content,请参阅附录A

 技术分享

3.2    可编辑版块内容 edit_form.php

提供用户可配置版块显示内容的能力, 即实例配置。在页面中,点击进入页面编辑模式,会看到每个版块标题栏均显示编辑(设置)按钮,点击后会进入版块编辑(设置)表单页面。

技术分享

Moodle默认添加到该表单的设置,关于版块的外观和位置,即Moodle会自动为插件配置页面添加额外的一些配置元素等。

技术分享

可通过扩展配置表单,添加自定义的偏好字段,让用户可以更好地调整版块。创建文件/blocks/simplehtml/edit_form.php,并用下面的代码填充它:

<?php
 
class block_simplehtml_edit_form extends block_edit_form {
 
    protected function specific_definition($mform) {
 
        // Section header title according to language file.
        $mform->addElement(‘header‘, ‘configheader‘, get_string(‘blocksettings‘, ‘block‘));
 
        // A sample string variable with a default value.
        $mform->addElement(‘text‘, ‘config_text‘, get_string(‘blockstring‘, ‘block_simplehtml‘));
        $mform->setDefault(‘config_text‘, ‘default content‘);
        $mform->setType(‘config_text‘, PARAM_RAW);       
 
    }
}

第一行,声明了一个继承block_edit_form的类,这让Moodle识别代码在配置页面执行。specific_definition()方法是表单元素被定义的地方。这些元素采用与Moodle表单库相同的标准。在specific_definition()方法中,创建了一个头,和一个输入元素来接收在版块中使用的文本。

此处需要扩展语言文件, 为“blockstring”添加一个值,如下所示:

$string[‘blockstring‘] = ‘ Block Content‘;

因此,一旦我们的实例配置表单被保存,我们就可以在版块中使用输入的文本,像这样:

if (! empty($this->config->text)) {
    $this->content->text = $this->config->text;
}

在版块类文件get_content()方法中加入上述代码:

 技术分享

注意,$this->config可以在所有版块方法中获取的,除了init()方法。这是因为init()方法在版块创建的时候被立刻调用(实现初始化),因此$this->config尚未实例化。

注意复选框:你不能在表单中使用“复选框checkbox”元素(一旦设置将保持设置)。你必须使用advcheckbox代替。

 技术分享

技术分享

技术分享

 

3.3    可编辑版块标题 edit_form.php

让我们添加一个字段/blocks/ simplehtml /edit_form.php。如下:

// A sample string variable with a default value.
    $mform->addElement(‘text‘, ‘config_title‘, get_string(‘blocktitle‘, ‘block_simplehtml‘));
    $mform->setDefault(‘config_title‘, ‘default title‘);
    $mform->setType(‘config_title‘, PARAM_TEXT);

 

这里需要另外一个方法来处理版块标题$this->title,而$this->title是绝对不一样通过$ this->config->title(至少对于Moodle来说),也不能使用init()来处理,需要在2.1文件(/block/simplehtml/block_simplehtml.php)中添加specialization()方法:

public function specialization() {
    if (isset($this->config)) {
        if (empty($this->config->title)) {
            $this->title = get_string(‘defaulttitle‘, ‘block_simplehtml‘);           
        } else {
            $this->title = $this->config->title;
        }
 
        if (empty($this->config->text)) {
            $this->config->text = get_string(‘defaulttext‘, ‘block_simplehtml‘);
        }   
    }
}

此处需要扩展语言文件, 为“blocktitle”添加一个值,如下所示:

$string[‘blocktitle‘] = ‘ Block Title‘;

只要我们版块实例加载和可用,可以保证被Moodle自动调用。这意味着该版块的内容是首次计算,版块什么都没做之前。因此,提供specialization()方法是自然选择,对于需要采取行动,或“尽快”可用的任何配置数据,比如当前情况。

 

3.4    隐藏版块

这里的一个例子是“最近的活动Recent Activity”模块,而事实上没有最近的活动存在。然而,在这种情况下,该模块选择明确通知你缺少活动,这可以说是有用的。如果不需要显示的话,让版块“消失”就会很好。

将get_content()方法的返回值设置为空,就是空字符串(““),包括$this->content->text,和$this->content->footer。Moodle会调用is_empty()方法来检查版块的内容,如果内容为空,就不会显示。

注:事实上版块的标题的值和 hide_header()方法的存在或不存在,不影响此行为。如果一个版块没有内容,就被认为是空的,不论其他。

3.5    支持多个实例

在单个课程中添加多个同类型的版块会非常好。做法比较简单,就是在2.1版块类文件(/block/simplehtml/block_simplehtml.php)添加方法:

public function instance_allow_multiple() {
  return true;
}

       这会告诉Moodle,允许任何课程添加任意数据的SimpleHtml版块实例。

注意:即使版块同意允许多个实例出现在同一页面,管理员有选择禁用此类行为。此设置可分别在每个版块从管理/配置/版块(Administration/Configuration/Blocks)页。

 技术分享

3.6    全局设置

为版块插件添加手动设置选型,比如限制版块内容字符数,或字符类型(如纯文本)等。

现在实现例子,设置版块内容只允许文本,不包括HTML。创建一个新文件/blocks/simplehtml/settings.php,并为每个设置定义表单字段。这在概念上很类似于我们如何生成实例配置形式,但用于生成表单和字段的实际代码有点不同。

将以下内容填充在你的settings.php:

<?php
$settings->add(new admin_setting_heading(
            ‘headerconfig‘,
            get_string(‘headerconfig‘, ‘block_simplehtml‘),
            get_string(‘descconfig‘, ‘block_simplehtml‘)
        ));
 
$settings->add(new admin_setting_configcheckbox(
            ‘simplehtml/Allow_HTML‘,
            get_string(‘labelallowhtml‘, ‘block_simplehtml‘),
            get_string(‘descallowhtml‘, ‘block_simplehtml‘),
            ‘0‘
        ));

如我们所见,为了生成全局配置表单,可以简单地创建管理设置对象,并把设置对象放到数组当中。

$settings变量是固定的,预配置信息要以属性形式放到配置对象中,如admin_setting_configcheckbox,在管理设置中,通过checkbox(复选框)形式来配置信息。‘simplehtml/Allow_HTML‘表示simplehtml版块,Allow_HTML是配置名称,也是存储形式。该配置选项将会存储在全局$CFG对象,以及<pre_fix>_config数据看表中。建议使用版块插件名作为配置前缀,否则会与其他插件变量冲突,则配置全名就是版块名/配置名,如’simplehtml/Allow_HTML’,那么配置数据会出书到‘<pre_fix>_config_simplhtml‘表中,同时在通过get_config()方法获取配置时,也不会发生问题。

每个元素有两个语言标记,第一个标签是元素的标签或主要文本,第二个标签是为它的描述。

另外此处需要扩展语言文件, 为“headerconfig”等分别添加一个值,如下所示:

$string[‘ headerconfig‘] = ‘SimpleHtml Global Config‘;

$string[‘descconfig‘] = ‘Description of ...‘;

$string[‘labelallowhtml‘] = ‘Set allow html‘;

$string[‘descallowhtml‘] = ‘Description allow html...‘;

注:<pre_fix>是在Moodle安装时定义的共有表前缀(默认为mdl_)。

 技术分享

 技术分享

 技术分享

3.6.1 启用全局配置

       自Moodle2.4起,为了启用全局配置,下面的代码必须添加到/blocks/simplehtml/block_simplehtml.php文件中。

      public function has_config() {return true;}

这行代码告诉Moodle该版块有setting.php文件,即启用全局配置。

3.6.2 获取全局配置

第一种,直接保存配置到全局$CFG对象,可这样访问数据:

$allowHTML = $CFG->Allow_HTML;

(推荐)第二种,使用版块名自定义命名空间,保存配置变量,可通过get_config()方法过去。

$allowHTML = get_config(‘simplehtml‘, ‘Allow_HTML‘);

3.6.3 数据保存

       默认实例配置数据保存方法如下:

public function instance_config_save($data) {
  $data = stripslashes_recursive($data);
  $this->config = $data;
  return set_field(‘block_instance‘,
                   ‘configdata‘,
                    base64_encode(serialize($data)),
                   ‘id‘,
                   $this->instance->id);
}

现在需要我们对该方法重写,以达到我们的要求。重写后方法如下:

public function instance_config_save($data) {
  if(get_config(‘simplehtml‘, ‘Allow_HTML‘) == ‘0‘) {
    $data->text = strip_tags($data->text);
  }
 
  // And now forward to the default implementation defined in the parent class
  return parent::instance_config_save($data);
}

 

注:这里存在一个问题,若先允许HTML,并保存带有HTML的内容,然后再限制HTML,版块会继续显示包含HTML的内容。

       而问题的解决办法有两种:

ü  一旦设置不允许HTML,就对版块实例内容进行HTML过滤,而再次允许时,过滤掉的HTML将不回显。

ü  在显示内容前,先验证配置是否允许HTML,再决定是否过滤HTML,这样重复设置允许和不允许时,不会丢失HTML标签。

 技术分享

3.7    隐藏版块标题

在版块类文件(2.1,/blocks/simplehtml/block_simplehtml.php)中,加入如下代码:

public function hide_header() {
  return true;
}

注意:不能仅在init()方法中设置版块的标题为空,在init()方法调用后每个版块有一个唯一的不为空的标题,以至于Moodle可以用标题区分不同已安装的版块。

3.8    自定义版块样式

每一版块将完全被包含在一个<div>或<table>元素中,在包裹元素中将输出所有版块的HTML。我们可以指示Moodle给包裹元素以明确的值添加HTML属性。这就是自由定制CSS样式的结果。

下面的功能将修改版块HTML元素的“class“属性,通过”block_“前缀和版块名。通过主题CSS中类选择器来修改版块的风格,比如".block_simplehtml { border: 1px black solid}"。定义的方法参考如下,默认返回属性名和值得关联数组:

public function html_attributes() {
    $attributes = parent::html_attributes(); // Get default values
    $attributes[‘class‘] .= ‘ block_‘. $this->name(); // Append our class to class attribute
    return $attributes;
}

版块的结果中所有从版块基类继承正常的HTML属性,加上额外的样式名称。现在我们可以使用这个样式名改变版块的风格,通过YUI添加JavaScript事件,等等。最后遵循优雅的设计风格,采用name()方法进行动态匹配版块名,而不是对其硬编码为“block_simplehtml”。

自定义字体颜色:

public function html_attributes() {
    $attributes = parent::html_attributes(); // Get default values
    $attributes[‘class‘] .= ‘ setcolor‘; // Append our class to class attribute
    return $attributes;
}

同时创建样式文件(/blocks/simplehtml/styles.css),添加如下代码:

              .setcolor { color: maroon }

结果参考下:

 技术分享

技术分享

 

3.9    单独授权

为版块选择合适的显示场景(页面)。比如“社会活动”模块,在“社会”课程格式下的课程中是有用的,但在“周”格式下的课程中不行。

       Moodle允许版块在哪些页面格式中是可用的,并强制开发者设置。这些信息通过标准关联数组传递给Moodle,该数组的键是响应页,而值是表示版块是否显示的布尔值(true/false)。

       注意上段中特意使用page页而不是course课程。这是因为在Moodle1.5或更高版本中,版块可以在任何支持它们的页中显示。最好的例子就是课程页,但并不限于它们。比如测试浏览页(点击测试名看见的第一个)也支持版块。

页面格式名(我们可以使用的)是源于脚本名(从这实际被用来于显示该网页的脚本)。例如,当我们正在浏览一个课程,这个脚本是/course/view.php(这在浏览器的地址中很明显)。因此,该页的格式是cource-view。它的规则比较简单,对于一个测验浏览页面格式名是mod-quiz-view。这个经验法则也有一些例外,如下:

1)     对于Moodle首页,格式名为site-index。

2)     课程的格式名其实不只是course-view,还包括course-view-weeks,course-view-topics等等。

3)     即使没有这样的页面,格式名都可以用“all”来捕获所有选项。

我们会尽可能多的包含格式名,在定义使用格式时(applicable formats)。每种格式可以允许或禁止,而且有三个规则可以帮助解决问题,“是否允许版块进入这个页面?”:

1)     格式名的前缀匹配格式名称;例如,mod将匹配所有的活动模块(activity modules.)。当然,course-view将匹配任何课程,无论课程格式。最后,site也将匹配首页(请记住,它的全格式名是site-index)。

2)     格式名越能明确匹配页,优先级越高,在决定是否版块将被允许时。例如,mod,mod-quiz和mod-quiz-view均匹配查看测验浏览页。但是,如果这三个都存在,mod-quiz-view将优先于其他两个,因为这是一个更好的匹配。

3)     字符*可以代替任何字的使用。例如,mod和mod-*是等价的。在这份文件的写作的时候(https://docs.moodle.org/dev/Blocks),有没有实际的理由,利用这种“通配符匹配”功能,但它的存在为将来使用。

4)     格式名的出现顺序是没有任何区别的。

默认地, 在数组中没有写的格式名,或对应的值为false的,均表示相应页面不允许出现版块。

第一个例子,若版块在所有页显示,要使用:

public function applicable_formats() {
  return array(‘all‘ => true);
}

“all”表示匹配所有(上文已提到),版块可以在所有页面显示,比如html版块(/blocks/html);

第二个列子,若版块仅出现在网站首页,要使用:

public function applicable_formats() {
  return array(‘site‘ => true);
}

或将“site”改为“site-index”,这样更贴切。

注解:由于不是匹配所有页,同时“site“页为true,说明网站首页可以显示该版块。

第三个例子,若想要允许版块出现在所有课程中,“social“社会课程除外,也不允许出现在其他地方,要使用:

public function applicable_formats() {
  return array(
           ‘course-view‘ => true,
    ‘course-view-social‘ => false);
}

第四个例子,也是最复杂的例子,假设一个块可以显示在网站的首页,在课程(但不是社会课程),以及浏览的任何活动模块,除了测验。要使用:

public function applicable_formats() {
  return array(
           ‘site-index‘ => true,
          ‘course-view‘ => true,
   ‘course-view-social‘ => false,
                  ‘mod‘ => true,
             ‘mod-quiz‘ => false
  );
}

不难看出,“最佳匹配“策略将决定最终的结果。

3.10  Cron响应

对Moodle全局Cron进程做出响应是可能的;我们可以有一个定期运行,无视用户交互的方法。有两个部分。首先,我们需要给我们的版块类中定义一个新方法:

public function cron() {
    mtrace( "Hey, my cron script is running" );
 
    // do something
 
    return true;
}

注意:如果你没有在cron函数中返回true,在版块表中lastcron字段将不会被更新,因此,每次全局Cron运行时,您的cron函数都会被调用一次!

然后,我们需要为cron功能设置(最小)执行间隔。在Moodle2.0之前,这是通过init()方法保存在版块成员变量$this->cron中。现在在/blocks/simplehtml/ version.php文件中添加额外的一行来实现。打开它,并添加以下内容:

$plugin->cron = 300;

定时间隔使用秒来设置,所以上述最小间隔为5分钟。然而,该函数会按频繁调用,仅在Cron已经被设置运行在Moodle安装程序。所以如果版块被设置在两次运行之间至少5分钟,但Moodle的定时系统仅被设置每24小时运行一次,版块会在两次运行之间等待比我们预期的更长得时间。

请记住,如果我们更改版本文件或版块文件中的任何值,我们一定要将更改版本号,并访问通知页以升级该版块,否则修改将被忽略。

注:版块cron仅被设计调用版块类型的cron脚本。就是说,定时cron不在乎版块的单独实例。在cron方法中$this是被定义的,但它几乎什么都没有(只有标题和内容字段填充)。如果你需要执行cron为单独实例,这是你自己的责任在cron功能中来遍历模它们。比如:

public function cron() {
 
    global $DB; // Global database object
 
    // Get the instances of the block
    $instances = $DB->get_records( ‘block_instances‘, array(‘blockname‘=>‘simplehtml‘) );
 
    // Iterate over the instances
    foreach ($instances as $instance) {
 
        // Recreate block object
        $block = block_instance(‘simplehtml‘, $instance);
 
        // $block is now the equivalent of $this in ‘normal‘ block
        // usage, e.g.
        $someconfigitem = $block->config->item2;
    }
}

提示:这意味着创建一个版块是可能的方式来创建代码(以低开销来响应cron)。没有版块的真实实例是要求的。

  1. 4.   其他类型内容

4.1    列表 lists

这个列表每行显示一项,和旁边一个可选的图像(图标)。一个类似列表版块的例子就是标准的Moodle“admin”模块,这将说明本节所讨论的所有问题。

列表版块以完全相同的方式使用$this->content->footer,却忽略$this->content->text。

get_content()方法被调用时,设置两个属性:$this->content->items和$this->content->icons。$this->content->items和$this->content->icons均为数字索引数组,且数量相同。$this->content->items中每一项应包含要显示在列表中的HTML元素,是指向其他页的链接。$this->content->icons中应是完整的 <img>标签,带有“src”,“height”,“width”和“alt”属性。建议使用标准的16×16图像。

为了告诉Moodle,我们希望有一个列表而不是标准的文本,我们需要做一个小的变化给我们的版块类的声明。相反,扩展类block_base,我们的块将扩展类block_list。 例如:

class block_my_menu extends block_list {
     // The init() method does not need to change at all
}

除了使这种变化,我们当然必须也修改get_content()方法来构造$this->content变量如上面讨论:

public function get_content() {
  if ($this->content !== null) {
    return $this->content;
  }
 
  $this->content         = new stdClass;
  $this->content->items  = array();
  $this->content->icons  = array();
  $this->content->footer = ‘Footer here...‘;
 
  $this->content->items[] = html_writer::tag(‘a‘, ‘Menu Option 1‘, array(‘href‘ => ‘some_file.php‘));
  $this->content->icons[] = html_writer::empty_tag(‘img‘, array(‘src‘ => ‘images/icons/1.gif‘, ‘class‘ => ‘icon‘));
 
  // Add more list items here
 
  return $this->content;
}

总之,如果我们想创建一个列表块,而不是文本块,我们只需要改变版块类声明和get_content()方法。

4.2    树 tree

暂不推荐使用。

  1. 5.   数据库支持

在某些情况下,我们需要有一个数据库表,来保存在版块使用到的一些具体信息,则我们需要创建文件/blocks/simplehtml/install.xml 与它所包含的表架构。

要创建install.xml文件,使用XML数据库编辑器, 或参考XMLDB编辑器文档(Moodle插件开发—XMLDB编辑器.docx)。更多信息请参见常见问题解答数据库> XMLDB

 

 

 

补充(仅供参考):

1) Moodle目录结构

l  /admin:该目录下存放的文件主要Moodle站点管理代码

l  /auth:该目录存放Moodle用户认证的组件模块

l  /availability:活动和部分的访问可用控制模块。

l  /backup:该目录下包含创建备份或恢复时所用到的管理模块

l  /badges:徽章模块

l  /blocks:该目录下存放用户管理Moodle页面上的所有版块的模块

l  /blog:该目录下存放用户管理Moodle中blog管理和编辑内容模块。

l  /cache:缓存模块

l  /calendar:用户管理和显示日历的模块

l  /cohort:替代课程类别注册模块

l  /comment:注释管理模块

l  /completion:课程、活动等完成管理模块

l  /course:课程显示和管理模块

l  /enrol:该目录下存放各种选课插件,默认是manual方式

l  /error:包含显示Moodle站点错误的文件

l  /files:用户管理和显示用户上次文件的模块

l  /filter:用于管理Moodle站点的各类过滤方法的模块,如数字附后等

l  /grade:用户管理和显示学生成绩的模块

l  /group:组管理模块

l  /install:包含Moodle默认安装时使用的各种语言包、安装说明界面等

l  /iplookup:显示用户IP地址信息的模块

l  /lang:包含Moodle默认安装时使用的语言包,默认英文。

l  /lib:存放Moodle所有核心代码库

l  /local:本地定制模块

l  /login:管理用户登录和退出的模块

l  /messge:管理和显示用户短信息的模块

l  /mnet:web service之mnet

l  /mod:包含Moodle中可以使用的各种资源和活动模块

以下模块均可以管理和显示,并是在活动中

ü  --/assignment:作业模块

ü  --/chat:聊天模块

ü  --/choice:投票模块

ü  --/data:数据库模块

ü  --/forum:讨论区模块

ü  --/glossary:词汇表模块

ü  --/hotpot:hotpot模块

ü  --/journal:报告模块

ü  --/label:标签模块

ü  --/lams:管理和显示活动中模块

ü  --/lesson:程序教学模块

ü  --/quiz:测验模块

ü  --/resource:资源模块

ü  --/scorm:SCORM模块

ü  --/survey:问卷调查模块

ü  --/wiki:WIKI模块

ü  --/workshop:车间模块

l  /my:用户个人信息管理模块

l  /notes:注释模块

l  /pix:站点图片模块

l  /plagiarism:防剽窃模块

l  /portfolio:内容发布模块

l  /question:存放活动使用的各种尸体题型和管理模块

l  /rating:登记模块

l  /report:报告模块

l  /repository:第三方库模块

l  /rss:RSS模块

l  /tag:标签模块

l  /theme:存放各种预设的主题风格,可以用来改变Moodle站点外观

l  /user:用户程序模块

l  /userpix:用户头像目录

l  /webservice:Web Service集成目录

l  COPYING.txt:Moodle版权信息

l  Gruntfile.js:Gruntfile项目管理文件

l  README.txt:Moodle自述文件

l  TRADEMARK.txt:Moodle商标许可文件

l  behat.yml.dist:预定义Behat行为驱动文件

l  brokenfile.php:为了防止错误日志出现服务器日志中所使用的空文件。

l  composer.json:Composer依赖管理文件

l  composer.lock:Composer版本锁定文件。

l  config-dist.php:Moodle预定义配置文件,用来手动修改配置。

l  config.php:Moodle站点的配置文件,包含访问地址,数据库信息等

l  draftfile.php:该脚本为当前用户的文件草案提供服务

l  file.php:从数据目录moodledata中提取遗留文件(仅在其等于2时可用)

l  githash.php:git包信息

l  help.php:指向相关帮助文档的程序

l  help_ajax.php:通过Ajax显示帮助文档

l  index.php:Moodle站点默认首页

l  install.php:安装Moodle站点并自动创建config.php文件的程序

l  npm-shrinkwrap.json:依赖管理文件

l  package.json:包文件

l  phpunit.xml.dist:测试用

l  pluginfile.php:代表为单个插件服务的脚本

l  tags.txt:Exuberant ctags生成PHP标签,使用方法

l  version.php:Moodle版本文件

Moodle插件开发——Blocks(版块)

标签:

原文地址:http://www.cnblogs.com/toughlife/p/5513939.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!