具有删除字段的工作流问题


14

假设我有一个内容类型Person与字段:NameAgeEmail

此内容类型由一个称为Feature的Feature控制,test因此我可以对其进行源代码控制并将其推送到实时站点。

我的工作流程如下:

  • 我想补充一个新的领域Person被称为Phone
  • 我在本地做: drush fu test -y
  • 我编辑test.info来增加版本号
  • 我将更改提交到我的存储库
  • 我将功能推送到实时站点(复制功能文件)
  • 在实时网站上,我这样做: drush fr test -y
  • 在实时网站上,我这样做: drush cc all

然后,新字段将出现在实时站点的上Person

如果在第一步中我删除了该字段的某个字段,Person则不会从实时站点中删除该字段。我该如何解决?我不想从实时站点上的UI手动删除它。
这个工作流程正确吗?


1
使用drush fu test -y --version-increment自动增加版本号
Mike

Answers:


9

这是一把双刃剑,就像这样可以防止数据删除,这总是一件好事。真的没有什么要解决的,这是预期的行为。

这是我们使用并且已经使用了一年多的相同工作流程,并且效果非常好。我会说这是正确的,但这是一个非常主观的答案。


如果我真的想删除该字段?我应该看看更新挂钩吗?(我是D7新手)。
cherouvim 2012年

3
更新挂钩将是理想的选择,或者手动将其删除。
数字化

2
好吧,我也可以drush field-delete field
cherouvim 2012年

@cherouvim因此,每次重新创建功能时都必须这样做吗?
AlxVallejo 2014年

功能的.install文件中的hook_update_N()将起作用。
Mike

10

删除功能创建的内容的正确方法是通过hook_update_N(应在file中实现your_module.install)。


功能的主要思想是使用代码管理配置。使用hook_update_N与之一致,因为字段删除是在代码中进行的(可以通过版本控制进行管理),而等效命令drush field-delete field不是从托管代码中调用的;这是您需要执行(并记住要执行)的单独命令行步骤。


为什么?会不会drush field-delete field正常工作?
cherouvim 2012年

5
当然可以,并且可能是一个更简单的解决方案。但是功能的主要思想是使用代码管理配置。使用hook_update()与之一致,因为字段删除是在代码中进行的(可以通过版本控制进行管理),而drush命令不是从托管代码中调用的;这是您需要执行(并记住要执行)的单独命令行步骤。
smokris 2012年

我将在哪个功能文件中使用hook_update()?hook_update()将节点对象作为参数,因此在启用功能时无法为其提供节点对象。
subhojit777

@ subhojit777:糟糕,我链接到错误的挂钩文档页面。我刚刚修复了链接;请参阅的文档hook_update_N
smokris 2012年

@smokris :)我在回答中提到了这个问题
subhojit777


0

如果field_phone在其他区域使用,则可能只想将其从“个人”内容类型中删除,而不希望将其从网站中完全删除。YOUR_FEATURE_NAME.install在功能的文件夹中手动创建文件,如下所示:

/**
 * Implements hook_update_N().
 *
 * Removes field_phone from Person content type.
 */
function YOUR_FEATURE_NAME_update_7001() {
  if ($instance = field_info_instance('node', 'field_phone', 'person')) {
    field_delete_instance($instance);
  }
  field_purge_batch(500);
  features_revert_module('YOUR_FEATURE_NAME');
}

如果要从“人”段落而不是“人内容类型”中删除它,则可以将第一个条件语句更改为以下形式:

if ($instance = field_info_instance('paragraphs_item', 'field_phone', 'person')) {
  ...
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.