Bir liste alanının izin verilen değerlerini programatik olarak nasıl güncelleyebilirim?


10

Drupal 7'de bir Profile2 hesabı için bir seçim listesi oluşturdum. İzin verilen değerler listesine bazı değerler ekledim. Şimdi yapmak istediğim, o listedeki değerleri programlı olarak güncellemektir (ekleme, silme veya güncelleme). Bu güncelleştirmelerin veritabanına işlenmesini istediğim için form_alter kullanmak istemiyorum. Benim sorunum, bu değerlerin veritabanında nerede depolandığını veya bu değerlerin Profil2'den nasıl alınacağını, güncellenip sonra kaydedileceğini bulamıyorum.

Google'ın bu konuda yüksek ve düşük olduğunu ve bunun nasıl yapılacağı konusunda bir cevap bulamadım. Umarım biri bana yardım edebilir.

Teşekkürler.

Yanıtlar:


23

Çizgiler boyunca bir şey ...

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

nerede bu kod parçasını eklemek gerekir?
Shivam

@shivam Bu kodu, oluşturduğunuz özel bir modüle eklemeniz gerekir.
user5013

Yalnızca bir kez çalıştırmak için bunu hook_update_N içine koyun.
Achraf JEDAY

Alan zaten kullanılıyorsa, bu eski izin verilen değerleri değiştirmez.
Achraf JEDAY

3

The allowed_values_functiongeri aramayla kullansanız iyi olur :

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

Bir varlık alanı için bkz. Dinamik izin verilen değerler seçenekleri oluşturma .


Daha eksiksiz bir cevap faydalı olacaktır. Referans verdiğiniz kod iyidir ve kabul edilen yanıta benzer şekilde çalışır, ancak Özellikler modülü ile kullanılmak üzere oluşturulmuştur.
Johnathan Elmore
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.