Wie kann ich die zulässigen Werte eines Listenfelds programmgesteuert aktualisieren?


10

Ich habe in Drupal 7 eine Auswahlliste für ein Profile2-Konto erstellt. In der Liste der zulässigen Werte habe ich einige Werte hinzugefügt. Jetzt möchte ich die Werte in dieser Liste programmgesteuert aktualisieren (hinzufügen, löschen oder aktualisieren). Ich möchte form_alter nicht verwenden, da diese Updates in die Datenbank übernommen werden sollen. Mein Problem ist, dass ich anscheinend nicht finde, wo diese Werte in der Datenbank gespeichert sind oder wie ich diese Werte aus Profile2 abrufen, aktualisieren und dann speichern kann.

Ich habe in diesem speziellen Thema hoch und niedrig gegoogelt und kann keine Antwort darauf finden. Ich hoffe jemand kann mir helfen.

Vielen Dank.

Antworten:


23

Etwas in der Art von ...

// 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);

Wo muss ich diesen Code hinzufügen?
Shivam

@shivam Sie müssen diesen Code einem benutzerdefinierten Modul hinzufügen, das Sie erstellen.
user5013

Fügen Sie dies in ein hook_update_N ein, um es nur einmal auszuführen.
Achraf JEDAY

Dies ändert auch nicht die alten zulässigen Werte, wenn das Feld bereits verwendet wird.
Achraf JEDAY

3

Verwenden Sie das besser allowed_values_functionmit einem Rückruf:

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

Siehe Erstellen dynamischer zulässiger Werteoptionen für ein Entitätsfeld .


Eine vollständigere Antwort wäre hilfreich. Der Code, auf den Sie verweisen, ist gut und funktioniert ähnlich wie die akzeptierte Antwort, wurde jedoch für die Verwendung mit dem Funktionsmodul erstellt.
Johnathan Elmore
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.