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?
create new revision
flag ditetapkan pada node untuk tipe konten? Sudahkah Anda mencoba$w->revision->set(1);
sebelum menabung? ....$w->revision->set(1)
, apakah itu cara manual untuk membiarkan drupal tahu bahwa node telah diperbarui? Saya akan mencobanya.$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 kasihrevision->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.Jawaban:
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.sumber
Ketika Anda mengedit simpul melalui UI, itu dilakukan melalui
node_form()
. Ini memiliki panggilan di dekat bagian atasnode_object_prepare()
, yang menetapkan nilai default untuk simpul itu. Ini termasuk pengaturan nilai default$node->revision
, yang digunakan olehnode_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.sumber
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.
sumber
drupal_submit_form
misalnya. Jika Anda memeriksa nilai POST untuk formulir pengiriman simpul Anda akan melihat hal-hal sepertirevision = 1
di bidang POST karenacreate new revision
kotak item formulir dicentang. Karena1 == TRUE
kode berfungsi dengan baik. Tapi, poin Anda valid.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.
sumber