Como atualizar programaticamente os valores permitidos de um campo de lista?


10

Criei uma lista de seleção para uma conta Profile2 no Drupal 7. Na lista de valores permitidos, adicionei alguns valores. Agora, o que eu gostaria de fazer é atualizar programaticamente os valores nessa lista (adicionar, excluir ou atualizar). Não quero usar form_alter, pois quero essas atualizações confirmadas no banco de dados. Meu problema é que não consigo encontrar onde esses valores estão armazenados no banco de dados ou como extrair esses valores do Profile2, atualizá-los e salvá-los.

Pesquisei bastante no Google sobre esse assunto em particular e não consigo encontrar uma resposta sobre como fazer isso. Espero que alguém possa me ajudar.

Obrigado.

Respostas:


23

Algo ao longo das linhas de ...

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

onde eu preciso adicionar esse pedaço de código?
Shivam

@shivam Você precisa adicionar esse código a um módulo personalizado criado por você.
precisa saber é o seguinte

Coloque isso em um hook_update_N para executar apenas uma vez.
Achraf JEDAY

Além disso, isso não mudará os valores permitidos antigos se o campo já estiver em uso.
Achraf JEDAY

3

É melhor usar o allowed_values_functioncom um retorno de chamada:

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

Consulte Criando opções de valores permitidos dinâmicos para um campo de entidade .


Uma resposta mais completa seria útil. O código que você está referenciando é bom e funciona de forma semelhante à resposta aceita, mas foi criado para ser usado com o módulo Recursos.
Johnathan Elmore
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.