Question

Dans un module personnalisé pour Drupal 4.7, j'ai piraté un objet noeud et je l'ai passé à node_save ($ node) pour créer des noeuds. Ce hack semble ne plus fonctionner dans drupal 6. Bien que je sois sûr que ce hack puisse être corrigé, je suis curieux de savoir s’il existe une solution standard pour créer des nœuds sans formulaire. Dans ce cas, les données sont extraites d’un flux personnalisé sur un autre site Web.

Était-ce utile?

La solution

Je ne connais pas d'API standard permettant de créer un nœud de manière pragmatique. Mais c’est ce que j’ai appris en construisant un module qui fait ce que vous essayez de faire.

  1. Assurez-vous que les champs importants sont définis: uid, nom, type, langue, titre, corps, filtre (voir node_add () et node_form () )
  2. Passez le noeud par node_object_prepare () afin que d'autres modules puissent ajouter de l'objet à $ node.

Autres conseils

La meilleure méthode pour y arriver consiste à utiliser drupal_execute. drupal_execute exécutera la validation standard et les opérations de base sur les noeuds afin que les choses se comportent comme prévu par le système. drupal_execute a ses bizarreries et est un peu moins intuitif qu'un simple noeud_save, mais dans Drupal 6, vous pouvez utiliser drupal_execute de la manière suivante.


$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 () fonctionne toujours bien dans Drupal 6; vous aurez besoin de quelques données spécifiques pour le faire fonctionner.

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

"Statut" et "Promouvoir" sont faciles à oublier. Si vous ne les définissez pas, le nœud restera non publié et sans promotion, et vous ne le verrez que si vous accédez à l'écran d'administration du contenu.

Une autre réponse que j'ai découverte consiste à utiliser l'exemple du blog module dans le noyau drupal. Le fait qu’il soit en version centrale me donne un peu plus de confiance dans le fait qu’il continuera à fonctionner dans les versions futures.

Il existe quelques bonnes réponses ci-dessus, mais dans l'exemple spécifique de conversion d'un élément de fil ingéré en un nœud, vous pouvez également adopter l'approche consistant à utiliser le module simplefeed ( http://wwww.drupal.org/project/simplefeed ). Ce module utilise le moteur simplepie pour intégrer des flux et transformer des éléments individuels de chaque flux en nœuds. Je réalise que cela ne résout pas spécifiquement le problème de la création de nœuds à partir de cron, mais cela pourrait être une solution plus simple à votre problème dans son ensemble.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top