在Drupal 6中为用户保存额外数据的最佳方法

时间:2009-12-12 04:11:20

标签: drupal

我正在开发一个在登录时保存不可见用户数据的站点(例如,另一个站点上的外部ID)。我们将在创建帐户后立即创建/保存此数据。

我可以看到我们使用

保存数据
  1. 内容配置文件模块(已在我们这边使用)
  2. 个人资料模块
  3. 用户表中的数据列
  4. 创建我们自己的表
  5. 我觉得#1可能是最合乎逻辑的地方,但是在模块中创建一个节点似乎并不是一件容易的事。

    #3感觉就像解决这个问题的一种典型方法,但只是在一个捕获领域中拥有一堆序列化数据并不是最好的设计。

    有什么建议吗?

3 个答案:

答案 0 :(得分:5)

IMO,每个选项都有自己的专业和有关,你应该是最后一个人,你应该知道你的项目是什么,项目的关键点是什么,什么是什么?是预期的典型用户模式,可用资源等等......

如果我完全自由选择,我的个人收藏将是选项#4,#1和#5 (等等!#5?是的:见下文!)。我做出选择的指导原则是:

  • 保持清洁
  • 保持简单
  • 使其可扩展

#1 - 内容配置文件模块

这将是 clean 解决方案,因为您可以让开发人员更轻松地维护您的代码,因为对用户的所有更改都会通过同一个渠道,并且更容易追踪问题或添加新功能。

我发现它并不特别 简单 ,因为它要求您与该模块的自定义API进行交互。

至于 可扩展性 ,这取决于内容配置文件模块API的设计程度。诱惑可能是为了您的目的简单地使用所述模块完成的表,绕过API,但这使您有可能在某一天的关键安全更新中,您匆忙整个系统将崩溃,因为架构已经改变......

#4 - 创建自己的表

这将是 clean 解决方案,因为您可以设计您的表(并且您的模块可以完全按照您的需要执行),并且您可以创建自己的API被其他模块使用。另一方面,您将引入另一段代码来改变注册过程,这可能使开发人员更难以跟踪问题并以一致的方式扩展系统。

这将非常 简单 来实现代码。此外,数据库设计也会受益:另外需要考虑的是表格很容易检查和查询。在大多数情况下,为视图创建一个新的处理程序很容易:5个中的4个只使用一个带有视图的原型对象。

当然,这非常容易 扩展 。为一个字段创建模块后,您可以根据需要管理任意数量的字段,主要是将一个字段的代码复制/粘贴到另一个字段(或者如果您去OOP则从同一个祖先继承)。

我知道你已经了解了drupal,但是如果你需要一个如何做到这一点的指针,我在this other answer给出了一些指示。

#5 - 创建自己的表并移植现有的字段

那意味着#4减去了各个模块散布功能的缺点......当然,如果你已经管理了200个字段,那么这不是一个可行的选择,但是如果你很早就进入你的设计,那么你可以考虑一下。

根据我的经验,几乎每个需要系统集成的项目(意思是:为多个系统中的同一用户同步数据)都有用户注册的自定义需求,我发现这个解决方案最符合我的需求有两个原因:< / p>

  1. 我发现我重复使用了很多从项目到项目编写的自定义代码。
  2. 这是将数据与其他系统集成的最灵活方式(在某些情况下,我甚至在同一模块管理的两个自定义表中为用户分割数据:一个包含drupal使用的自定义字段和一个包含“非可见字段”的字段,就像你调用它们一样。我发现它在很多场景中非常方便,因为它很容易检查和操作两个数据系统分开。
  3. HTH!

答案 1 :(得分:1)

如果您已经在使用内容配置文件模块,那么我真的建议继续使用它并将字段附加到它。您在创建帐户时保存数据,同时为用户创建节点并不难。真。

$node = new stdClass();
$node->title = $user->name; // what I'd use, or you can have node auto title handle the title for you.  Up to you!
$node->field_hidden_field[0]['value'] = '$*#$f82hff';
$node->uid = $user->uid;
node_save($node);
鲍勃是你的叔叔!

答案 2 :(得分:0)

我会选择选项3.最终,即使是其他模块也会将数据存储在数据库中以对抗用户。所以你可以自己直接保存它,可能比那些模块更有效。

当然,根据数据的大小,您可以调用是否在users表中添加新列,或者使用用户的id作为外键为数据创建新表。

相关问题