プログラムでリストフィールドの許可された値を更新する方法は?


10

Drupal 7でProfile2アカウントの選択リストを作成しました。許可値リストにいくつかの値を追加しました。次に、リストの値をプログラムで更新します(追加、削除、または更新)。これらの更新をデータベースにコミットするため、form_alterを使用したくありません。私の問題は、これらの値がデータベースのどこに保存されているのか、またはProfile2からこれらの値をプルして更新し、保存する方法を見つけられないようです。

私はこの特定の問題についてハイとローをグーグルで調べましたが、これを行う方法についての答えを見つけることができません。誰かが私を助けてくれることを願っています。

ありがとう。

回答:


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

@shivam作成したカスタムモジュールにこのコードを追加する必要があります。
user5013 '29年

これをhook_update_Nに入れて、1回だけ実行します。
Achraf JEDAY、

また、フィールドが既に使用されている場合、これは古い許可値を変更しません。
Achraf JEDAY

3

あなたはallowed_values_functionコールバックで使う方がいいです:

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

エンティティフィールドの動的許可値オプションの作成を参照してください。


より完全な答えが参考になります。参照しているコードは良好で、受け入れられた回答と同様に機能しますが、Featuresモジュールで使用するために作成されました。
Johnathan Elmore 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.