moodle插件开发国内可参考资料少的可怜,该笔记为完成毕设过程整理,囊括插件目录结构自动化创建工具使用、插件数据库创建工具使用、插件开发调试技巧、插件开发必备php基础知识及moodle平台封装源码解读等。
其中还包括自己开发的插件的一些内容,所以请读者自行判断择需阅读,写这篇博客的目的是将插件的大致开发流分享给大家,让大家尽快上手,具体的知识请到moodle官网阅读英文开发手册。
整理匆忙难免有纰漏,还请各位读者指正,不胜感激。
0、php相关:
参考教程:
http://www.runoob.com/php/php-variables.html
数据类型:http://www.runoob.com/php/php-datatypes.html
变量作用域:http://www.runoob.com/php/php-variables.html
输出方式区别(笔记部分):http://www.runoob.com/php/php-datatypes.html
常量定义使用:http://www.runoob.com/php/php-constants.html
1、插件目录结构:(使用第3点的工具自动构造,不用自己写)
2、教程(插件开发教程,统统浏览一遍)
参考:https://docs.moodle.org/dev/Tutorial
3、自动构造工具:(用于构造插件的目录结构)
参考:https://docs.moodle.org/36/en/Plugin_skeleton_generator#Example
4、xmldb使用(用于设计数据库,建表、字段、外键,会生成install.xml文件)
参考:https://docs.moodle.org/dev/XMLDB_editor
5、公认的bug:对中文兼容性不好,目前官方也没有较好的解决办法。
解决办法:
0、eclipse---选中文件---设置属性---编码设置成UTF-8然后再输入中文字符。(亲测有效)
1、config.php加入
$CFG->unicodecleanfilename = true;
===============================1.9试了下只要改这个就可以了
(lib/editor/htmlarea/coursefiles.php),在第二行加上这样一句:
2、@header("Content-Type: text/html; charset=utf-8");
6、类命名参考:
https://docs.moodle.org/dev/Frankenstyle
7、定义插件功能权限(重点):
文件:access.php
参考:https://docs.moodle.org/dev/Access_API
https://docs.moodle.org/dev/NEWMODULE_Adding_capabilities
角色风险定级参考:
https://docs.moodle.org/dev/Hardening_new_Roles_system
角色原型参考:
https://docs.moodle.org/dev/Role_archetypes
数据库部分:
注册活动:
https://docs.moodle.org/dev/Enrolment_API
8、插件表单页面:
参考:https://docs.moodle.org/dev/Form_API
9、stringAPI
参考:https://docs.moodle.org/dev/String_API
get_string('editingquiz','mod_quiz'),字符串名,插件名。
各种骚操作都有。
10、moodle平台编码调试技巧:(重点)
0、直接naginx\html\mod\codemanagement下用eclipse打开待编辑的文件编辑保存然后刷新网站即可。
1、平台调试:
网站管理----开发----保存更改
2、前端调试:
输出一般值:
echo("<script>console.log('course_modle_id:".$id."')</script>");
echo("<script>console.log('modle_instance_id:".$c."')</script>");
输出数组对象值:
echo("<script>console.log('object_cm:".json_encode($cm)."')</script>");
echo("<script>console.log('object_course:".json_encode($course)."')
这种调试会给页面带来一些渲染问题:
比如截图:
加入调试代码前:
加入调试代码后:
明显输入框大小发生变化,解决办法是开发完了把输出注释干掉。
11、输出渲染器:
参考:https://docs.moodle.org/dev/Output_renderers
12、页面源码:
https://docs.moodle.org/dev/html_writer
13、前端表示层显示:
参考:https://justcoding.iteye.com/blog/1952989
具体可以查看lib/pear/HTML/QuickForm.php,和各个表单元素和规则的实现文件。
更加详细请查看lib/weblib.php文件的实现。
除了要获取页面数据的前端页面用form表单外,其余显示以及连接跳转均用echo 直接输出html表单即可。
14、数据库操作层:
参考官网:https://docs.moodle.org/dev/Data_manipulation_API
参考官网:https://docs.moodle.org/dev/Data_manipulation_API#moodle_database::get_records.28.29
源码参考:
参考博客:https://blog.csdn.net/iteye_5904/article/details/82542849
Moodle在lib/dmllib.php中实现了ORM机制。
15、moodle自身提供的函数,放在lib---moodlelib.php中。