Yayınlanmamış düğümleri programlı olarak yayınlama


15

Düğüm kimliklerine sahip olduğum bazı yayınlanmamış düğümlerim var. Bunları programlı olarak nasıl yayınlayabilirim? Aşağıdaki gibi bir sorgu kullanarak özel modülde elde etmek doğru mu?

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

En temiz olanı olmasa da daha hızlı olanlardan biridir.
Oskar Calvo

3
Bu yöntemle ilgili temel sorun, güncellenmemesi node_revision, dolayısıyla tutarsızlığa neden olmasıdır.
artfulrobot

Yanıtlar:


20

Kullanmak db_query(), Drupal 7'de kullanılmayan bir Drupal 6 yöntemidir. İşinize ulaşmak için bu kodu öneririm (herhangi bir manuel sorgu olmadan).

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

Daha fazla düğüm kimliğiniz varsa ve tüm bu düğümleri yayınlamak istiyorsanız, aşağıdaki kodu kullanabilirsiniz.

$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
Ha? db_querybir Drupal 7 yöntemidir. Sadece farklı argümanlar alır.

@andrewtweber, Evet şimdi drupal'ın bir parçası ama drupal 7'nin ilk sürümüne bakın ve sonra talep edin !!!
Yusef

Hangi kancayı kullanmalıyım? Hook_node_submit içine ekledim ama bir hata alıyorum.Herhangi bir yardım?
sokratis

@ hook_form_alter içinde @sokratis özel bir submitişleyici ekleyin o zaman özel gönderme işleyicisi yu böyle bir şey kullanabilirsiniz.
Yusef

Alıntıları unutma. $ düğüm-> durum = "1";
Selwyn Polit

7

(çoklu) bir noad (lar) yüklemek için node_load (), node_load_multiple () kullandığınızda , hook_node_load , hook_node_operations , hook_node_prepare , hook_node_accesse gibi birçok kanca modül tarafından çağrılır . Ancak doğrudan drupal şemada sorgulama yaparak bu kancalar yok sayılır ve birçok soruna yol açar.

Sorgular:

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

Sadece yukarıdaki kodu kullanın Eğer node_load () veya node_load_multiple () kullanılabilir belleği yetersiz olduğu için çalışmıyorsa.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.