Làm thế nào để xuất bản các nút chưa được công bố theo chương trình


16

Tôi có một số nút chưa được công bố, mà tôi có ID nút của họ. Làm thế nào tôi có thể lập trình xuất bản chúng? Là chính xác để đạt được nó trong mô-đun tùy chỉnh bằng cách sử dụng một truy vấn như sau?

db_query("UPDATE {node} SET status = 1 WHERE nid = %d", $nid)

Mặc dù nó không phải là thứ sạch nhất nhưng nó là một trong những thứ nhanh hơn.
Oskar Calvo

3
Vấn đề cơ bản với phương pháp này là nó không cập nhật node_revision, vì vậy nó sẽ gây ra sự không nhất quán.
artfulrobot

Câu trả lời:


21

Sử dụng db_query()là phương pháp Drupal 6, không được sử dụng trong Drupal 7. Để đạt được công việc của bạn, tôi đề xuất mã này (không có bất kỳ truy vấn thủ công nào).

// load the node object
$node = node_load($nid);
// set status property to 1
$node->status = 1;
// re-save the node
node_save($node);

Nếu bạn có nhiều ID nút hơn và bạn muốn xuất bản tất cả các nút đó, bạn có thể sử dụng mã sau đây.

$nids = array();
// Load all nodes in one go for better performance.
$nodes = node_load_multiple($nids);
foreach ($nodes as $node) {
  // set status property to 1
  $node->status = 1;
  // re-save the node
  node_save($node);
}

3
Huh? db_querylà một phương pháp Drupal 7 quá. Chỉ cần có những lý lẽ khác nhau.

@andrewtweber, Có ngay bây giờ nó là một phần của drupal nhưng hãy nhìn vào phiên bản đầu tiên của drupal 7 và sau đó yêu cầu !!!
Yusef

Tôi sẽ sử dụng hook nào? Tôi đã thêm vào hook_node_submit nhưng tôi đang gặp lỗi. Có ai giúp đỡ không?
sokratis

@sokratis trong hook_form_alter thêm một submittrình xử lý tùy chỉnh cho bạn từ đó trong trình xử lý trình tùy chỉnh yu có thể sử dụng một cái gì đó như thế này.
Yusef

Đừng quên các trích dẫn. $ nút-> status = "1";
Selwyn Polit

8

khi bạn đang sử dụng node_load (), node_load_mult Môn () để tải một (nhiều) noad (s), có nhiều hook sẽ được gọi bởi các mô-đun, chẳng hạn như hook_node_load , hook_node_operations , hook_node_prepare , hook_node_accesse . Nhưng bằng cách thực hiện truy vấn trực tiếp trên lược đồ drupal, các hook đó sẽ bị bỏ qua và dẫn đến nhiều vấn đề.

Các câu hỏi là:

db_query("UPDATE {node} SET `status` = '1' WHERE `nid` =:nid ;"
    ,array(':nid'=>$node->nid));

db_query("UPDATE {node_revision} SET `status` = '1' WHERE `nid` =:nid AND  `vid` =:vid;"
    ,array(':nid'=>$node->nid,'vid'=> $node->vid));

Chỉ sử dụng mã ở trên Nếu node_load () hoặc node_load_mult Môn () không hoạt động vì hết bộ nhớ khả dụng.

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.