在线学习为course扩充字段

之前在edx code(edX google group)上问过如何为course扩充字段(如为课程添加category字段)。

得到的回复说直接往CoueseFields里添加你要的字段就行。位置在common/lib/xmodule/course_module.py.之后该字段会自动显示在Advanced Settings里。我按照这种方法发现字段的确成为course的属性了(在shell里实验)。不过并没有自动显示在Advanced Settings里,不晓得是不是版本问题。

此外还有回复说他是采用org字段来存储课程分类。因为他们是内部使用edx,不需要org。不过这种方式总归不大好。

前两天收到一封邮件,说他也想扩充课程,和我之前需求类似,希望给与帮助。

看来这还是个挺常见的需求。

我就分享下自己的方法好了。也讲下具体流程,而不仅是给出方案,这样小伙伴们下回遇到类似的问题,可以按照类似思路自己解决啦。

需求描述

常见的需求类似这样:给课程添加category字段,用于分类课程,在首页使用。

最初的方案

  • 自己写了个django app加入到lms/djangoapps里。app.models中有course_id字段
  • 自己写个首页
  • 在admin里管理首页的内容

其实就像自己写了个小型内容管理系统,管理的核心对象是course。而我们知道课程的关键标志是course_id。我跟踪注册课程相关的代码,在代码执行路径上加上自定义的create_home_course函数。
在create_home_course函数中将新建的课程注册到我们自己的app.models里,关键是从中获得course_id,这样就能定位到课程。

这种方式的好处是不需侵入CoueseFields



我们今天重点说下面的方案

现在的方案

其实思路也简单。就是跟踪日程&细节里的字段是如何存储并与前端交互的。模仿它就行。

好的,满上咖啡,我们开始。



我选择跟踪这个字段:每周投入课程学习的小时数

使用chrome开发者工具,看到该表单字段的id是 course-effort

edx-platform搜索effort。我们就可以看到所有与effort相关的代码及其所在文件。其实挺推荐使用github来研究代码的,可以参考我的这篇博客

接下来就是依葫芦画瓢的工作了。据此添加我们需要的字段了。我们按照以下文件顺序修改:python>js>html>Sass


0

以下工作均在/edx/app/edxapp/edx-platform/目录里进行

python

vim cms/djangoapps/models/settings/course_details.py

         self.effort = None  # int hours/week
+        self.category = None
         self.course_image_name = ""

         ...

+        temploc = course_key.make_usage_key(‘about‘, ‘category‘)
+        try:
+            course_details.category = modulestore().get_item(temploc).data
+        except ItemNotFoundError:
+            pass
+
+
         temploc = course_key.make_usage_key(‘about‘, ‘video‘)
         try:
             raw_video = modulestore().get_item(temploc).data

         ...

-        for about_type in [‘syllabus‘, ‘overview‘, ‘effort‘, ‘short_description‘]:
+        for about_type in [‘syllabus‘, ‘overview‘, ‘effort‘,‘category‘, ‘short_description‘]:
             cls.update_about_item(course_key, about_type, jsondict[about_type], descriptor, user)

vim cms/templates/settings.html

                        ‘requirements‘, ‘syllabus‘, ‘textbook‘, ‘faq‘, ‘more_info‘,
                        ‘number‘, ‘instructors‘, ‘overview‘,
-                       ‘effort‘, ‘end_date‘, ‘prerequisites‘, ‘ocw_links‘]:
+                       ‘effort‘,‘category‘, ‘end_date‘, ‘prerequisites‘, ‘ocw_links‘]:

js

vim cms/static/js/views/settings/main.js

         this.$el.find(‘#‘ + this.fieldToSelectorMap[‘effort‘]).val(this.model.get(‘effort‘));
+
+        //added by wwj
+        this.$el.find(‘#‘ + this.fieldToSelectorMap[‘category‘]).val(this.model.get(‘category‘));

        ...

         ‘effort‘ : "course-effort",
+        ‘category‘ : "course-category",
         ‘course_image_asset_path‘: ‘course-image-url‘

         ...

         case ‘course-effort‘:
             this.setField(event);
             break;
+        //added by wwj
+        case ‘course-category‘:
+            this.setField(event);
+            break;

vim cms/static/js/models/settings/course_details.js

         effort: null,  // an int or null,
+        category: null,

html

vim cms/templates/settings.html

+          ##added by wwj
+          % if about_page_editable:
+            <hr class="divide" />
+
+            <section class="group-settings requirements">
+              <header>
+                <h2 class="title-2">课程分类</h2>
+                <span class="tip">${_("Expectations of the students taking this course")}</span>
+              </header>
+
+              <ol class="list-input">
+                <li class="field text" id="field-course-category">
+                  <label for="course-category">${_("course category")}</label>
+                  <input type="text" class="short time" id="course-category" placeholder="Math" />
+                  <span class="tip tip-inline">${_("course category")}</span>
+                </li>
+              </ol>
+            </section>
+          % endif
+
       </form>
     </article>
     <aside class="content-supplementary" role="complimentary">

vim lms/templates/courseware/course_about.html

             <li><div class="icon effort"></div><p>${_("Estimated Effort")}</p><span class="start-date">${get_course_about_section(course, "effort")}</span></li>
           % endif

+          % if get_course_about_section(course, "category"):
+            <li><div class="icon category"></div><p>课程分类</p><span class="start-date">${get_course_about_section(course, "category")}</span></li>
+          % endif

Sass

vim cms/static/sass/views/_settings.scss

       #field-course-effort {
         width: flex-grid(3, 9);
       }
+      #field-course-category {
+        width: flex-grid(3, 9);
+      }

扫尾

  • 将以上修改一次性commit到你自己的分支上,尽量不要合并到官方分支里
  • update_assets
sudo -H -u edxapp bash
source /edx/app/edxapp/edxapp_env
cd /edx/app/edxapp/edx-platform
paver update_assets cms --settings=aws

* 重启edxapp: sudo /edx/bin/supervisorctl -c /edx/etc/supervisord.conf restart edxapp:

测试

  • 我们先到cms的日程&细节里,填上课程分类

  • 再到课程的about页面即可看到

时间: 2024-09-30 05:24:40

在线学习为course扩充字段的相关文章

SpringBoot+Vue开发在线学习系统

             SpringBoot+Bootstrap+Vue开发在线学习系统 本课题的主要内容是开发基于Java EE的在线学习平台,使用MVC经典开发模式.Java EE的框架                       SSM(Spring+SpringMVC+Mybatis)等相关技术开发网站系统. 在线演示   在线演示 使用的开发环境是以MyEclipse为开发环境,采用Tomcat服务器作为Web应用容器,并应用MySQL为系统的数据库管理. 在MVC模式中,应用程序被

从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直播程序员写代码> 来介绍它. Livecoding.tv是在2015年2月在美国正式上线的.公司的总部位于旧金山,创办人也是一位程序员. 网上直播已经不是新鲜事了,但正儿八经地直播程序员写代码确实少见.难怪品玩的编辑在他的文章中这样写道:"这么逗的一个东西,你跟我说它是一个教育平台?呃,然而好

2015年,在线学习平台发展之年

2015年到了,大学的小伙伴们也都放假了!是不是很期待快点过年呐?可是从现在到过年还有一个多月的时间哦! 既然有时间了,大家是不是天天睡到自然醒,第二天赖床到10点多才起呐! 在就业形势日益加剧的环境下,只想说学习吧,伙伴!一般情况下简历会有实习经历,证书技能,培训经历,那么寒假就是你丰富简历的好机会哦! 2015年,可以说是在线学习平台的发展之年,CSDN上线了"CSDN学院",现在平台有免费课程和用C币的收费课程(高校俱乐部可以通过编程比赛和活动获取哦,渠道还有很多比如博客,COD

【Ruby on Rails学习二】在线学习资料的整理

由于工作任务重,时间紧,没有太多学习的时间,大致找了些在线学习资料,这里做个整理,希望对同样准备学习的朋友有帮助 在线文档类: Ruby on Rails 实战圣经  使用 Rails 4.2 及 Ruby 2.3(简体中文版) Rails Guides(英文版)                        Rails Guides(简体中文版)                         Ruby on Rails API Ruby 中文社区                       

在线学习Java免费资源推荐

你想学习Java吗?来对地方了!这篇文章将会介绍很多高质量的免费资源,包括网页.论坛.电子书和速查表. Java是一种面向对象的编程语言,拥有独立.多线程.安全.动态和健壮的特点.归功于其多功能的特点,Java已经成为最流行的编程语言之一,可以让你开发出健壮的应用程序. Java几乎是所有商务应用程序的核心.它有多种脚本语言和流行的框架,可以开发客户端和服务端.因此,学习Java不仅仅可以提高你的知识储备,也有利于你在事业上的发展. 这篇文章将介绍各种各样的网络资源(不包含必读的Java书籍),

优质免费在线学习网站【自用】

现在网上已经有很多非常优质的在线学习网站,更让我们感到开心和幸运的是,很多网站竟然是免费的,所以放着这么多好的资源不用,真的是一种浪费. 所以,下面为大家提供几个在线学习网站,为你的学习和职业生涯插上一双腾飞的翅膀. 1. COURSERA Tips www.coursera.org 非常有名的在线学习网站,估计很多人都听说过.不过听说,最近好像收费了.该网站提供了美国,英国,亚洲,欧洲,南美洲,加拿大和南非的主要大学和研究所的付费课程; 如普林斯顿大学,开普敦大学,日内瓦大学,曼彻斯特大学,约

HTML5初学者福利!11个在线学习网站推荐

HTML5初学者福利!11个在线学习网站推荐 HTML5的强大及流行趋势,让更多的人想要系统的对它进行学习.而大多数人获取HTML5知识的重要途径都是网络,不过面对五花八门的搜索结果,是不是觉得摸不着头脑,无法抉择?在这里,文章作者Abhishek Thakur以自己长时间的实践经验,筛选出来11个在线学习HTML5开发的资源网站,让HTML5的学习可以跟随自己的节奏进行,不再那么困难. 学习HTML5的网站和博客 无论学习什么语言,最开始的当然是要从基础学起.如果你是一个对HTML5一无所知的

各大公司广泛使用的在线学习算法FTRL详解

各大公司广泛使用的在线学习算法FTRL详解 现在做在线学习和CTR常常会用到逻辑回归( Logistic Regression),而传统的批量(batch)算法无法有效地处理超大规模的数据集和在线数据流,google先后三年时间(2010年-2013年)从理论研究到实际工程化实现的FTRL(Follow-the-regularized-Leader)算法,在处理诸如逻辑回归之类的带非光滑正则化项(例如1范数,做模型复杂度控制和稀疏化)的凸优化问题上性能非常出色,据闻国内各大互联网公司都第一时间应

[转]在线学习java资料集合

原文链接: fromdev 翻译: ImportNew.com- 赖 信涛译文链接: http://www.importnew.com/11910.html[ 转载请保留原文出处.译者和译文链接.] 本文由 ImportNew - 赖 信涛 翻译自 fromdev.欢迎加入Java小组.转载请参见文章末尾的要求. 你想学习Java吗?来对地方了!这篇文章将会介绍很多高质量的免费资源,包括网页.论坛.电子书和速查表. Java是一种面向对象的编程语言,拥有独立.多线程.安全.动态和健壮的特点.归功