Dans un module personnalisé pour drupal 4.7, j'ai piraté ensemble un objet nœud et je l'ai passé à node_save ($ node) pour créer des nœuds. Ce hack semble ne plus fonctionner dans Drupal 6. Alors que je suis sûr que ce hack pourrait ê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.Comment créer un noeud à partir d'un travail cron dans drupal?
Répondre
Je ne connais pas d'API standard pour créer un nœud de manière pragmatique. Mais c'est ce que j'ai tiré de la construction d'un module qui fait ce que vous essayez de faire.
- Assurez-vous que les champs importants sont définis: uid, le nom, le type, la langue, le titre, le corps, le filtre (voir
node_add()
etnode_form()
) - passer le nœud par
node_object_prepare()
pour que d'autres modules peuvent ajouter au noeud $ objet.
La méthode des meilleures pratiques pour ce faire consiste à utiliser drupal_execute. drupal_execute exécutera la validation standard et les opérations de base sur les nœuds afin que les choses se comportent comme prévu. drupal_execute a ses bizarreries et est légèrement moins intuitif qu'un simple node_save, mais, dans Drupal 6, vous pouvez utiliser drupal_execute de la façon 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);
Une réponse plus j'ai découvert était d'utiliser the example du module blogapi dans le noyau Drupal. Le fait qu'il soit dans le noyau me donne un peu plus confiance qu'il continuera à fonctionner dans les futures versions.
Il existe quelques bonnes réponses ci-dessus, mais dans l'exemple spécifique de transformation d'un élément de flux ingéré en noeud, vous pouvez également 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 me rends compte que cela ne concerne pas spécifiquement la création de nœuds à partir de cron, mais cela pourrait être une solution plus facile à votre problème global. Node_save() fonctionne toujours correctement dans Drupal 6;
Le problème est qu'il n'y a rien de simple à propos de simplefeed et il est plein de cruauté et de ballonnement. – deadprogrammer
Cela ressemble au même problème avec beaucoup de modules contrib ... – Rimian
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);
« Etat » et « Promouvoir » sont faciles à oublier - si vous ne définissez pas ceux-ci, le nœud restera inédit et non activé, et vous ne verrez que si vous allez à l'écran d'administration de contenu .
Je pense que vous devriez également définir $ node-> revision. Si vous le définissez sur une valeur initiale et que vous l'enregistrez, il doit être défini comme ID de noeud. Je me souviens d'avoir eu des problèmes avec ça quelque part dans le fond de mon esprit ... – Rimian
- 1. Exécution d'un travail Cron
- 2. Drupal: Mise à jour la stratégie Noeud
- 3. thématisation noeud CCK dans Drupal 5
- 4. Comment faire un travail cron toutes les 72 minutes
- 5. Comment valider un champ nodereference dans un formulaire de noeud personnalisé dans Drupal 6?
- 6. django "manage.py index" ne s'exécute pas comme un travail cron
- 7. Cron travail: garder les 20 dernières lignes
- 8. Comment créer un nouveau thème dans drupal 7
- 9. Drupal: Comment formater un message électronique à l'aide du module d'invitation de noeud?
- 10. Comment puis-je ajouter des images à un noeud drupal par programmation?
- 11. Comment définir un fichier dans cron job
- 12. Texte HTML \ rich dans le titre de noeud de Drupal?
- 13. Je veux exécuter un fichier en utilisant cron travail pas dans un navigateur
- 14. Comment créer un travail Cron pour sauvegarder la sauvegarde MySQL et FTP sur mon serveur de sauvegarde?
- 15. Comment créer un travail par lots X ++ dans Axapta 3.0?
- 16. Comment obtenir un objet à partir d'un point de travail?
- 17. Comment créer un noeud DOM en tant qu'objet?
- 18. Quelle est la meilleure approche pour manipuler les actifs dans Drupal à partir de l'application .Net?
- 19. Comment afficher une liste de noeuds et les détails d'un seul noeud dans Drupal
- 20. travail cron de longue date via wget/curl?
- 21. Drupal - Comment utiliser CCK pour conserver une copie de noeud local des éléments Aggregator?
- 22. Comment puis-je configurer un travail cron sur mon site en utilisant PHP?
- 23. Comment créer des relations avec le module friendlist dans Drupal?
- 24. Syntaxe de travail Cron sur Google App Engine
- 25. Drupal CCK: comment générer un teaser de noeud avec ses champs?
- 26. Drupal 'Envoyer un e-mail' action avancée
- 27. CCK peut-il prendre en charge mes champs pour un type de noeud défini par programme dans drupal?
- 28. Drupal: Créer une recherche personnalisée
- 29. Comment je peux créer un flux de travail à l'exécution dans .Net
- 30. Créer un dossier virtuel à partir d'ASP.NET
Je considère que drupal_execute est un risque, car il mélange les API de formulaire et de noeud, et l'une des conséquences est qu'il ne fonctionne pas bien dans une boucle, ce qui est souvent requis lors de la création de nœuds par programme. Avec certains modules contrib, cela peut être nécessaire, mais c'est au mieux une solution de contournement. – FGM