Bagaimana secara terprogram memperbarui nilai yang diizinkan dari bidang daftar?


10

Saya telah membuat daftar pilih untuk akun Profile2 di Drupal 7. Dalam daftar nilai yang diizinkan, saya telah menambahkan beberapa nilai. Sekarang apa yang ingin saya lakukan adalah memperbarui nilai-nilai dalam daftar secara terprogram (tambah, hapus atau perbarui). Saya tidak ingin menggunakan form_alter karena saya ingin pembaruan ini dilakukan ke database. Masalah saya adalah saya sepertinya tidak bisa menemukan di mana nilai-nilai ini disimpan dalam database atau cara menarik nilai-nilai itu dari Profile2, perbarui dan kemudian simpan.

Saya telah mencari Google tinggi dan rendah tentang masalah khusus ini dan tidak dapat menemukan jawaban tentang cara melakukan ini. Saya harap seseorang dapat membantu saya.

Terima kasih.

Jawaban:


23

Sesuatu di sepanjang garis ...

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

di mana saya perlu menambahkan potongan kode ini?
Shivam

@shivam Anda perlu menambahkan kode ini ke modul khusus yang Anda buat.
user5013

Masukkan ini ke hook_update_N untuk menjalankan hanya satu kali.
Achraf JEDAY

Juga ini tidak akan mengubah nilai yang diizinkan lama jika bidang sudah digunakan.
Achraf JEDAY

3

Anda sebaiknya menggunakan allowed_values_functiondengan panggilan balik:

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

Lihat Membuat opsi nilai yang diizinkan dinamis untuk bidang entitas .


Jawaban yang lebih lengkap akan sangat membantu. Kode yang Anda referensikan baik, dan berfungsi seperti jawaban yang diterima, tetapi dibuat untuk digunakan dengan modul Fitur.
Johnathan Elmore
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.