Mengapa entitas_metadata_wrapper-> save () tidak memperbarui revisi node?

8

Saya sedang mengembangkan modul untuk memperbarui node (aktifkan revisi). Ini terlihat seperti ini.

 $nodes = node_load_multiple(array(), array('type' => $bundleType));
 foreach ($ndoes as $node){
    $w = entity_metadata_wrapper('node',$node);
    $w->MyFields->set($someValue);
    $w->save();
 }

Ini mengatur bidang dengan benar tetapi id revisi-simpul tidak berubah setelah $w->save().

Bagaimana saya bisa memperbarui ID revisi?

zhuchun
sumber
Apakah create new revisionflag ditetapkan pada node untuk tipe konten? Sudahkah Anda mencoba $w->revision->set(1);sebelum menabung? ....
Tenken
Ya, "buat revisi baru" aktif. Saya tidak tahu banyak tentang $w->revision->set(1), apakah itu cara manual untuk membiarkan drupal tahu bahwa node telah diperbarui? Saya akan mencobanya.
zhuchun
hmm, $w->revision->set()berhasil. Sepertinya saya salah paham $w->save(). Saya pikir itu harus meningkatkan id revisi secara otomatis sambil menyimpan. Apakah ada cara untuk mendapatkan id peningkatan revisi berikutnya? Terima kasih
zhuchun
tidak, revision->set(1)memberitahu node untuk merekam revisi baru pada edit node yang akan datang / saat ini. Saya tidak yakin mengapa pembungkus metadata tidak melihat pengaturan global untuk membuat revisi baru ..... tetapi pengaturan bendera revisi adalah solusi yang sangat sederhana seperti yang Anda lihat sekarang. Saya memberikan komentar saya sebagai jawaban di bawah ini jika Anda ingin meningkatkannya untuk membantu pengguna lain di masa depan menemukan jawaban yang benar.
Tenken

Jawaban:

6

Apakah tanda revisi buat baru ditetapkan pada node untuk tipe konten? Sudahkah Anda mencoba seperti $ w-> revisi-> set (1); sebelum menyimpan? ....

EDIT:

Penulis mengatakan pengaturan $w->revision->set(1)menyelesaikan masalahnya.

Tenken
sumber
Ini solusi mudah! Hanya saja, tidak mengerti mengapa itu perlu lol. Terima kasih!
zhuchun
10

Ketika Anda mengedit simpul melalui UI, itu dilakukan melalui node_form(). Ini memiliki panggilan di dekat bagian atas node_object_prepare(), yang menetapkan nilai default untuk simpul itu. Ini termasuk pengaturan nilai default $node->revision, yang digunakan oleh node_save()untuk menentukan apakah revisi baru diperlukan atau tidak.

API Entity sadar akan revisi, tetapi node_object_prepare()merupakan hal khusus simpul. Ini berarti bahwa Anda perlu mengelola sendiri nilai-nilai itu, termasuk mengatur properti revisi untuk meniru apa yang akan dilakukan oleh formulir pengeditan simpul.

mpdonadio
sumber
7

Tidak satu pun dari jawaban ini yang benar, melakukan ->set(1)membuatnya terdengar seperti Anda benar-benar mengubah angka revisi dan karenanya harus menambahnya.

Ini sebenarnya hanya boolean flag jadi jawaban yang benar adalah $node->revision->set(true);

Seperti yang dikatakan zhuchun: dia tidak mengerti mengapa itu diperlukan, ketika dijelaskan sebagai bendera boolean, itu lebih masuk akal daripada angka.

Gav_
sumber
Ada saat ketika membuat konten drupal baru yang paling mudah dipanggil drupal_submit_formmisalnya. Jika Anda memeriksa nilai POST untuk formulir pengiriman simpul Anda akan melihat hal-hal seperti revision = 1di bidang POST karena create new revisionkotak item formulir dicentang. Karena 1 == TRUEkode berfungsi dengan baik. Tapi, poin Anda valid.
Tenken
jawaban ini harus diterima
Alex Skrypnyk
0

Jika jenis simpul tidak memiliki revisi yang diaktifkan secara default, cara paling ringkas untuk meminta revisi baru adalah:

$w->revision = TRUE;

yang persis sama dengan menggunakan:

$w->revision->set(TRUE);

tetapi dengan kurang mengetik diperlukan.

Fonant
sumber