从内容类型中删除字段的最佳方式 -- 7 领域 和 entities 领域 和 hooks 领域 和 updating 领域 drupal 相关 的问题

Best way to drop a field from a content type


21
vote

问题

中文

从通过GUI定义的内容类型中删除Drupal 7字段的最佳方法是什么?我想使用hook_update_n,因此在运行update.php时可以将更改传播到多个服务器。但是,我似乎无法找到解决方案。 db_drop_table()对我来说是有意义的自定义定义模式,但不是通过GUI定义的内容类型/字段。

英文原文

What is the best way to remove a Drupal 7 field from a content type defined via the GUI? I want to use hook_update_N so the changes can be propagated to multiple servers upon running update.php. However I cannot seem to find a solution. db_drop_table() would make sense to me for custom defined schemas, but not for a content type/field defined through the GUI.

           
       
       

回答列表

18
 
vote
vote
最佳答案
 

删除字段有两个API函数:

  • field_delete_field < / a>删除整个字段(字段的所有实例)
  • field_delete_instance < / a>只删除字段的实例 - 这就是它连接到实体的情况。

如果您不想重用该字段,则删除整个字段可能是一个位清洁器,而不是仅在所讨论的内容类型上删除它的实例。只有你可以成为那个法官。

 

There are two api functions to delete fields:

  • field_delete_field To delete the entire field (all instances of of the field)
  • field_delete_instance To delete only an instance of a field - which is how it's attached to an entity.

If you don't want to reuse the field, it might be a bit cleaner to delete the entire field instead of only delete the instance of it on the content type in question. Only you can be the judge of that.

 
 
 
 
9
 
vote

是, field_delete_instance()是删除现场实例的函数。

注意: field_delete_instance() 自动调用 field_delete_field() 如果没有剩下的实例,因此 field_delete_instance() 很可能是您需要的。< / p>

_update_7000_field_delete_instance() 专为核心更新功能而设计。 示例:在更新功能 x_update_7000() 中,您使用的是 field_delete_instance() 。然后在 x_update_7001() 中,以不一致的方式更改 {field_config} 表,并且 field_delete_instance() 显然需要更改。

但现在 x_update_7000() field_delete_field()0 将导致错误,因为表仍处于旧结构。但是,贡献模块的情况是不同的,因为它们应该始终在所有核心更新后执行,因此需要使用最新的核心版本。

但是,这是一种模式,您可能希望为您使用的API函数用于更新功能。

另外,这些_Update函数不会执行钩子,因为结果不是可预测的(例如,因为可能禁用运行更新的模块)。

 

Yes, field_delete_instance() is the function to delete field instances.

Note that field_delete_instance() automatically calls field_delete_field() if there are no remaining instances, so field_delete_instance() is most likely all you'll ever need.

_update_7000_field_delete_instance() is designed for core update functions. Example: in update function x_update_7000(), you are using field_delete_instance(). Then in x_update_7001(), you change the {field_config} table in an inconsistent way and field_delete_instance() obviously needs to be changed as well.

But now x_update_7000()'s call to field_delete_instance() would result in an error because the table is still in the old structure. However, the situation for contributed modules is different, since they should always be executed after all core updates and therefore need to work with the most recent core version.

But, this is a pattern that you might want to use for your own API functions which you are using in update functions.

Additionally, these _update functions do not execute hooks because the outcome is not predictable (for example because the module for which the update is run might be disabled).

 
 

相关问题

4  仅在另一个指定的块不可见时显示块?  ( Display a block only if another specified block isnt visible ) 
问题是我有一个菜单块,其中父项尚未拥有子菜单项,但最终可能。如果菜单块不在特定页面上,我想显示另一个块代替菜单块。我尝试了规则,规则奖金块,上下文,甚至在我的页面模板中的条件,但我是一个php新手,到目前为止,似乎无法根据块的可见性创建一个条件。我希望这是有道理的!任何帮助非常感谢!我使用D7。 ...

5  如何在视图模块中添加过滤条件下的下拉目?  ( How do i add dropdowns in filter criteria in views module ) 
我上周在本地Drupal Group Meetap举行,其中一名成员通过观点模块的呈现。当我看到他能够增加到筛选条件的下拉目时,我真的很兴奋,因为我正在使用的是我正在建造的东西的功能。 是:我无法在我的构建中找到完全的设置。我记得他的筛选条件区域底部有一个"设置" 链接,但我没有那样的东西。 有人可以解释我能找到的吗...

7  服务3和节点参考  ( Services 3 and node reference ) 
我正在使用模块服务3(d7),我正在从Java客户端调用Drupal方法。我可以登录(并在cookie中保持会话),我可以创建一个简单的节点。 但我无法设置节点参考字段。 要找到要做的方法,我首先查看我的Drupal站点中的节点结构(在参考字段): [field_presta_presta_suivi] => ...

9  如何配置带4G内存的服务器运行Drupal 7  ( How to configure a server with 4g of memory to run drupal 7 ) 
我在带有4 GB内存的新服务器上安装Drupal 7。我想在如何正确配置它的情况下,给出一些提示,给mysql提供多少内存,以及给PHP多少内存。我发现的一件事是,在Zend服务器上运行Drupal 7比在正常的Apache服务器上运行它的速度快三倍。 (我认为它与Opcode缓存有关。我注意到Devel模块它使用的...

3  块:Drupal_no_cache无法正常工作  ( Block drupal no cache not working ) 
我有一个块,它显示随机从数据库中获取的项目。该块具有DRUPAL_NO_CACHE作为缓存参数。但是,当访问页面作为匿名用户的缓存时,项目永远不会更改。 一些代码: function foo_block_info() { $blocks = array(); $blocks['foo'] = array...

12  $ node始终可用于page.tpl.php  ( Is node always available in page tpl php ) 
我周期性地收到一个关于$节点的错误在我的一个模板文件中未定义.i有一个简单的如果检查正在显示的节点类型。我假设$节点始终可用,或者我错了? ...

2  如何删除标题下的配置文件,如模块配置文件2中作为块的配置文件  ( How to remove link to profile under title when rendering a profile as block in ) 
我正在使用代码以表单呈现用户客户配置文件: $profile = profile2_load_by_user($account, 'customer'); $form['customer_profile'] = array( '#type' => 'item', '#markup' => rend...

47  如何从URL获取节点ID?  ( How do i get the node id from the url ) 
到目前为止,我在Drupal 7中遇到了这3个功能,但我并不真正确定它们之间的区别是什么,并且更批准以在块预处理函数中获取节点ID。 menu_get_object() menu_get_item() drupal_lookup_path() 你能给我任何洞察力吗? ...

17  将JavaScript文件添加到管理页面  ( Add javascript files to the administrative pages ) 
如何使用模块在每个管理页面中添加JavaScript / CSS文件? ...

4  通过代码将文件附加到节点  ( Attach file to a node by code ) 
我想将文件关联到节点。到目前为止,一切都很好。创建CCK类型文件,问题已解决。但我不能这样做,我不希望用户选择文件。有问题的文件已经在系统中。 我试图将文件放在#default_value字段中,并将其隐藏使用hook_form_form_id_alter,但失败。 function my_module_form...

2  查看与日期范围字段匹配单一日期的参数  ( Views argument to match single date with date range field ) 
我的内容类型有一个具有结束日期的日期字段。因此,示例节点具有日期范围,例如从2011-01-01到2011-01-30。 在我的视图中,我想添加一个参数/上下文过滤器,显示一个涵盖特定日期的任何节点。因此,如果参数值为2011-01-15,则节点显示(它在其范围内)。如果参数值为2011-02-01,则节点不会显示。...

2  我无法更改临时目录  ( I cannot change the temporary directory ) 
我无法在文件设置下更改临时目录。每当我更改它时,它都会说已经进行了更改,但它恢复到以前所拥有的设置。 我甚至删除了数据库中的'dbo.variable.file_temporary_path'值,但它仍然无法正常工作。 您是否知道这是存储的位置? ...

47  如何以编程方式发送电子邮件?  ( How to programmatically send an email ) 
我想使用Drupal的电子邮件系统从我的自定义模块编程发送电子邮件。是可能的吗? ...

5  自定义视图筛选多级分类系统  ( Custom views filter for multi level taxonomy ) 
我正在努力设置两种看法,以显示多级分类。一个人会列出最终节点的术语,另一个将列出有孩子的节点。不知何故,我不能。 我说我真正需要的是过滤标准"内容:有分类术语(带有深度= 1),有孩子" 。有谁知道模块/加载项会添加这样的过滤标准,或者也许知道如何定义当地视图(我仍然太鲜幸地说,如果可能的话)。 谢谢 artur ...

1  日期模块年份提交表单 - 删除下拉菜单  ( Date module year submission form remove drop down menu ) 
我想知道是否有办法改变日期模块中输入的格式。默认情况下,它将设置为下拉。我希望用户通过密钥笔划输入。或者,我可以设置一个整数字段,因为我只需要四位数。 ...

1  创建有机组时如何自动创建Web表单?  ( How can i create a web form automatically when an organic group is created ) 
我想在创建新的有机组节点时自动创建WebForm。 WebForm应该具有预定义的字段,并将电子邮件触发到组管理员或具有预定角色的组中的用户。或者,它可以通过电子邮件在组内容类型上的CCK字段中填写的地址。 我尝试使用og_webform,但无法弄清楚如何让它为每个组创建WebForms。 ...

1  向徽标添加可点击区域  ( Adding a clickable area to the logo ) 
在我的drupal 7.4网站上有默认的bartik主题和没有贡献的模块,我有一个大徽标(715 x 280 px)和没有口号。这些是我的设置: 我正试图弄清楚将赞助的链接添加到矩形橙色区域的最佳方式(使用白色示例文本"Plastikovie Okna !!" )在下面的屏幕截图上: 如果无法倾斜的矩形,...

2  强制模块“合法”在路径/用户/寄存器上显示“form_set_error”  ( Force the module legal to show a form set error on path user register ) 
我正在使用"合法" 模块6.x-8.5。 这是一个很棒的模块,但我认为需要 form_set_error() 消息,以显示尝试注册的用户,如果他忘记单击所需的复选框,则无法应用注册。 我正在寻找能够实现这一工作的可能性。 有人知道模块中是否有解决此功能的位置(如果没有其他解决方案,则硬编码)? 我还尝试用规则表格进行...

1  如何实现字段升级  ( How to implement upgrade for fields ) 
我写了一个模块,定义了自己的节点类型,添加了相应的字段等。如果我想更改,删除或添加字段,我如何编写升级功能? ...

2  template_preprocess_comment()覆盖template.php  ( Template preprocess comment overrides template php ) 
我试图在drupal 7中的template.php中覆盖此函数;我复制了在 template_preprocess_comment() 第一行包含 function themename_preprocess_comment($variables) 。 它包含以下代码,不起作用。 $variables['su...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.