it-swarm-id.com

Pembaruan bidang massal?

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?

34
daphshez

Anda dapat menggunakan EntityFieldQuery untuk mengambil daftar node, kemudian memperbarui 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 Devel module Execute PHP untuk menjalankan hal di atas: jika tidak, Anda dapat membuat modul kustom sederhana.

37
user7

Saya akan menggunakan Operasi Tampilan Massal dan menggunakan "Execute Arbitrary PHP Script" untuk melakukan hal-hal pada dasarnya 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')

17
rfay

Jika Anda hanya ingin memperbarui bidang dengan beberapa nilai, maka alternatif yang lebih berkinerja untuk jawaban yang diterima adalah ini:

$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 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';
    field_attach_presave('node', $node);
    field_attach_update('node', $node);
  }
}

Perbedaannya adalah dalam menggunakan secara langsung field_attach_presave dan field_attach_update fungsi, yang memperbarui dengan benar hanya bidang simpul dan melewatkan seluruh proses penyimpanan simpul. Ini berdampak bahwa tidak ada simpul presave/save node akan dipanggil, tanggal "diubah" tidak akan diperbarui ke tanggal saat ini dll. Menurut kasus penggunaan Anda mungkin lebih baik menggunakan seluruh proses node_save ().

9
Mirsoft

Memang VBO (Views Operasi Massal) adalah solusi yang baik. Selanjutnya, dengan versi terbaru, Anda akan menemukan opsi "Ubah nilai entitas" yang menyediakan cara yang sangat mudah untuk memperbarui bahasa simpul dalam satu operasi.

4
xaa

Pasang dan aktifkan modul Views Operasi Massal dan buat tampilan dengan tampilan halaman.

Tambah => Operasi massal: Bidang Konten (Konten) yang terlihat.

Lihat

enter image description here

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.

2
DRUPWAY