Come aggiornare a livello di codice i valori consentiti di un campo elenco?


10

Ho creato un elenco di selezione per un account Profile2 in Drupal 7. Nell'elenco dei valori consentiti, ho aggiunto alcuni valori. Ora quello che vorrei fare è aggiornare a livello di codice i valori in quell'elenco (aggiungere, eliminare o aggiornare). Non voglio usare form_alter perché voglio che questi aggiornamenti siano impegnati nel database. Il mio problema è che non riesco a trovare dove sono archiviati questi valori nel database o come estrarre tali valori da Profile2, aggiornarli e salvarli.

Ho cercato su Google su questo tema in modo particolare e non riesco a trovare una risposta su come farlo. Spero che qualcuno mi possa aiutare.

Grazie.

Risposte:


23

Qualcosa sulla falsariga di ...

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

dove devo aggiungere questo pezzo di codice?
Shivam,

@shivam Devi aggiungere questo codice a un modulo personalizzato che crei.
user5013

Inseriscilo in hook_update_N per eseguirlo una sola volta.
Achraf JEDAY

Inoltre, ciò non modificherà i vecchi valori consentiti se il campo è già in uso.
Achraf JEDAY

3

Faresti meglio a usare il allowed_values_functioncon un callback:

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

Vedere la sezione Creazione di opzioni di valori dinamici consentiti per un campo entità .


Una risposta più completa sarebbe utile. Il codice a cui fai riferimento è buono e funziona in modo simile alla risposta accettata, ma è stato creato per essere utilizzato con il modulo Caratteristiche.
Johnathan Elmore,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.