Moodle插件开发系列——XMLDB编辑器
Moodle插件开发系列——XMLDB编辑器
位置:网站管理>开发> XML编辑器
l XML编辑器是制作install.xml文件的工具,而install.xml是指定Moodle建立数据库表的规范文件。
l 它将表/字段/键/索引等的编辑变得简单,使开发人员能够将时间使用在编码和改进上,而不是与XML文件和手动编辑造成的错误。
l Moodle中,所有install.xml文件均在每个插件的db目录下,该文件通过一些点击和按键就可以编辑(我们建议如此)。那些install.xml将包含所需的所有信息,用于为支持每个RDBMS而生成特定的对象。
l 注:能够很好地处理文件,Web服务器需要对所有db目录的写权限(install.xml文件本身)。如果无法点击或加载或创建链接,这意味着你没有创建/ db目录,或是该目录不可写。
前提:插件已经正常安装,示例插件为simpledatabase,所属插件类型为Block(版块)。
- 快速启动
使用XML编辑器为新插件来创建一个表:
l 插件的db目录,例如blocks/simpledatabase /db,确保网络服务器拥有该目录的写入权限。若没有,参考下图修改权限:
l Moodle中,导航到网站管理->开发-> XMLDB编辑器
l 你现在应该看到/blocks/simpledatabase/db中的XML数据库的位置列表,并且创建按钮应该是可以点击的(蓝色字体)。(如果你看到插件目录,但创建按钮不能点,确保Web服务器具有写权限这个目录!)
l 单击[创建]
这将在/blocks/simpledatabase/db目录下创建一个新install.xml文件。点击[XML]可浏览install.xml内容,参考如下:
内容注释:id为默认表主键,类型int,长度10,以及默认表名为 ‘block_simpledatabase’,而实际数据库中表名问”mdl_block_simpledatabase”(默认表前缀为mdl_,自动添加)。
l 点击[载入]。(这将install.xml文件的内容加载到内存中)
l 单击[编辑]
该页面下可新建表,并对当前表操作。
l 点击表名,即block_simpledatabase
可编辑表字段、键、索引等信息。
l 现在你可以使用XML编辑器,创建和编辑你的插件表。
通过提示可编辑表,每个操作均可查看相应的sql或php代码。
若已修改,页面会提示“已修改,可保存“类似提示,如上图。
演示操作:添加字段
1) 点击“新建字段“
2) 填写新字段信息,然后点击“更改“
这是页面已提示有更改,下方显示新增字段信息,同时[保存]按钮也显示处理,此时点击[保存],才会新字段信息保存早install.xml文件中。
3) 查看install.xml内容
回到XMLDB编辑器列表,打开对应的xml文件,内容如下:
特别注意:保存后,需要卸载掉该插件,重新安装,只有这样,插件数据库表才会创建。
Install.xml其实只是记录插件的数据库表的结构,而不是实际的数据库表的操作。
插件的升级, 需要手动在db目录下创建一个upgrade.php文件。这个upgrade.php文件应该看起来像这样:
<?php
function xmldb_mymodule_upgrade($oldversion) {
global
$CFG;
$result
= TRUE;
// Insert PHP code from XMLDB Editor here
return
$result;
}
?>
为获得“/ /insert PHP code here“代码(即实现数据库表操作的php代码,编辑器会提供),打开XML编辑器、加载相关install.xml文件,并编辑该文件。
选择“查看PHP”选项,
然后选择动作“add field“(添加字段),然后复制并粘贴生成的代码。
比如上述添加flag字段,操作的php代码为下方灰色框中内容,将代码复制到upgrade.php中,而flag字段是要在插件升级过程中添加,需要调整插件的版本号(version.php文件中),要大于旧版本号,同时将代码中XXXXXXXXXX替换为新版本号(建议),以避免未知的错误。
比如旧版本号为2016022400,那么新的版本号可以为2016022401,比旧版本大即可。
在升级过程中,会验证插件表中是否已存在该字段,即:
if
(!$dbman->field_exists($table, $field)) {
$dbman->add_field($table,
$field);
}
注:XMLDB编辑器只是将数据库表结构以xml格式存储,不会更改数据库。而upgrade.php中内容才是实际实现数据库操作的,完成数据库的增删改查等。而相应的php代码可以通过XMLDB编辑器提供。可以参考上述新建字段操作。
此时,由于插件版本号没有变化,升级过程不会执行,需要将插件版本号上调版本号,这样系统才会检测到插件需要升级。
例如:version.php中版本为2015110604,那么需要增加(多少无所谓),变为2015110605,同时将upgrade.php文件中的版本号要与修改后的相同。
- 使用
l XMLDB编辑器比较容易使用。强烈推荐实际操作一段时间,看它是如何工作以及如何修改install.xml文件。
l 这是一个自上而下的组织结构,从加载(或创建)一个新XMLDB文件开始。可以编辑该文件,并且文件基本结构会显示处理。结构中有两种类型的元素:表和语句,并且XMLDB编辑器允许添加、编辑、删除、移动。
l 在编辑表时,你可以看到和轻松地处理表的字段、关键字和索引。请注意,某些字段是不可编辑的,因为它们可能是作为键或索引的一部分在使用。
l 字段可以编辑,指定它们的名称、类型、长度、小数、空、默认等。键和索引与之相同。
l 所有的XMLDB编辑器页面允许您对输入有关项目的修改进行注释(表、索引、关键领域,声明)。使用它,你希望,它可以帮助其他开发人员了解一点的数据库模型。
l 如果要定义一个枚举类型的字段,应该提供一个逗号分隔的列表,每个选项由单引号包围。例如:“选项”,'option2 ','option3”。然而,枚举已在Moodle 2过时,所以要尽量避免。
- 公约(参考)
除了数据库结构的指南,应该遵循一些更为规范的规则:
3.1
关于名称:
a)
所有小写名称(表、索引、键和字段)。
b)
表名和字段名必须只使用A-Z、0-9和_字符。最大28个字符。
c)
XMLDB文件中的键和索引名,必须用“-”(减号)字符连接字段名来形成。
d)
主键必须被命名为“primary”。
e)
强烈建议避免保留名。
3.2
关于空值
a)
避免使用默认值“”(空字符串)来创建所有的字段。
3.3
关于外键
a)
每个XML文件的表之下,你必须定义现有外键(FK)正确。这将允许每个人都知道一个更好的结构,允许发展到一个更好的约束系统,在未来,将提供必要的信息,以创建适当的指标的基础代码。
b)
注意,如果你定义任何字段组合为FK你不会创建任何索引字段,代码会自动地做它!
c)
尊重公约3.1-c)
3.4
关于唯一键
a)
宣布任何领域唯一键(UK),如果他们打算作为一个FK(外键)的目标。创建独特的索引。
b)
尊重公约3.1-c)
- 参阅
l 利用Moodle使用XMLDB编辑器论坛讨论
l 附录B - 从介绍Moodle编程课程的XML编辑器
Moodle插件开发系列——XMLDB编辑器的更多相关文章
- Moodle插件开发——Blocks(版块)
前提: 1) 基于Moodle3.0,要求Moodle版本高于2.0 2) PHP编程基础:语言的了解和开发工具使用 有经验的开发人员和那些只是想程序员的参考文本应参阅附录A. 1. ...
- 【04】emmet系列之编辑器
[01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写 前端开发人员,常用的是s ...
- JQUERY 插件开发——MENU(导航菜单)
JQUERY 插件开发——MENU(导航菜单) 故事背景:由于最近太忙了,已经很久没有写jquery插件开发系列了.但是凭着自己对这方面的爱好,我还是抽了一些时间来过一下插件瘾的.今天的主题是导航菜单 ...
- jQuery 插件开发——countdown(倒计时)
故事背景:按照惯例,先写下故事背景,其实也是再次汇报下最近开发情况的.做电商的都知道,这是个活动季啊,双十一.双十二.元旦....各种啊..其实说这么多就是想表达最近比较忙.呵呵^_^,正好今天抽点空 ...
- 【05】emmet系列之各种缩写
[01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写 各种缩写 缩写:! & ...
- 【03】emmet系列之CSS语法
[01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写 单位: 有几个常用值别 ...
- 【02】emmet系列之HTML语法
[01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写 初始化 :快速编写HTML ...
- 【01】emmet系列之基础介绍
[01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写 相关网址 官网:http: ...
- 解析HTML利器AngleSharp介绍
解析HTML利器AngleSharp介绍 AngleSharp是基于.NET(C#)开发的专门为解析xHTML源码的DLL组件. 项目地址:https://github.com/FlorianRapp ...
随机推荐
- 完全背包问题 :背包dp
题目描述: 有 N种物品和一个容量是 V 的背包,每种物品都有无限件可用.第 i 种物品的体积是 vi,价值是 wi. 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大.输出最 ...
- python读取日志,存入mysql
1.从 http://www.almhuette-raith.at/apache-log/access.log 下载 1万条日志记录,保存为一个文件,读取文件并解析日志,从日志中提取ip, time_ ...
- 【机器学习】多项式回归python实现
[机器学习]多项式回归原理介绍 [机器学习]多项式回归python实现 [机器学习]多项式回归sklearn实现 使用python实现多项式回归,没有使用sklearn等机器学习框架,目的是帮助理解算 ...
- LeetCode 700——二叉搜索树中的搜索
1. 题目 2. 解答 如果根节点为空,直接返回 NULL.如果根节点非空,从根节点开始循环查找,直到节点为空. 如果待查找的值大于当前节点值,节点指向右孩子: 如果待查找的值小于当前节点值,节点指向 ...
- oracle数据库之游标的使用
一.游标概念 为了处理 SQL 语句,ORACLE 必须分配一片叫上下文( context area )的区域来处理所必需的信息,其中包括要处理的行的数目,一个指向语句被分析以后的表示形式的指针以及查 ...
- java—连连看-实现封装
1.封装 Chess.java package Linkup; /** * 棋子封装类 * * @author laixl * */ public class Chess { // 图片的 状态 // ...
- Httpd主配置文件httpd.conf 详解
Apache的主配置文件:/etc/httpd/conf/httpd.conf默认站点主目录:/var/www/html/Apache服务器的配置信息全部存储在主配置文件/etc/httpd/conf ...
- my.conf 修改编码
mysql汉字乱码的原因 mysql默认的编码是Latin1是I-8859-1的别名,但Latin1是不支持汉字的,所以要将其改为UTF-8或GBK 1.关闭mysql服务器,这个很重要. 2.通过m ...
- Jenkins系列-Jenkins插件下载镜像加速
可供选择的jenkins2 插件镜像列表: Jenkins 所有镜像列表: http://mirrors.jenkins-ci.org/status.html比如日本的镜像: http://mirro ...
- textarea怎么解析html代码,从而实现一个可高亮的输入框
效果: 思路: 让一个div浮动在textarea上,样式和位置保持完全一致,textarea负责输入,div负责高亮显示 代码: .vue <template> <div clas ...