Jak programowo zaktualizować dozwolone wartości pola listy?

10

Utworzyłem listę wyboru dla konta Profile2 w Drupal 7. Na liście dozwolonych wartości dodałem kilka wartości. Teraz chciałbym programowo zaktualizować wartości na tej liście (dodać, usunąć lub zaktualizować). Nie chcę używać form_alter, ponieważ chcę, aby te aktualizacje były przypisane do bazy danych. Mój problem polega na tym, że nie mogę znaleźć, gdzie te wartości są przechowywane w bazie danych, ani jak pobrać te wartości z Profile2, zaktualizować je, a następnie zapisać.

Googled wysoko i nisko w tej konkretnej sprawie i nie mogę znaleźć odpowiedzi, jak to zrobić. Mam nadzieję, że ktoś może mi pomóc.

Dzięki.

użytkownik5013
źródło

Odpowiedzi:

23

Coś w stylu ...

// 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);
Clive
źródło
gdzie muszę dodać ten fragment kodu?
Shivam
@shivam Musisz dodać ten kod do niestandardowego modułu, który tworzysz.
user5013
Umieść to w hook_update_N, aby uruchomić tylko raz.
Achraf JEDAY
Nie zmieni to również starych dozwolonych wartości, jeśli pole jest już w użyciu.
Achraf JEDAY
3

Lepiej użyj allowed_values_functionz oddzwanianiem:

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

Zobacz Tworzenie opcji dynamicznych dozwolonych wartości dla pola encji .

Mpp
źródło
Przydałaby się pełniejsza odpowiedź. Kod, do którego się odwołujesz, jest dobry i działa podobnie do zaakceptowanej odpowiedzi, ale został stworzony do użytku z modułem Funkcje.
Johnathan Elmore,