Domanda

In un modulo personalizzato per Drupal 4.7 ho messo insieme un oggetto nodo e lo ho passato a node_save($node) per creare nodi.Questo hack sembra non funzionare più in Drupal 6.Anche se sono sicuro che questo hack possa essere risolto, sono curioso di sapere se esiste una soluzione standard per creare nodi senza modulo.In questo caso i dati vengono estratti da un feed personalizzato su un altro sito web.

È stato utile?

Soluzione

Non conosco un'API standard per creare un nodo in modo pragmatico.Ma questo è ciò che ho raccolto costruendo un modulo che fa quello che stai cercando di fare.

  1. Assicurati che i campi importanti siano impostati:uid, nome, tipo, lingua, titolo, corpo, filtro (vedi node_add() E node_form())
  2. Passare il nodo node_object_prepare() quindi altri moduli possono aggiungersi all'oggetto $node.

Altri suggerimenti

Il metodo migliore per realizzare ciò è utilizzare drupal_execute.drupal_execute eseguirà la convalida standard e le operazioni di base del nodo in modo che le cose si comportino come previsto dal sistema.drupal_execute ha le sue stranezze ed è leggermente meno intuitivo di un semplice node_save, ma, in Drupal 6, puoi utilizzare drupal_execute nel modo seguente.


$form_id = 'xxxx_node_form'; // where xxxx is the node type
$form_state = array();
$form_state['values']['type'] = 'xxxx'; // same as above
$form_state['values']['title'] = 'My Node Title';
// ... repeat for all fields that you need to save
// this is required to get node form submits to work correctly
$form_state['submit_handlers'] = array('node_form_submit');

$node = new stdClass();
// I don't believe anything is required here, though 
// fields did seem to be required in D5

drupal_execute($form_id, $form_state, $node);

node_save() funziona ancora bene in Drupal 6;avrai bisogno di un paio di dati specifici per farlo funzionare.

$node = new stdClass();
$node->type = 'story';
$node->title = 'This is a title';
$node->body = 'This is the body.';
$node->teaser = 'This is the teaser.';
$node->uid = 1;
$node->status = 1;
$node->promote = 1;

node_save($node);

'Stato' e 'Promuovi' sono facili da trascurare: se non li imposti, il nodo rimarrà non pubblicato e non promosso e lo vedrai solo se accedi alla schermata di amministrazione del contenuto.

Un'altra risposta che ho scoperto è stata usare l'esempio dal modulo blogapi in drupal core.Il fatto che sia un core mi dà un po' più fiducia che continuerà a funzionare nelle versioni future.

Ci sono alcune buone risposte sopra, ma nell'esempio specifico di trasformazione di un elemento del feed importato in un nodo, potresti anche adottare l'approccio di utilizzare il modulo simplefeed (http://wwww.drupal.org/project/simplefeed).Questo modulo utilizza il motore simplepie per acquisire i feed e trasforma i singoli elementi di ciascun feed in nodi.Mi rendo conto che questo non affronta specificamente il problema della creazione di nodi da cron, ma potrebbe essere una soluzione più semplice al tuo problema in generale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top