-1

让我们考虑一个学习管理系统的课程结构(称之为在线学校)。

我们有这样的事情:

Course 1
    Topic 1
        Sub-Topic 1-1
        sub-Topic 1-2
    Topic 2
        Sub-Topic 2-1
        Sub-Topic 2-2

Course 2
    Topic 1
        Sub-Topic 1-1
        sub-Topic 1-2
    Topic 2
        Sub-Topic 2-1
        Sub-Topic 2-2
    ... 

例如,我们有“数学1”的课程,线性代数”的主题和“线性方程”的子主题

重要的一点是我们可以为这些节点中的每一个分配一些内容和一些测试。

现在 django-mptt 出来了:

1)我需要在导航栏中填充课程树。我想这应该很容易和微不足道。你有什么想法?

2)也许我想同时指向一个测试Sub-Topic 1-1 in Course 1 AND Sub-Topic 2-2 in course 2。它不会破坏树木的理论吗?好吧,我相信它们不是树的一部分。它们只是指向一些节点。你怎么看 ?

提前感谢您的回答..

4

1 回答 1

1

只能回答第2点对不起。

关于理论,您所描述的不是树,而是不再是树的 DAG(有向无环图)。

然而,许多建立在 django-mptt 之上的 CMS 以这种方式解决了这个问题(感谢 django-mptt 能够处理森林而不仅仅是一棵树):

  • 他们会将共享节点(您的案例中的测试)放在单独的树中。
  • 共享节点将在树中的位置,在您的情况下,在子主题 1-​​1 和 2-2 下方,它们添加了某种虚拟节点,其唯一作用是指向另一个节点,该节点包含您的测试案子。

这很像文件系统上的符号链接。

然后你可以在一棵树上做所有事情:

Fall semester 2012
  Course 1
    Topic 1
      sub-topic 1-1
      sub-topic 1-2
    Topic 2
      sub-topic 2-1
      sub-topic 2-2
    Test -------------+
  Course 2            |
    Topic 1           |
      sub-topic 1-1   |
      sub-topic 1-2   |
    Topic 2           |
      sub-topic 2-1   |
      sub-topic 2-2   |
    Test  ------------+
  Tests               |
    Test 1 <----------'
      Part 1
      Part 2

或使用几棵树:

Course 1
  Topic 1
    sub-topic 1-1
    sub-topic 1-2
  Topic 2
    sub-topic 2-1
    sub-topic 2-2
  Test -------------+
                    |
Course 2            |
  Topic 1           |
    sub-topic 1-1   |
    sub-topic 1-2   |
  Topic 2           |
    sub-topic 2-1   |
    sub-topic 2-2   |
  Test  ------------+
                    |
Test 1 <------------'
  Part 1
  Part 2
于 2012-07-07T05:51:24.237 回答