我正在使用商务模块来创建在线商店.我正在修改产品.install文件以创建内容类型(因为我被告知这是必需的)并且作为该内容类型的一部分,我需要创建许多字段.该列表将包含大约50-60种不同的信息.
理想情况下,我想将这些存储在一个表中,其中包含开头的productID和所有其他信息,但似乎并非如此; 所有字段都存储在不同的表中.
我注意到,也用于商业的"地址"模块创建了一个字段类型,它有大约15个不同的值都存储在同一个框中.这怎么可能?我注意到,如果我将基数设置为5,例如,它会创建不同的行.我只想要一张包含以下内容的表:
ID - value1 - value2 - value3等
我也不需要任何模块/扩展,因为这一切都需要写在文件中.我也不认为改为mongoDB(我认为)是一种选择,那么在这种情况下我的选择是什么?
这不是Drupal现场系统的工作方式,我担心,one field == one table(实际上,如果你为每个字段包含修订表,那么实际上有2个表).
地址模块用于为该特定字段hook_field_schema()定义多个列(查看address.install,您将看到我的意思).
因此,如果您想将所有内容放在一个表中,您只需定义自己的字段类型(请参阅示例模块,特别是field_example有关此方面的帮助).
请记住,hook_field_schema()一旦安装了模块,您定义的列数将是静态的,并且您可以增加/减少它的唯一方法是使用_update自定义模块的挂钩.
此外,如果您正在攻击Commerce模块中包含的文件... 停止!:商业仍处于初期阶段,您可能需要尽快更新...一旦完成,您的代码更改将会消失,并且您的网站很可能处于不一致状态.
Drupal的重点是,所有东西都被钩住/养殖,以便系统的其他部分可以改变它.product.install通过在另一个模块中实现Drupal挂钩,无法实现任何改变.
如果您不确定,请通过直接编辑contrib模块文件发布另一个详细说明您要完成的内容的问题,并且SO上的一个Drupal专家会指出您正确的方向:-)
编辑
只是说我已经在Drupal 7中与Ubercart合作已经有一段时间了,并且发现它是一个非常非常好的解决方案(许多商业贡献的模块仍然在dev/alpha/beta中;对于Ubercart贡献的情况则不那么模块).这可能值得一看.
更多信息
我认为你基本上有两种选择,但无论哪种方式,你都需要创建一个自定义模块(这里有一套优秀的指令).
选项1:创建自定义字段
如果你是一个Drupal编码初学者,我建议这可能是你想要的最简单的方法,但它仍然不是完全直截了当.抓住field_example从上面的实施例的Drupal模块链接模块,并具有在查找.install文件,特别是field_example_field_schema()功能.这将定义将在该字段的表中的列.然后看看field_example.module...几乎所有被评论的功能Implements hook_x都是你想要复制到模块中并根据自己的需要进行调整的功能.
我认为这将更容易,因为Drupal将为您处理表/表单字段创建,因此您不必弄乱数据库,模式或表单API.
选项2:创建自定义模块
此选项涉及实现您自己的表(就像您在评论中建议的那样),其中主键是产品的实体ID,并且还包含所有自定义列.(有关此问题的帮助,请参阅Schema API文档).
然后,您将实现hook_form_alter()添加用户输入数据所需的表单字段,然后实现hook_node_insert()并将hook_node_update()此数据持久保存到数据库表中.没有实际编写代码就很难进入任何更多的细节,这是相当多的代码!
希望有所帮助,对不起,我不能再具体了,但如果不了解情况的所有细节,这并不容易
| 归档时间: |
|
| 查看次数: |
2984 次 |
| 最近记录: |