我正在使用商务模块创建一个在线商店。我正在修改产品 .install 文件以创建内容类型(正如我被告知这是必需的),并且作为该内容类型的一部分,我需要创建很多字段。该列表将包含大约 50-60 条不同的信息。
理想情况下,我希望将它们存储在一个表中,其中以 ProductID 开头,并包含所有其他信息,但情况似乎并非如此;所有字段都存储在不同的表中。
我注意到,也用于商业的“地址”模块创建了一个字段类型,其中大约有 15 个不同的值,全部存储在同一个框中。这怎么可能?我注意到,例如,如果我将基数设置为 5,它会创建不同的行。我只想要一张包含以下内容的表格:
ID - 值1 - 值2 - 值3 等等
我也不需要任何模块/扩展,因为这一切都需要写入文件中。我也不认为更改为 mongoDB(我认为)是一种选择,那么在这种情况下我的选择是什么?
最佳答案
恐怕这不是 Drupal 字段系统的工作方式,一个字段 == 一个表
(如果您包含每个字段的修订表,那么实际上是 2 个表)。
地址模块使用 hook_field_schema()
为该特定字段定义多个列(查看address.install
,您就会明白我的意思)。
因此,如果您想将所有内容放入一个表中,您只需定义自己的字段类型(请参阅 examples module,特别是 field_example
以获得相关帮助)。
请记住,一旦安装了模块,您在 hook_field_schema()
中定义的列数将是静态的,并且这是您能够增加/减少它的唯一方法带有用于您的自定义模块的 _update
Hook 。
此外,如果您正在攻击 Commerce 模块中包含的文件...停止!:Commerce 仍处于起步阶段,您可能需要尽快更新它。 ..完成后,您的代码更改将消失,并且您的网站很可能会处于不一致的状态。
Drupal 的全部意义在于,所有内容都被 Hook /外包,以便系统的其他部分可以更改它。在 product.install
中,您可以更改的任何内容都可以通过在另一个模块中实现 Drupal Hook 来完成。
如果您不确定,请发布另一个问题,详细说明您想要通过直接编辑 contrib 模块文件来完成的任务,SO 上的 Drupal 专家之一将为您指明正确的方向:-)
编辑
只是说我一直在与 Ubercart 合作使用 Drupal 7 已经有一段时间了,发现它是一个非常非常好的解决方案(许多 Commerce 贡献的模块仍处于 dev/alpha/beta 阶段;对于 Ubercart 贡献的模块来说情况就不那么好了)。也许值得一看。
更多信息
我认为您基本上有两个选择,但无论哪种方式,您都需要创建一个自定义模块( excellent set of instructions here )。
选项 1:创建自定义字段
如果您是 Drupal 编码初学者,我建议这可能是完成您想要的任务的最简单方法,但它仍然不是完全直接的。从上面的 Drupal 示例模块链接中获取 field_example
模块,并查看 .install
文件,特别是 field_example_field_schema()
函数。这定义了该字段的表中的列。然后看看 field_example.module
...几乎每个用 Implements hook_x
注释的函数都是您想要复制到模块中并进行调整的函数以满足您自己的需求。
我认为这会更容易,因为 Drupal 将为您处理表/表单字段的创建 因此您不必搞乱数据库、架构或表单 API。
选项 2:创建自定义模块
此选项涉及实现您自己的表(就像您在评论中建议的那样),其中主键是产品的实体 ID,并且还包含所有自定义列。 (有关此问题的帮助,请参阅 Schema API documentation)。
然后你就可以实现 hook_form_alter()
添加用户输入数据所需的表单字段,然后实现 hook_node_insert()
和 hook_node_update()
将此数据保留到数据库表中。如果不实际编写代码,就很难深入了解更多细节,而且代码量相当大!
希望有所帮助,抱歉我不能说得更具体,但如果不了解情况的所有来龙去脉,这并不容易
关于drupal - 一张表中的字段数据,不多。对于德鲁普 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7661793/