Ubah status Workbench dari Draft ke Diterbitkan secara terprogram


8

Saya ingin melakukan operasi massal dan mengubah node dari keadaan Konsep ke Diterbitkan. Saya membuat revisi baru dari perubahan sebelumnya, tetapi semua revisi default ke Konsep. Sekarang pada dasarnya saya hanya ingin menerbitkan revisi baru. (Saya menggunakan modul Workbench.)

Saya sudah mencoba melakukan hal-hal seperti di bawah ini, tetapi tidak satupun yang berhasil:

$node->workbench_moderation['current']->published = "1";

atau

$node->workbench_moderation['current']->from_state = "draft";
$node->workbench_moderation['current']->state = "published";
$node->workbench_moderation['current']->published = "1";

$node->workbench_moderation['published']->from_state = "draft";
$node->workbench_moderation['published']->state = "published";
$node->workbench_moderation['published']->published = "1";

$node->workbench_moderation['my_revision']->from_state = "draft";
$node->workbench_moderation['my_revision']->state = "published";
$node->workbench_moderation['my_revision']->published = "1";
$node->workbench_moderation['my_revision']->current = TRUE;

atau

workbench_moderation_moderate($node, 'published');

Saya sudah mencoba menyimpan menggunakan di bawah ini daripada node_savejuga, berpikir mungkin node_savememicu konsep baru.

workbench_moderation_node_update($node);

Saya hanya ingin memuat simpul, menerbitkan konsep, lalu menyimpannya lagi.

Adakah yang saya tahu salah?

Jawaban:


11

Ada dua solusi yang saya temukan akan berhasil:

Pertama:

$nid = 1234;
$node = node_load($nid);
$node->body['und'][0]['value'] = 'new body';
$node->revision = 1;
$node->log = 'State Changed to published';
node_save($node);
workbench_moderation_moderate($node, 'published');

CATATAN: Saya sengaja menempatkan workbench_moderation_moderate()setelah node_save()karena dalam kasus saya node_save()akan memicu rancangan baru. Setelah draft dibuat, saya menerbitkan draft itu.

Kedua:

$nid = 1234;
$node = node_load($nid);
$node->body['und'][0]['value'] = 'new body';
$node->workbench_moderation_state_new = workbench_moderation_state_published();
$node->revision = 1;
$node->log = 'State Changed to published';
node_save($node);

Saya akan menggunakan solusi pertama daripada solusi kedua karena pesan status. Yang pertama menunjukkan dua pesan di bawah revisi saat ini:

From Draft --> Published on...
From Published --> Draft on... 

sedangkan solusi kedua hanya menampilkan satu pesan yang tidak terlalu masuk akal:

From Published --> Published on...

0

@Keven

Solusi kedua adalah yang benar! Anda hanya perlu memuat revisi terbaru dengan node_load. node_save () memicu fungsi workbench_moderation_moderate () sehingga Anda tidak perlu melakukannya setelah node_save () secara manual!

$query = db_select('workbench_moderation_node_history', 'wmnh');
$query->addField('wmnh', 'vid');
$query->condition('wmnh.nid', $nid);
$query->condition('wmnh.current', 1);
$current = $query->execute()->fetchField();

// or you can get the latest revision id by loading the node without revision id:
$node = node_load($nid);
// Altough you can get node revision id from node object itself i prefer using the workbench_moderation property.
// $current = $node->vid;
$current = $node->workbench_moderation['current']->vid;

$node = node_load($nid, $current);
$node->workbench_moderation_state_new = workbench_moderation_state_published();
$node->revision = 1;
node_save($node);
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.