复杂关系的 Drupal 最佳实践

标签 drupal drupal-7

我正在设计一个 Drupal 7 网站,其中节点/实体具有复杂的关系(一对多、多对多)。例如:

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 Integration:应可现场使用并易于在 Views 中列出相关内容

==> 我提出了 2 个解决方案:

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

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

方法 2:可能不是 Drupal 方式

通常,我会为这些实体及其关系设计一些第三范式 ( 3NF ) 的表:学生、教师、类(class)、考试……我的意思是这种方法可能不是 Drupal 方式 与自定义内容类型的每个字段的 field_xxx 魔法表一样正常,对吧?以下是它们的示例:

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 来创建表单来操作这些表,易于允许字段可用带有 View 模块。

如有错误请指正,欢迎提出意见。

谢谢

最佳答案

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

但是...

这种灵 active 是以复杂的请求为代价的,并最终导致性能下降。您会在整个网络上找到有关 Drupal 速度缓慢的帖子,当您开始使用复杂的设置时,这可能是一个严重的问题。但是如果服务器配置良好(缓存、代理...)并且在 Views 中没有 PHP :),这是可以做到的(我运行了几个 Drupal Commerce 站点,有一个好的服务器和一个好的系统管理员没关系)。

而且您将不得不深入研究 Drupal 逻辑、 View 逻辑、规则逻辑,这在某些时候可能会令人沮丧:您用几行 PHP 编写的代码会在 Drupal 界面中点击很多次。当然,对于棘手的事情,您始终可以构建一个小的自定义模块来满足您的需要。

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

祝你好运

关于复杂关系的 Drupal 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31264127/

相关文章:

php - Drupal 分层菜单主题

javascript - 如何删除 Drupal 7 下拉 HTML 选择列表中的禁用选项

javascript - 将 javascript 添加到 drupal 无法识别某些 jquery

javascript - Drupal 7 上 DOM 完成之前加载 JQuery 脚本

Drupal 7 未登录时不显示搜索 block

css - 对 drupal7 页面的不良影响

mysql - 从 Drupal 7 迁移数据

macos - 无法在 OSX Mavericks 上使用 MAMP 安装 drupal 7.24

drupal - 在除一个节点之外的所有节点上启用 tinyMce

Drupal:如何将正在运行的生产网站升级到开发版本?