如何以编程方式更新列表字段的允许值?


10

我在Drupal 7中为Profile2帐户创建了一个选择列表。在允许值列表中,我添加了一些值。现在,我想以编程方式更新该列表中的值(添加,删除或更新)。我不想使用form_alter,因为我希望将这些更新提交给数据库。我的问题是,我似乎找不到这些值在数据库中的存储位置,或者如何从Profile2中提取这些值,更新它们然后保存它们。

我已经在这个特定问题上搜寻了很多内容,但找不到有关如何执行此操作的答案。我希望有人能帮助我。

谢谢。

Answers:


23

类似于...

// Get the field info
$info = field_info_field('field_some_field');

// Get a reference to the values
$values = &$info['settings']['allowed_values'];

// Manipulate the values in some way, e.g.
$values['new_value'] = 'New Value';

// Save the field
field_update_field($info);

我需要在哪里添加这段代码?
Shivam 2015年

@shivam您需要将此代码添加到您创建的自定义模块中。
user5013

将其放在hook_update_N中仅可运行一次。
Achraf JEDAY,

同样,如果该字段已被使用,则不会更改旧的允许值。
Achraf JEDAY,

3

您最好将其allowed_values_function与回调一起使用:

'settings' => array(
  'allowed_values' => array(),
  'allowed_values_function' => '_my_feature_module_options_list',
),

请参阅为实体字段创建动态允许值选项


一个更完整的答案会有所帮助。您所引用的代码很好,并且与接受的答案相似,但是是为与功能模块一起使用而创建的。
Johnathan Elmore
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.