Drupal 7 如何在Drupal 7中的hook_disable上隐藏自定义用户配置文件字段?

Drupal 7 如何在Drupal 7中的hook_disable上隐藏自定义用户配置文件字段?,drupal-7,drupal-modules,Drupal 7,Drupal Modules,我创建了一个模块,在用户配置文件中添加了一个字段。我使用field\u create\u field和field\u create\u实例来完成这项工作。当我禁用该模块时,我希望该字段不再显示在用户配置文件上,但我不想销毁它。我希望能够启用该模块,并有字段显示和数据仍然存在,因为最初输入。有人能告诉我如何做到这一点吗 以下是我用来创建字段的代码: $field = array( 'field_name' => $field_name, 'type' =&

我创建了一个模块,在用户配置文件中添加了一个字段。我使用field\u create\u field和field\u create\u实例来完成这项工作。当我禁用该模块时,我希望该字段不再显示在用户配置文件上,但我不想销毁它。我希望能够启用该模块,并有字段显示和数据仍然存在,因为最初输入。有人能告诉我如何做到这一点吗

以下是我用来创建字段的代码:

  $field = array(
    'field_name'  => $field_name,
    'type'        => 'text',
    'visibility'  => 1,
    'category'    => 'API',
  );
  $field = field_create_field($field);
  $field_instance = array(
    'field_name'    => $field_name,
    'entity_type'   => 'user',
    'bundle'        => 'user',
    'label'         => t('API Token'),
    'cardinality'   => 1,
    'translatable'  => 0,
    'description'   => t('By using this API token, you agree to the site <a href="/about/site-policies/terms-and-conditions">Terms and Conditions</a> and to acknowledge that your submission does not include protected health information or personal identifiers.'),
    'widget'        => array(
      'type'        => 'text_textfield',
      'weight'      => 10,
    ),
    'formatter'     => array(
      'label'       => t('field formatter label'),
      'format'      => 'text_default'
    ),
    'settings'      => array(
    ),
  );

当您使用drupal实体(如用户、节点等)创建字段时,将自动应用该实体上的crud操作


由于您已使用api创建字段字段,因此在卸载模块时,它会使用实体api自动创建字段,而不是删除字段。

首先告诉我您何时卸载自定义模块,然后从配置文件中删除自定义字段。

。?如果是,那么很难处理您的用例。如果否,则在Drupal的系统表中,您将获得模块的状态,无论是禁用还是启用,如果状态为0,则从用户配置文件的alter hook和hide field使用。我无法完全实现我想要的,但我最终安装了field extra widgets模块,并将字段完全隐藏在编辑表单上。然后,我使用hook menu alter创建了一个本地任务选项卡,并在该选项卡上显示该字段。

感谢您的回复,但我不相信我理解您的答案。你是说我不能隐藏它是因为我创造它的方式吗?如果我以不同的方式创建它,它会自动隐藏吗?记住,我只想在模块被禁用时隐藏它,而不是删除它。我希望它在模块重新启用时重新出现。再次感谢您的帮助。当我禁用模块时,自定义字段不会被删除,但当我卸载模块时,我使用的是字段\删除\实例,因此,是的,它会从配置文件中删除。我将把hook\u form\u alter函数放在哪里?我需要创建另一个模块来保存它吗?我希望我可以在hook_disable上调用一些东西,以某种方式将字段设置为hidden或disabled,直到我在hook_enable上反转它之后才能再次显示它。这样,我的模块就可以处理所有的事情。再次感谢您的帮助。另外,现在更改模块还不算太晚。如果有更好的方法来创建字段,我可以很容易地做到。我刚刚在Drupal7字段API上观看了Drupalize Me视频系列。我要重新开始。完成后,我将在这里发布我的解决方案。