针对复杂关系的Drupal最佳实践

时间:2015-07-07 09:00:23

标签: drupal drupal-7

我正在设计一个 Drupal 7网站,其中节点/网站具有复杂的关系(1-many,many-to-many)。例如:

Student (registered user) can belong to one ore more classes
Student can take one or more exams each semester
Teacher will take a note about each student in his class after each semester

我主要担心的是:

  1. 性能:渲染页面时查询应该快速而简单
  2. 关系:需要有双向关系(=>可以根据内容列出相关内容,反之亦然)
  3. 视图集成:应该是可现场的,并且很容易在Views
  4. 中列出相关内容

    ==>我想出了两个解决方案:

    方法1:Drupal方式 我知道有一些模块,如EntityReference,Field Collection,...但不知道如何使用,以正确的方式混合它们。让我们说一下如何为一个类创建内容类型,它是链接到用户表的字段,然后很容易显示给定类的学生列表?

    ===>问题是:我的案例的最佳做法是什么,我应该使用哪些模块并将它们混合在一起来解决这个问题。我应该创建什么内容类型,它的领域和关系?

    方法2:可能不是Drupal方式

    通常情况下,我会以第3范式(3NF)为这些实体及其关系设计一些表:学生,老师,班级,考试...我的意思是这种方法可能不是对于自定义内容类型的每个字段,使用field_xxx魔术表正常的Drupal方式,对吧?下面是它们的例子:

    Student table ( uid, name, full_name, other meta data columns) , of course the uid is foreign key point to Drupal user table
    Class table (id, name, code_name,...)
    Student_Class junction table (student_id, class_id, semester_id)
    etc,.....
    

    ===>问题是:如果我这样做,是否有任何模块支持自动生成创建CRUD表单,或者API创建表单来操作这些表,很容易允许使用Views模块进行现场编译。

    请纠正我的任何误解,欢迎您的想法。

    由于

1 个答案:

答案 0 :(得分:0)

实体参考,视图,字段集合(我会添加Inline Entity FormViews Bulk OperationsViews Megarow)的Drupal方式在我看来是好的:你将能够使用视图快速创建后台(和前端)屏幕(我的意思是非常),相关内容(使用实体参考)可以双向获取,内联实体表单允许您设置创建包含相关实体创建表单的表单(因此,同时创建实体及其相关实体)。 Drupal Commerce是您可以使用这些模块执行的一个很好的示例(请参阅此entity relationship model)。 Rules可以帮助您设置业务逻辑。所以点1&在我的拙见中,2是(可以)对Drupal方式感到满意。

<强> BUT ...

这种灵活性是以复杂请求为代价的,最终导致性能下降。你会发现有关Drupal如何缓慢的网络帖子,当你开始使用复杂的设置时,它可能是一个严重的问题。但是有了良好的服务器配置(缓存,代理......)并且在视图中没有PHP :),它可以完成(我运行几个Drupal Commerce站点,有一个好的服务器和一个好的系统管理员就可以了)。

你必须深入研究Drupal逻辑,视图逻辑,规则逻辑,这在某些方面令人沮丧:你在几行PHP代码中编写代码会在Drupal界面中带来大量的点击。当然,对于棘手的事情,你总是可以构建一个小型的自定义模块来满足您的需求。

关于第二个解决方案,我没有经验可以分享Drupal和自定义数据模型,但我想你应该考虑应用程序框架(Symfony,Zend,CakePHP ......),如果你想自由地进行数据库设计。

祝你好运