Saya menambahkan bidang (teks) baru ke tipe konten Drupal 7 yang sudah memiliki banyak node.
Bagaimana saya bisa mengisi bidang dengan nilai default untuk semua node ini?
Anda dapat menggunakan EntityFieldQuery
untuk mengambil daftar node, lalu perbarui bidang simpul dengan node_save()
:
$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type
$query = new EntityFieldQuery;
$result = $query
->entityCondition('entity_type', 'node')
->propertyCondition('type', $node_type)
->execute();
if (!empty($result['node'])) {
$nodes = entity_load('node', array_keys($result['node']));
foreach($nodes as $node) {
// Replace field_foo with the machine name of the field to update.
// - 0 refers to specific value within the field array, for when the field contains
// multiple values. If the field only has one value, it should be 0.
$node->field_foo[$lang][0]['value'] = 'New Value';
node_save($node);
}
}
Jika ini adalah operasi satu kali, Anda dapat menggunakan fungsi Execute PHP modul Devel untuk menjalankan hal di atas: jika tidak, Anda dapat membuat modul kustom sederhana.
Saya akan menggunakan Operasi Massal Tampilan dan menggunakan "Execute Arbitrary PHP Script" untuk melakukan hal-hal di atas, tetapi Anda tidak harus melakukan semua kode tambahan, hanya potongan kecil yang melakukan apa yang Anda inginkan (seperti
$object->field_foo['und'][0]['value'] = 'some_value'
)sumber
Jika Anda hanya ingin memperbarui bidang dengan beberapa nilai, maka alternatif yang lebih berkinerja untuk jawaban yang diterima adalah ini:
Perbedaannya adalah dalam menggunakan langsung
field_attach_presave
danfield_attach_update
fungsi, yang memperbarui dengan benar hanya bidang simpul dan melewatkan sisa proses penyimpanan simpul. Ini berdampak bahwa tidak ada simpul presave / save node akan dipanggil, tanggal "berubah" tidak akan diperbarui ke tanggal saat ini dll. Menurut kasus penggunaan Anda mungkin lebih baik menggunakan seluruh proses node_save ().sumber
Memang VBO (Views Operasi Massal) adalah solusi yang baik. Selain itu, dengan versi terbaru, Anda akan menemukan opsi "Ubah nilai entitas" yang menyediakan cara yang sangat mudah untuk memperbarui bahasa node dalam satu operasi.
sumber
Instal dan aktifkan modul Operasi Massal Views dan buat tampilan dengan tampilan halaman.
Tambah => Operasi massal: Bidang Konten (Konten) yang terlihat.
Lihat
Pilih Bidang yang ingin Anda tetapkan nilai default.
Dalam kasus Anda, judulnya. Dalam gambar itu adalah tag.
Simpan tampilan, dan buka halaman yang dibuatnya. Jika Anda memiliki lebih dari satu halaman hasil, Anda dapat memilih untuk memilih semua item pada halaman saat ini, semua item pada semua halaman, atau Anda dapat secara manual menandai kotak yang sesuai dengan masing-masing node. Setidaknya satu kotak centang harus dicentang untuk melanjutkan.
Sekarang Anda menetapkan nilai default dan menyimpannya.
sumber