Thay đổi trạng thái Workbench từ Dự thảo sang Xuất bản theo chương trình


8

Tôi muốn thực hiện một hoạt động hàng loạt và thay đổi các nút từ trạng thái Dự thảo sang Xuất bản. Tôi đã tạo một bản sửa đổi mới từ một thay đổi trước đó, nhưng tất cả các bản sửa đổi mặc định là Bản nháp. Bây giờ tôi muốn cơ bản chỉ xuất bản bản sửa đổi mới. (Tôi đang sử dụng mô-đun Workbench.)

Tôi đã thử làm những việc như dưới đây, nhưng dường như không ai trong số họ làm việc:

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

hoặc là

$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;

hoặc là

workbench_moderation_moderate($node, 'published');

Tôi đã cố gắng tiết kiệm bằng cách sử dụng bên dưới chứ không phải node_savelà tốt, nghĩ rằng có thể node_savekích hoạt một dự thảo mới.

workbench_moderation_node_update($node);

Tôi chỉ muốn tải nút, xuất bản bản nháp, sau đó lưu lại.

Bất cứ ý tưởng những gì tôi đang làm sai?

Câu trả lời:


11

Có hai giải pháp mà tôi đã tìm thấy sẽ hoạt động:

Thứ nhất:

$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');

LƯU Ý: Tôi cố tình đặt workbench_moderation_moderate()sau node_save()vì trong trường hợp của tôi node_save()sẽ kích hoạt một dự thảo mới. Sau khi dự thảo được tạo ra, tôi xuất bản dự thảo đó.

Thư hai:

$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);

Tôi đang đi với giải pháp đầu tiên trên giải pháp thứ hai vì các thông báo trạng thái. Đầu tiên hiển thị hai thông báo theo sửa đổi hiện tại:

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

trong khi giải pháp thứ hai chỉ hiển thị một thông điệp không thực sự có ý nghĩa:

From Published --> Published on...

0

@Keven

Giải pháp thứ hai là giải pháp chính xác! Bạn chỉ cần tải bản sửa đổi gần đây nhất với node_load. node_save () kích hoạt hàm workbench_modutions_moderator () để bạn không phải làm điều đó sau khi node_save () thủ công!

$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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.