Cara mempublikasikan node yang tidak dipublikasikan secara terprogram

16

Saya memiliki beberapa node yang tidak diterbitkan, yang mana saya memiliki ID node mereka. Bagaimana saya bisa mempublikasikannya secara terprogram? Apakah benar mencapainya dalam modul khusus menggunakan kueri seperti berikut?

db_query("UPDATE {node} SET status = 1 WHERE nid = %d", $nid)
Jim Gaslingson
sumber
Meskipun itu bukan yang terbersih itu salah satu yang lebih cepat.
Oskar Calvo
3
Masalah mendasar dengan metode ini adalah tidak diperbarui node_revision, sehingga akan menyebabkan inkonsistensi.
artfulrobot

Jawaban:

21

Menggunakan db_query()adalah metode Drupal 6, yang tidak digunakan dalam Drupal 7. Untuk mencapai pekerjaan Anda, saya sarankan kode ini (tanpa permintaan manual).

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

Jika Anda memiliki lebih banyak ID node, dan Anda ingin menerbitkan semua node itu, Anda dapat menggunakan kode berikut.

$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);
}
Yusef
sumber
3
Hah? db_queryadalah metode Drupal 7 juga. Hanya butuh argumen yang berbeda.
@andrewtweber, Ya sekarang ini adalah bagian dari drupal tetapi lihatlah versi pertama drupal 7 lalu klaim !!!
Yusef
Kait mana yang harus saya gunakan ini? Saya telah menambahkan di dalam hook_node_submit tapi saya menerima pesan error.
sokratis
@sokratis di hook_form_alter tambahkan submithandler kustom ke Anda sejak saat itu di custom submit handler kamu bisa menggunakan sesuatu seperti ini.
Yusef
Jangan lupa tanda kutip. $ node-> status = "1";
Selwyn Polit
8

ketika Anda menggunakan node_load (), node_load_multiple () untuk memuat (banyak) noad ada banyak kait akan dipanggil oleh modul, seperti hook_node_load , hook_node_operations , hook_node_prepare , hook_node_accesse . Tetapi dengan melakukan kueri langsung pada skema drupal kait itu akan diabaikan dan menyebabkan banyak masalah.

Pertanyaannya adalah:

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

Cukup gunakan kode di atas Jika node_load () atau node_load_multiple () tidak berfungsi karena kehabisan memori yang tersedia.

B Ravanbakhsh
sumber