免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lsstarboy

[教育] “在线课程管理”之Claroline使用集 [复制链接]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
发表于 2009-04-17 22:40 |显示全部楼层
九、在Claroline里输入数学公式(转自“课廊中国”)
http://www.claroline.net.cn/clar ... wtopic.php?topic=40

有两种方法可以实现,我这里先只介绍在自己的服务器上实现的方法。以Claroline 1.8.11为例,简单的操作流程:

转至目录“\claroline\inc\lib\mimetex”,我们可以看到几个重要文件

mimetex.exe    (适用于Windows服务器)
mimetex.linux  (适用于Unix服务器)
mimetex.darwin (适用于Mac服务器)

假定我使用的是Windows服务器,则把文件“mimetex.exe”移至服务器的“cgi-bin”目录(假如完整的路径是“www/cgi-bin/”,这个目录对应的地址则是“http://你的网址/cgi-bin/”),并将该文件重命名为“mimetex.cgi”

在目录“\platform\conf”找到文件“claro_main.conf.php”,搜索“$GLOBALS['claro_texRendererUrl']”,并修改如下:

$GLOBALS['claro_texRendererUrl'] = 'http://你的网址/cgi-bin/mimetex.cgi';

  

我本地使用效果示范:

编辑帖子时按照插入图片进行操作,地址为http://你的域名/cgi-bin/mimetex.cgi?x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}

http://你的域名/cgi-bin/mimetex.cgi?\Large f(x)=\int_{-\infty}^x e^{-t^2}dt

abc.jpg

如果是在Claroline 1.9 RC5里,那就很简单了,设置好之后,在编辑器第二排Button上会出现一个代码数学公式的按钮,点击后直接输入:

x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}

f(x)=\int_{-\infty}^x e^{-t^2}dt

就可以产生以上两个公式。
----------------------------------------------------------------------------

lsstarboy补充:

Claroline官方不建议修改这个文件,其实手动修改后再进入“平台管理”,则会得到“配置文件被修改”的错误提示。建议用“平台管理”来设置,方法是:
Claroline > 平台管理 > 本平台的配置 > 系统设置 > 高级设置 > 准确网址(Mathematical renderer URL)。
  
输入“http://你的网址/cgi-bin/mimetex.cgi”就可以了。

[ 本帖最后由 lsstarboy 于 2009-4-17 22:41 编辑 ]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
发表于 2009-04-20 20:09 |显示全部楼层
十、把修改单选练习题默认为4项。

  我们现在的习惯是默认4项选择题,分别是ABCD,但是Claroline只提供了默认的两项,并且文本框太宽。
  可以修改源代码来完修改这个任务:
  exercise/lib/answer_multiplechoice.class.php


  第72行:

 
            // add 2 empty answers as minimum requested number of answers
            $this->addAnswer();
            $this->addAnswer();

再加上两个“            $this->addAnswer();”:
 [quote]            // add 2 empty answers as minimum requested number of answers
            $this->addAnswer();
            $this->addAnswer();
            $this->addAnswer();
            $this->addAnswer();
这样就把默认的两个选项改为四个。

第530行:

                        $html .=
                                '</td>' . "\n"
                    .         '<td valign="top"><textarea rows="7" cols="25" name="answer_'.$i.'">' . htmlspecialchars($answer['answer']) . '</textarea></td>' . "\n"
                    .         '<td><textarea rows="7" cols="25" name="comment_'.$i.'">' . htmlspecialchars($answer['comment']) . '</textarea></td>' . "\n"
                    .         '<td valign="top"><input name="grade_'.$i.'" size="5" value="' . htmlspecialchars($answer['grade']) . '" type="text" /></td>' . "\n"
                    .         '</tr>' . "\n\n";

  其中rows就是文本框的高度,cols就是文本框的宽度,一共有两组,第一组是答案,第二组是解释。对于1024x768的分辨率来说,把rows改为2,对于答案(第一组),把cols改为60也可以,我们一般不用解释栏,所以可以只改rows,而不改cols。
  不过最好把两组的rows改为一样,如果不一样的话,会出现一行大小不相同的情况,影响界面美观。

[ 本帖最后由 lsstarboy 于 2009-4-20 20:13 编辑 ]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
发表于 2009-04-21 23:42 |显示全部楼层
十一、Claroline在上传文件不认中文文件和路径,以及在“课程讲义”里某些字符乱码:
 
  出现这个问题的主要原因在于Claroline开发组没有考虑双字节字符问题,在进行字符过滤时过滤了部分扩展的ASCII码,也就是128-255的部分字符,导致把某些汉字给过滤掉。

  需要改两个函数,在Claroline里,有两个地方定义了“replace_dangerous_char()”,一个在file.lib.php里,一个在html.lib.php里,这两个都需要改动。

  先来看一下函数:
function replace_dangerous_char($string, $strict = 'loose')
    {
        $search[] = ' ';  $replace[] = '_';
        $search[] = '/';  $replace[] = '-';
        $search[] = '\\'; $replace[] = '-';
        $search[] = '"';  $replace[] = '-';
        $search[] = '\'';  $replace[] = '_';
        $search[] = '?';  $replace[] = '-';
        $search[] = '*';  $replace[] = '-';
        $search[] = '>';  $replace[] = '';
        $search[] = '<';  $replace[] = '-';
        $search[] = '|';  $replace[] = '-';
        $search[] = ':';  $replace[] = '-';
        $search[] = '$';  $replace[] = '-';
        $search[] = '(';  $replace[] = '-';
        $search[] = ')';  $replace[] = '-';
        $search[] = '^';  $replace[] = '-';
        $search[] = '[';  $replace[] = '-';
        $search[] = ']';  $replace[] = '-';
        $search[] = '..';  $replace[] = '';
        $search[] = '?;  $replace[] = 'o';
   
   
        foreach($search as $key=>$char )
        {
            $string = str_replace($char, $replace[$key], $string);
        }
        
        // TODO FIXME is this valid in all charsets ???
        if ($strict == 'strict')
        {
            $string = str_replace('-', '_', $string);
            $string = str_replace("'", '', $string);
            $string = strtr($string,
                            '懒旅呐噌忏溴矣哉重蝮趱鲽壬仕栝觌晴掏蜗祉铒仝圮??疡',
                            'AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn');
        }
   
        return $string;
    }


  1、最后面一段,是用在严格的匹配场合,这个很容易就把汉字过滤掉,所以最好还是禁用提它。但是整个1.8.11源码里面,只有两处地方使用strict,一个是上传图片时,一个是wiki中,另一个是work上传作业,所以还可以把那几个strict去掉。
  去掉后的安全性对于汉字来说,应该影响不大。

  2、$search()和$replace最后一行是个冷门的字符,并且$search里还很容易把右边的单引号吃掉。切换到二进制模式下看,前面的字符是B0,也就是十进制的176,对应的字符是“摄氏度”左边的小圆圈;第二个字符是6F,也就是十进制的111,也就是“o"(opqrst的第一个)。
  这样就会把所有的B0换成"o",所以如果你仔细看乱码的部分,总能看到一个“o”的字样。所有字符编码是B0的字都会被吃掉,常见的有:
“氚窗靼劝陌蛋栋钒赴拱喊浒及话岚桨景堪腊莅冒前砂寻野郯拾蜂前税邪习伟园影职装桶涟”等。
  对于汉字来说,必须注释掉最后一个$search()。

  3、由于Claroline的作者用法语,而法语使用扩展的ASCII,所以他们更注意了他们的安全,而没有考虑到多位语言编码的问题。其实对于多位编码来说,扩展的ASCII特殊字符不存在威胁,因为只要它出现,就会被当成一个多字节的字来对待。(此条仅是个人观点!)

[ 本帖最后由 lsstarboy 于 2009-4-25 22:43 编辑 ]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
发表于 2009-04-25 19:37 |显示全部楼层
十二、让“辅导员”有查看课程统计的权限

  我们经常需要让“辅导员”可以查看学生的做题情况,但是Claroline默认只允许“课程管理员”查看。我们正常情况下都是一个人备课,多个人使用,为了保证课程的完整性,最好不要任命多个管理员,而是任命多个“辅导员”,所以有必要为“辅导员”加上“课程统计”的权限。

 1、查看统计主要是修改claroline/tracking里的文件,最主要的特征是:claro_is_course_manager(),这样就严格限制了“课程管理员”才能查看统计。可以把它修改为:claro_is_course_tutor() || claro_is_course_manager(),这样就同时允许了两个组的成员访问“课程统计”。

 2、在tracking里的文件基本上都需要修改。

 3、还需要为每个课程建立一个“课程统计”的链接,默认“辅导员”也是看不到这个链接的,需要在工具栏里加上一个。方法见下帖。
  

[ 本帖最后由 lsstarboy 于 2009-4-25 22:46 编辑 ]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
发表于 2009-04-25 21:53 |显示全部楼层
十三、添加工具栏(左侧栏)

 (一)工具栏(左侧栏)分析

  1、需要三个工具栏的数据表和三个权限表:

    三个工具栏相关的表共同决定哪些工具栏在课程里可见:

    course_tool:这里面是工具栏的名称、类型
    module:相关的链接,启用不启用
    _tool_list:针对每个课程的工具栏设置,可以单独设置显示还是不显示。

   下面这三个权限表组合起来用,共同决定对哪些用户显示工具栏。

   right_action:这里面的记录数正常情况是course_tool记录数的两倍,为每个tool做了两个动作:read和edit。其中有个tool_id,就是对应于course_tool里的id,如查自己添加了工具栏,那么别忘了在这儿添加上对应于profile为4(即课程管理员)的两个动作。
   right_profile:这里面存放的其实就是用户组:匿名、注册用户、课程学员、课程管理员。还有自已定义的用户组,我自定义了“教师”组,用来管理学生。这个表只有profile_id字段和下个表有关系,就是对应于某个课程不同组的权限。
   right_rel_profile_action:这个就是权限表。通过profile字段和right_profile表发生联系;通过action_id字段和right_action表发生联系;通过course_id和course表发生联系,也就针对某个课程的权限。

  2、既然是工具栏,所以在module里的type属性必须是tool,否则不会出现。(这是工具栏和小程序applicate的区别,小程序在页面的某个地方,比如标题栏左边)

  (二)工具栏查询的源代码,可以看出工具栏三个数据表的关系:

 
// find module or claroline existing tools

        $sql = "SELECT DISTINCT ctl.id            AS id,
                      pct.id                      AS tool_id,
                      pct.claro_label             AS label,
                      ctl.script_name             AS external_name,
                      ctl.visibility              AS visibility,
                      IFNULL(pct.icon,'tool.gif') AS icon,
                      ISNULL(ctl.tool_id)         AS external,
                      m.activation ,
                      m.name                      AS name,
                      IFNULL( ctl.script_url ,
                              pct.script_url )    AS url
               FROM `" . $tbl_course_tool_list . "` AS ctl,
                    `" . $tbl_module . "`           AS m,
                    `" . $tbl_tool_list . "`        AS pct

               WHERE pct.id = ctl.tool_id
                 AND pct.claro_label = m.label
                 ". ($active ? " AND m.activation = 'activated' " :"") . "
               ORDER BY external, pct.def_rank, ctl.rank";


    所以如果要添加一个新的工具栏,必须满足那三个相等的条件。

  (三)添加工具栏的步骤

  1、在course_tools里添加好一个工具栏,下面是两个示例:
id         claro_label        script_url icon def_access        def_rank        add_in_course        access_manager
                 1        CLDSC        index.php         info.gif         ALL         1        AUTOMATIC        COURSE_ADMIN
                 2        CLCAL        agenda.php        agenda.gif        ALL         2        AUTOMATIC        COURSE_ADMIN

  第一个字段是ID,可以让数据库自动处理;第二个字段是为工具栏起的名字,注意要唯一,要记住,后面还要用;第三列是工具栏所对应的文件名,注意相对路径是:claroline/module/工具栏名/。如果要链接到claroline的其它目录,最好还是做一个符号连接;然后就是icon,这是图标。

  2、在module里加入对应的名称:
id         label         name            activation         type         script_url
                1         CLDSC         Course description         activated         tool         index.php
                 2         CLCAL         Agenda             activated         tool         agenda.php

  第二个字段的名要和上个表的claro_label对应;name填写一个显示的名称,可以直接用汉字;activation要启用,如果不启用,也要以到系统模块里设置启用。

  3、需要加入课程的tool_list,注意每个课程都需要单独加入:
id         tool_id         rank         visibility         script_url         script_name         addedTool
                 1           1          1             1         NULL         NULL         YES
                 2           2          2              1         NULL         NULL         YES


  这里的第二列对应于第一个表中的id;visibility列是决定显示还是不显示。

  这样就加完了一个工具栏,课程管理员已经可以看到了。

  4、设置三个权限表。
    根据上面的分析,很容易把这个权限表做出来:
    (1)为加入的tool在right_action里做两个action,一个是read,一个是edit。
    (2)进入课程,应该可以看到这个工具栏的。


  5、问题:如果想把内容连接到course文件夹里的一个文件,默认的工具栏是在modules文件夹里,所以要建一个符号链接,这样才能找到文件。

 (四)最有权威的步骤应该参考:
claroline\admin\module\module_list.php的exInstall部分。它引用了:
claroline\inc\lib\module.manage.lib.php,详见:
register_module_tool()函数和install_module()的7个步骤。

[ 本帖最后由 lsstarboy 于 2009-4-26 16:17 编辑 ]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
发表于 2009-04-26 15:45 |显示全部楼层
十五:工具安装磁盘空间计算的Bug:

  在module下做了一个链接后,发现无法再安装新的工具了,总是提示“不能解压文件”。
  下面是安装的步骤:

  1、由claroline\admin\module\module_list.php,200行左右
 
  if( false !== ($modulePath = get_and_unzip_uploaded_package()) )
                }


  2、get_and_unzip_uploaded_package在claroline\inc\lib\module.manage.lib.php里225行,后面调用了fileUpload.lib.php文件的treat_uploaded_file(),而treat_uploaded_file()又调用了同一文件内的enough_size(),再调用dir_total_space():

function dir_total_space($dirPath)
{
    chdir ($dirPath) ;
    $handle  = opendir($dirPath);
    $sumSize = 0;

    while (false !== ($element = readdir($handle) ) )
    {
       if ( $element == '.' || $element == '..')
        {
            continue; // skip the current and parent directories
        }

       if ( is_file($element) )
        {
            $sumSize += filesize($element);
        }

       if ( is_dir($element) )
        {
            $dirList[] = $dirPath.'/'.$element;
        }
    }

    closedir($handle) ;


  可以看出,它把link类型的文件也算了进去,这是不合理的。所以需要在处理“.”和“..”的语句里加上一个is_link():

function dir_total_space($dirPath)
{
    chdir ($dirPath) ;
    $handle  = opendir($dirPath);
    $sumSize = 0;

    while (false !== ($element = readdir($handle) ) )
    {
       if ( $element == '.' || $element == '..' || is_link($element) )
        {
            continue; // skip the current and parent directories
        }

       if ( is_file($element) )
        {
            $sumSize += filesize($element);
        }

       if ( is_dir($element) )
        {
            $dirList[] = $dirPath.'/'.$element;
        }
    }

    closedir($handle) ;

[ 本帖最后由 lsstarboy 于 2009-4-26 15:56 编辑 ]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
发表于 2009-04-27 16:41 |显示全部楼层
十六:在学习路径中,如果中途点击了“全屏”,那么题目会跳到第一个去,并且是未做的状态。

  原因:learnPath\navigation\viewer.php
1、24-27行,修改USE_FRAMES为零,可以把默认的属性改为全屏:
// the following constant defines the default display of the learning path browser
// 0 : display only table of content and content
// 1 : display claroline header and footer and table of content, and content
define ( 'USE_FRAMES' , 0 );


2、本文最后一段,$displayFrames有两个来源,一个是默认的值,也就是上面的那个值,另一个是从网页传递过来的值,也就是用户点了“全屏|在框架中”的链接传递过来的参数。但是这个不论是哪一种值,都重新去显示一个新的startModule.php,而startModule.php里没有判断用户是不是正在进行练习,所以就造成了每次点击“全屏|在框架中”链接的时候,都会从第一题开始。
if( $displayFrames )
{
?>
&nbsp;&nbsp;&nbsp;&nbsp;<frameset border="0" rows="150,*,70" frameborder="no">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<frame src="topModule.php" name="headerFrame" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<frame src="startModule.php" name="mainFrame" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<frame src="bottomModule.php" name="bottomFrame" />
&nbsp;&nbsp;&nbsp;&nbsp;</frameset>
<?php
}
else
{
?>
&nbsp;&nbsp;&nbsp;&nbsp;<frameset cols="*" border="0">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<frame src="startModule.php" name="mainFrame" />
&nbsp;&nbsp;&nbsp;&nbsp;</frameset>
<?php
}

  解决:待定。设想:(1)可以在startModule.php中添加一个用户是不是正在进行练习的判断
           (2)可以把三个frame都显示,但是全屏时把另外两个都隐藏,只剩下一下。这种功能可能需要js的支持。

[ 本帖最后由 lsstarboy 于 2009-5-8 21:48 编辑 ]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
发表于 2009-05-08 22:11 |显示全部楼层
十七、模块说明:manifest.xml
  每一个模块必须有一个说明文件,这是安装文件的依据,其实像“练习”“课程讲义”“学习路径”等,都是一个标准的模块,和普通模块的区别在于它们不在module目录里,而在系统目录里,所以这些模块也不能不删除和禁用的(可以在系统管理的模块管理里面查看)。
  下面是“学习路径”的模块说明,用xml写的,应该很好懂。

<module>
  <label>CLLNP</label>
  <name>Learning path</name>
  <version>1.0</version>
  <license>GPL</license>
  <icon>learnpath.gif</icon>
  <type>tool</type>
  <web>http://www.claroline.net/wiki/CLLNP/</web>
  <entry>learningPathList.php</entry>
  <description>
  <![CDATA[
     This tool is an original tool of claroline.
     It's able to ordering course step.
     Each step can be a text, a document or a qwizz.
     This tool can read ane write SCORM
  ]]>
  </description>

  <author>
     <name>Claro team</name>
     <email>devteam@claroline.net</email>
     <web>http://www.claroline.net/</web>
  </author>

  <requirements>
    <claroline>
      <version>1.8</version>
      <configuration>
      </configuration>
    </claroline>
</requirements>

</module>

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
发表于 2009-05-09 16:26 |显示全部楼层
十八、练习分析

  本来应该和第十六帖放在一起,但内容偏多,所以单开一个帖:

  1、答案存放在哪儿?下面是练习的excerse_submit.php的面页源代码(注:是浏览器看到的html源代码,不是服务器端php的源代码),习题做到第11题:
<!-- 3 -->
<input type="hidden" name="a_3" value="5" />

<!-- 3(end) -->

<!-- 4 -->
<input type="hidden" name="a_4" value="10" />

<!-- 4(end) -->

<!-- 5 -->
<input type="hidden" name="a_5" value="16" />

<!-- 5(end) -->

<!-- 6 -->
<input type="hidden" name="a_6" value="19" />

<!-- 6(end) -->

<!-- 7 -->
<input type="hidden" name="a_7" value="TRUE" />
<!-- 7(end) -->

<!-- 8 -->
<input type="hidden" name="a_8" value="22" />

<!-- 8(end) -->

<!-- 9 -->
<input type="hidden" name="a_9" value="28" />

<!-- 9(end) -->

<!-- 10 -->
<input type="hidden" name="a_10" value="FALSE" />
<!-- 10(end) -->

<!-- 11 -->
<input type="hidden" name="a_11" value="31" />

<!-- 11(end) -->

<!-- 12 -->
<input type="hidden" name="a_12" value="36" />

<!-- 12(end) -->
<tr class="headerX">
<th>习题 11 / 88</th>
</tr>


  可以看出,前面做题的答案,没有直接传到数据库中,而是包含在页面的html源代码中,均用不显示的一个控件来记录。这样有个好处,不用频繁地更新数据库,节省服务器资源,但是直接带来的一个坏处,如果网络不稳定,遇到某一个题打不开的情况,前面所有的努力都要重来。
  其实从系统的追踪成绩数据库也可以看到这一点,在没有点击提交答案之前,数据库(track_e_exe_details)里是没有成绩的。
  习题答案的设置主要是用Question类来完成的,在exercise\lib\question.class.php里定义。

  我认为答案放到SESSION中要比较好一些,这样既可以记录下每次的答案,而且在网络出现问题时还可以从出问题的题目开始,避免了重复劳动。

  2、题目内容放到哪儿?
  题目在SESSION中,只要一点击开始练习,那么每道题都记录到SESSION中,同理,这是为了减少数据库的查询。
下面内容是其中的一道是非题,是第5道:
[4]=>
    string(993) "O:8:"Question":12:{s:2:"id";i:7;s:5:"title";s:105:"一般来说,矢量图像的文件容量比较小,图像在放大或者旋转等操作是不会失真";s:11:"description";s:31:"<!-- content: html tiny_mce -->";s:10:"attachment";s:0:"";s:4:"type";s:2:"TF";s:5:"grade";s:1:"2";s:14:"questionDirSys";s:70:"/usr/local/www/nginx-dist/claroline/courses/ZSF01/exercise/question_7/";s:14:"questionDirWeb";s:45:"/claroline/courses/ZSF01/exercise/question_7/";s:6:"answer";O:15:"answerTrueFalse":10:{s:2:"id";i:1;s:10:"questionId";i:7;s:12:"trueFeedback";s:0:"";s:9:"trueGrade";s:1:"2";s:13:"falseFeedback";s:0:"";s:10:"falseGrade";s:1:"0";s:13:"correctAnswer";s:4:"TRUE";s:8:"response";s:0:"";s:9:"errorList";a:0:{}s:9:"tblAnswer";s:28:"c_ZSF01_qwz_answer_truefalse";}s:17:"tmpQuestionDirSys";s:76:"/usr/local/www/nginx-dist/claroline/courses/ZSF01/exercise/tmp49f648773ae5a/";s:11:"tblQuestion";s:20:"c_ZSF01_qwz_question";s:22:"tblRelExerciseQuestion";s:33:"c_ZSF01_qwz_rel_exercise_question";}"


  3、学习路径的帧分析:

  “学习路径”最主要的是startModule.php帧,如果不是全框架模式中,还有一个头帧,一个尾帧。它本身有两个帧:tableOfContent.php是左侧的学习路径列表;还有一个名为scoFrame帧,就是右侧占80%面积的那个主要操作区域,如果是练习,就是excerse.php,如果是讲义,就是documents.php。

  4、成绩追踪:最主要的是track_e_exe_details,只要是提交了答案,那么无论答案是对是错,也不论你做了几道题,都在这个表中建了对应的记录。比如共有100道题,那么只要提交一次答案,那么这个表中就会多100条记录。
  track_e_access:是记录的是追踪的用户ID和追踪号的关系;track_e_exercices记录了用户所用的时间,开始的时间,用户ID,成绩,还有最重要的一个是“练习序号”。简单解释一下“练习序号”:上面的例子中,提到的track_e_exe_details为每次练习都建立了100条记录,那么不同的用户就有不同的100条记录,怎么样来区分哪个100条记录是A用户,哪个100条记录是B用户的呢?就是根据这个“练习序号”。

[ 本帖最后由 lsstarboy 于 2009-5-9 16:48 编辑 ]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
发表于 2009-05-10 17:05 |显示全部楼层
十九、课程中的注册用户

  乍看上去没什么问题,但是细考虑,就会发现有许多问题:
  (1)用户重复加入时会出现什么情况?
  (2)作为班级加入的时候,和普通的用户自行注册的情况有什么不同吗?
  (3)如果用户自己加入了课程,而班级又要加入时。
  (4)用户在不同的班级,两个班级都加入了同一个课程。
  (5)删除的时候,如果用户加入了很多次,是一次全删除呢?还是保留一定的加入权限?

  其实在用户列表里,有时候要删除很多次才能把一个用户删除掉,有很多人以为这是一个Bug,其实这就是基于上面的问题的考虑。

  先看一下课程的用户数据库:在主数据库中的cours_user:
字段          类型                          整理         
code_cours         varchar(40)         utf8_unicode_ci  //课程代码
user_id            int(11)                 UNSIGNED     //用户id
profile_id           int(11)                         否                      //用户的类别
isCourseManager         tinyint(4)                         否          //是不是该课程的管理员
role                         varchar(60)         utf8_unicode_ci  //角色
team                int(11)                         否                         //没找到用途
tutor                 int(11)                         否                   //是不是“课程”辅导员(还有一个是“组辅导员”,很容易混淆。)
count_user_enrol         int(11)                         否              //用户自行加入的次数
count_class_enrol         int(11)                         否            //因为班级加入的次数

  最后两个字段,就是用户加入的次数。只要加入一次,相应的字段就加1,删除时每次按两种情况分开减1,直到两者之和<=1时才删除。

  添加用户和删除用户的函数可以参看:course_user.lib.php里的function user_remove_from_course()和user_add_to_course()。

  最后再提醒:如果一个班级都加入某个课程,那么整个班级的所有成员都自动进入该课程。

  建议:应该设置一个“班长”或者“班级辅导员”。


[ 本帖最后由 lsstarboy 于 2009-5-10 17:08 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP