# 开发者手册

> 这个文档解释了一些Moodle的设计，以及你如何能够参与开发。

> 目前文档有一些简洁 - 最终将会有更好的文档出现!

> 文档中的章节:

> 1. Moodle 体系结构
> 2. 你如何参与开发
>    - 学习活动
>    - 主题风格
>    - 语言
>    - 数据库模式
>    - 课程格式
>    - 文档和文章
>    - 参与缺陷修正

## 1. Moodle 体系结构

> 从一个系统管理员的角度，Moodle 被设计为遵循以下标准:

> 1. Moodle应该能运行在尽可能广泛的平台上
>    很多系统上运行的web应用程序平台是 PHP和MySQL的结合， 这也是 Moodle 开发所使用的平台(Linux, Windows, 和 Mac OS X)。 Moodle也使用 ADOdb 库作为数据库抽象层， 这意味着 Moodle 能使用 超过10个不同品种的数据库 (不幸的是，它还不能 初始化表格 在所有的这些数据库 - 更多的数据库支持将逐步添加)。
> 2. Moodle 应该是容易安装、学习和修改的
>    最早的 Moodle (1999) 原型使用 Zope 构建 - 一种高级面向对象的web应用服务器。不幸的是我发现即使这项技术非常酷， 但它学习起来很困难而且在系统管理上也不灵活。PHP脚本语言，在另一方面来说，是非常容易入门的 (尤其是当你有其他脚本语言的编程经验时)。 最早我决定不使用以类（class-oriented）为基础的设计，来保持它对于新手而言足够简洁。 代码重用通过使用分类的库文件、清晰命名的函数和一致的脚本文件放置来实现。 PHP也非常容易安装(几乎每个平台都有可用的二进制包)并且大多数的主机托管服务作为标准配置提供广泛的PHP支持。
> 3. 它应该容易的进行版本升级
>    Moodle知道自己目前的版本 (也同样知道所有插件的版本)， 同时一个内置的机制确保 Moodle 能正常的升级自己到新的版本(例如，它能修改数据库表格或添加新的字段)。 如果你使用Unix下的CVS命令，你可以运行"cvs update -d"，然后访问站点的主页来完成升级。
> 4. 它应该是模块化的来允许发展
>    Moodle有一系列的特性是模块化的，包括主题风格，学习活动， 接口语言，数据库模式和课程格式。这允许任何人添加特性到主代码版本或者单独的发行它们。 关于这点详细信息在下面的章节中。
> 5. 它应该能够与其他的系统结合使用
>    Moodle所做的一件事是在单一的目录中存放跟某个课程相关的所有文件。 这允许系统管理员提供给老师文件级别的无缝访问，例如 Appletalk, SMB, NFS, FTP, WebDAV 以及其他类似的。 验证模块允许 Moodle 使用LDAP, IMAP, POP3, NNTP 和其他数据库作为用户信息源。 此外，还有一些工作仍在持续。在Moodle未来的版本中特性包括： 导入和导出 Moodle 数据使用基于XML的格式 (包括 IMS 和 SCORM)； 和增强使用样式表来格式化用户界面(这样它可以在界面上跟其他的Web站点集成)。

## 2. 你可以如何参与

> 如上面提到的，Moodle 有一系列的特性是模块化的。 即使你不是一个程序员，那也有些事情是你能帮上或改变的。

> ### 学习活动

> > 它们是到目前为止最重要的模块，存放在'mod' 目录。 现在有7个缺省的模块: 作业、投票、讨论区、测验、资源、课和调查。 每个模块在一个单独的子目录中并且包括下述强制的元素(加上每个模块额外的脚本):

> > - mod.html: 一个表单用来创建和更新一个此模块的实例
> > - version.php: 定义一些元信息和提供升级代码
> > - icon.gif: 一个 16x16 图标来标示此模块
> > - db/: 所有要求的数据表格和数据的SQL语句转储(为每种数据库提供一个)
> > - index.php: 一个页面显示某个课程中的所有实例
> > - view.php: 一个页面用于显示某个特定的实例
> > - lib.php: 任何/所有此模块定义的函数应该在这里。 如果模块的名字叫做widget，那么需要的函数包括:
> >   - widget_add_instance() - 添加widget实例的代码
> >   - widget_update_instance() - 更新一个已经存在实例的代码
> >   - widget_delete_instance() - 删除一个实例的代码
> >   - widget_user_outline() - 给定一个实例，返回一个用户投稿的摘要信息
> >   - widget_user_complete() - 给定一个实例，打印用户投稿的详细信息
> >   - 为避免可能的冲突，所有的模块函数应该被命名开始包括widget_， 并且你定义的任何常量应该由WIDGET_开始。
> > - 最后，每个模块必须有一些语言文件包含给这个模块使用的字符串。看下面关于语言文件的说明。

> > 开始一个新学习活动模块最简单的方法是使用模版mod/newmodule_template.zip。 解压缩它，并跟随其中README文件的指示。

> > 你或许也希望浏览论坛 Activities modules forum on Using Moodle中的贴子。

> ### 主题风格

> > 主题风格 (或皮肤) 定义了站点的外观。 许多的简单风格在主发布版本中已经提供， 但你或许想创建你自己的主题使用你的颜色，标示，样式和图标。

> > 每个主题在 "theme" 目录的一个子目录下，并包含下列文件:

> > - config.php: 定义整个站点使用的主题风格颜色。
> > - styles.php: 样式表，包含了Moodle元素和标准HTML元素的CSS定义。
> > - header.html: 包含了每个页面的头部。例如，你可以修改这里添加一个logo到页面的顶部。
> > - footer.html: 包含了每个页面用到的页脚信息。

> > 要为当前的Moodle版本创建一个你自己的主题风格:

> > 1. 复制一个已经存在的主题目录到一个新目录，推荐你从一个标准的主题风格开始。
> > 2. 修改 config.php 插入你自己的颜色。
> > 3. 修改 styles.php 插入你自己的CSS定义。
> > 4. 修改 header.html 和 footer.html 来添加新的标示或更改布局。

> > 注意，所有的这些步骤都是可选的 - 你可以从根本上更改你站点的外观通过简单的修改config.php中的颜色。

> > 同时也注意Moodle 升级 可能 会细微的改变风格，所以请仔细检查发布说明如果你使用定制的主题风格。

> > 特别是，Moodle 2.0 将有一个全新的显示子系统，或许基于Moodle输出XML使用XSL的转化。 看起来为此主题风格将会是完全不同的格式，但是好处是可以提供更高程度的定制化 (包括移动页面上的元素)。

> > 更多的关于这个的讨论在Themes forum on Using Moodle。如果你创建了一个不错的主题风格并且你认为其他的人或许需要使用， 请上传你的zip文件到主题风格论坛!

> ### 语言

> > Moodle被设计支持国际化。作为界面一部分的每个'字符串'或'页面'上的文本都从一组语言文件读出。 每种语言作为'lang'目录下的一个子目录。 每个语言目录的结构如下:

> > lang/en - 包含一种语言所有文件的目录(举例来说 英语)

> > - moodle.php - 主界面所用的字符串
> > - assignment.php - 作业模块所用的字符串
> > - choice.php - 投票模块所用的字符串
> > - forum.php - 讨论区模块所用的字符串
> > - quiz.php - 测验模块所用的字符串
> > - resource.php - 资源模块所用的字符串
> > - survey.php - 调查模块所用的字符串
> > - .... 加上任何其他模块所使用的字符串。
> >   从这些文件中调用字符串的函数是 get_string() 或者 print_string() 。 每个字符串都支持变量替换，来支持不用语言中的变量排序。
> >   举例来说 $strdueby = get_string("assignmentdueby", "assignment", userdate($date));
> >   如果一个字符串在指定的语言中不存在，那么将自动使用相应的英语语言文件中的字符串。

> > lang/en/help - 包含全部的帮助文档 (为弹出的上下文相关帮助)

> > > 主帮助文件被放在这里，但是每个模块的帮助页面被放置在每个模块命名的子目录中。

> > > 你可以插入一个帮助按钮到页面上使用helpbutton 函数。

> > > 举例说明 helpbutton("text", "Click here for help about text");

> > > 而为模块提供帮助的范例:

> > > helpbutton("forumtypes", "Forum types", "forum");

> > 注意，你可以在线编辑语言文件，使用Moodle web管理工具，在 "检查缺漏的字串"项目中。 这使得不仅创建新的语言变得容易，对精炼已有的语言也同样有效。 如果你要开始一个新语言，请联系我，Martin Dougiamas。

> > 你也许想把它提交到讨论区 Languages forum on Using Moodle。

> > 如果你正在维护一种语言，我将给你Moodle源代码的CVS写权限， 这样你能直接维护这些文件。

> ### 数据库模式

> > 给定一个包含预定义表格的工作中数据库，有意的使用简单的SQL， Moodle应该能够广泛的工作在不同品牌的数据库系统。

> > 一个已经存在的问题是 自动创建 新表格在一个数据库中， 这就是Moodle尝试做初始化的安装工作。 因为每种数据库都非常不同，现在还没有一种已经存在的跨平台的方案，来支持在每个数据库中自动创建。 使用模式能为每个特定的数据库创建Moodle需要的表格。这些模式文件在lib/db目录和每个模块下的db子目录。

> > 目前，只有MySQL和PostgreSQL通过这种途径完全被支持 (没有人为其他数据库创建模式)。

> > Moodle 1.2 将使用一种数据库无关的XML模式，能使编写模式的工作变得不需要。

> ### 课程格式

> > Moodle目前支持三种不同的课程格式：星期格式，主题格式和社区格式。

> > 代码之间有更多的关联(因此，缺乏"插拔性")，但仍然很容易添加一种新的课程格式。

> > 如果你有关于你需要或想看到的不同课程格式的想法，请联系我，我将绝对尽力将它们添加到未来的版本中。

> ### 文档和文章

> > 如果你感到喜欢编写关于Moodle的教程，文章或学术论文或任何其他东西， 请立即动手!

> > 把它放在网上并且确保你包含了链接到http://moodle.org/。

> ### 参与缺陷修正

> > 最后，我诚挚的邀请你在 http://moodle.org/bugs注册成为 "缺陷报告员" ,从而你可以记录你发现的任何缺陷，或许还可以参与讨论和修复它们。

> > "缺陷" 不仅包含目前Moodle版本的软件缺陷，还包括新的想法， 特性需求甚至是对已有特性的建设性批判。开源之美在于任何人都能从某种途径参与来创建为我们大家享用的更好的产品。 对Moodle这个项目而言，你的投入是非常受欢迎的!

> > > 感谢使用Moodle!
> > > Martin Dougiamas, Lead Developer

Moodle 文档

版本: $Id: developer.html,v 1.1.2.1 2006/04/23 06:51:20 koenr Exp $