วิธีการเผยแพร่โหนดที่ไม่ได้เผยแพร่โดยทางโปรแกรม


16

ฉันมีโหนดที่ไม่เผยแพร่ซึ่งฉันมีโหนด ID ของพวกเขา ฉันจะเผยแพร่ทางโปรแกรมได้อย่างไร ถูกต้องหรือไม่เพื่อให้บรรลุในโมดูลที่กำหนดเองโดยใช้แบบสอบถามดังต่อไปนี้

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

แม้ว่ามันจะไม่สะอาด แต่ก็เร็วกว่า
Oskar Calvo

3
ปัญหาพื้นฐานของวิธีนี้คือมันไม่ได้อัพเดทnode_revisionดังนั้นมันจะทำให้เกิดความไม่สอดคล้องกัน
artfulrobot

คำตอบ:


21

การใช้db_query()เป็นวิธี Drupal 6 ซึ่งไม่ได้ใช้ใน Drupal 7 เพื่อให้งานของคุณสำเร็จฉันขอแนะนำรหัสนี้ (โดยไม่มีการสืบค้นด้วยตนเอง)

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

หากคุณมี ID โหนดเพิ่มเติมและคุณต้องการเผยแพร่โหนดเหล่านั้นทั้งหมดคุณสามารถใช้รหัสต่อไปนี้

$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
ฮะ? db_queryเป็นวิธี Drupal 7 ด้วย ใช้เวลาขัดแย้งที่แตกต่างกัน

@ andrewtweber ใช่แล้วตอนนี้มันเป็นส่วนหนึ่งของ drupal แต่ดู drupal 7 เวอร์ชันแรกแล้วอ้างสิทธิ์ !!!
Yusef

ฉันจะใช้เบ็ดอันไหนฉันได้เพิ่มไว้ใน hook_node_submit แต่ฉันได้รับข้อผิดพลาดความช่วยเหลือใด ๆ
sokratis

@sokratis ใน hook_form_alter เพิ่มsubmitตัวจัดการแบบกำหนดเองของคุณจากนั้นในตัวจัดการการส่งแบบกำหนดเอง yu สามารถใช้สิ่งนี้ได้
Yusef

อย่าลืมคำพูด $ node-> status = "1";
Selwyn Polit

8

เมื่อคุณกำลังใช้ node_load () node_load_multiple () เพื่อโหลด (หลาย) Noad (s) มีตะขอหลายคนจะถูกเรียกโดยโมดูลเช่นhook_node_load , hook_node_operations , hook_node_prepare , hook_node_accesse แต่ด้วยการดำเนินการค้นหาโดยตรงบน schup drupal ตะขอเหล่านั้นจะถูกละเว้นและนำไปสู่ปัญหามากมาย

คำค้นหาคือ:

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

เพียงใช้โค้ดด้านบนหาก node_load () หรือ node_load_multiple () ไม่ทำงานเนื่องจากหน่วยความจำไม่เพียงพอ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.