Come pubblicare a livello di codice nodi non pubblicati


16

Ho alcuni nodi non pubblicati, per i quali ho i loro ID nodo. Come posso pubblicarli a livello di codice? È corretto ottenerlo nel modulo personalizzato utilizzando una query come la seguente?

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

Anche se non è il più pulito, è uno dei più veloci.
Oskar Calvo,

3
Il problema fondamentale con questo metodo è che non si aggiorna node_revision, quindi causerà incoerenza.
artfulrobot,

Risposte:


21

L'utilizzo db_query()è un metodo Drupal 6, che non è utilizzato in Drupal 7. Per ottenere il tuo lavoro, suggerisco questo codice (senza alcuna richiesta manuale).

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

Se si dispone di più ID nodo e si desidera pubblicare tutti quei nodi, è possibile utilizzare il seguente codice.

$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
Eh? db_queryè anche un metodo Drupal 7. Accetta solo argomenti diversi.

@andrewtweber, Sì, ora fa parte di Drupal, ma guarda la prima versione di Drupal 7 e poi rivendica !!!
Yusef,

Quale hook devo usare questo? Ho aggiunto hook_node_submit ma sto riscontrando un errore. Qualche aiuto?
sokratis,

@sokratis in hook_form_alter aggiungi un submitgestore personalizzato al tuo da allora in un gestore di invio personalizzato puoi usare qualcosa del genere.
Yusef,

Non dimenticare le virgolette. $ node-> status = "1";
Selwyn Polit,

8

quando si utilizza node_load (), node_load_multiple () per caricare un (multiplo) noad (s) ci sono molti hook che vengono invocati da moduli, come hook_node_load , hook_node_operations , hook_node_prepare , hook_node_accesse . Ma eseguendo la query direttamente sullo schema drupal, questi hook verranno ignorati e porteranno a molti problemi.

Le query sono:

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

Usa semplicemente il codice sopra Se node_load () o node_load_multiple () non funziona a causa dell'esaurimento della memoria disponibile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.