En un módulo personalizado para drupal 4.7 pirateé juntos un objeto de nodo y lo pasé a node_save ($ node) para crear nodos. Parece que este hack ya no funciona en drupal 6. Aunque estoy seguro de que este hack podría solucionarse, tengo curiosidad de saber si existe una solución estándar para crear nodos sin un formulario. En este caso, los datos se extraen de un feed personalizado en otro sitio web.¿Cómo creo un nodo a partir de un trabajo cron en drupal?
Respuesta
No conozco una API estándar para crear un nodo de forma pragmática. Pero esto es lo que obtuve al construir un módulo que hace lo que estás tratando de hacer.
- Asegúrese de que se establecen los campos importantes: uid, nombre, tipo, idioma, título, el cuerpo del filtro (ver
node_add()
ynode_form()
) - Pasar el nodo a través
node_object_prepare()
por lo demás módulos se pueden agregar al nodo $ objeto.
El método de mejores prácticas para hacer esto posible es utilizar drupal_execute. drupal_execute ejecutará la validación estándar y las operaciones básicas de nodo para que las cosas se comporten de la manera que espera el sistema. drupal_execute tiene sus peculiaridades y es ligeramente menos intuitivo que simplemente un node_save, pero, en Drupal 6, puedes utilizar drupal_execute de la siguiente manera.
$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);
una respuesta más que descubrí fue utilizar the example del módulo blogapi en el núcleo de Drupal. El hecho de que esté en el núcleo me da un poco más de confianza de que continuará funcionando en futuras versiones.
Hay algunas buenas respuestas arriba, pero en el ejemplo específico de convertir un elemento de alimentación ingerido en un nodo, también podría tomar el enfoque de usar el módulo de alimentación simple (http://wwww.drupal.org/project/simplefeed). Este módulo usa el motor simplepie para ingerir feeds y convierte los elementos individuales de cada feed en nodos. Me doy cuenta de que esto no aborda específicamente el problema de la creación de nodos desde cron, pero podría ser una solución más fácil para su problema en general.
El problema es que no hay nada simple acerca del simplefeed y está lleno de crutage y bloat. – deadprogrammer
Parece el mismo problema con muchos módulos contrib ... – Rimian
node_save() todavía funciona bien en Drupal 6; necesitará un par de datos específicos para que funcione.
$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);
'Estado' y 'promover' son fáciles de pasar por alto - si usted no fija esos, el nodo permanecerá sin publicar y sin promotor, y sólo se va a ver si vas a la pantalla de administración de contenido .
Creo que también debe establecer $ node-> revision. Si lo configura en un valor inicial y lo guarda, entonces debe establecerse como la ID del nodo. Me parece recordar que tuve algunos problemas con esto en algún lugar en el fondo de mi mente ... – Rimian
- 1. Renderizar un nodo de Drupal
- 2. ¿Cómo obtener Drupal's $ base_url para trabajar en un trabajo cron?
- 3. Cómo agregar un trabajo cron en Linux
- 4. ¿Cómo creo un trabajo cron que se ejecutará todos los días a las 12:20 a.m.
- 5. Cómo ejecutar un trabajo de Cron para Node.js
- 6. ¿Cómo creo un org.xml.sax.InputSource a partir de una cadena?
- 7. Obtener la URL de un nodo en Drupal 7
- 8. ¿Cómo ejecutar el trabajo cron cuando termina otro trabajo cron?
- 9. ¿Cómo creo un trabajo cron para ejecutar una función postgres SQL?
- 10. ¿Cómo creo un xmlElement del nodo actual de un xmlReader?
- 11. Agregar js a un formulario de nodo drupal
- 12. ¿Cómo anular el registro de un trabajo CRON en AppEngine?
- 13. ¿Cuándo no utilizar un nodo Drupal?
- 14. ¿Cómo creo un token personalizado en Drupal 7?
- 15. Drupal: ¿Cómo creo programáticamente un alias de URL para un nodo que ya tiene un alias en el nodo de guardar?
- 16. Cómo creo un crontab a través de un script
- 17. ¿Cómo creo un histograma a partir de un hashmap en python?
- 18. ¿Cómo creo un archivo MAKE a partir de un archivo de solución de Visual Studio?
- 19. Cómo hacer un trabajo cron cada 72 minutos
- 20. ¿Se ejecutan dos comandos secuencialmente en un trabajo cron?
- 21. Expresión de Cron Cuarzo: Ejecutar trabajo Cada 10 minutos a partir de AHORA (inmediatamente)
- 22. Plantilla personalizada para un nodo específico en Drupal 6?
- 23. ¿Cómo puedo ejecutar un trabajo cron con argumentos y pasar resultados a un registro?
- 24. Ruta de archivo para un trabajo de Cron
- 25. ¿Es posible ejecutar un trabajo cron en una aplicación web?
- 26. Enganche de Drupal después del nodo creado
- 27. drupal tiempo de ejecución máximo de cron
- 28. ¿Cómo creo una matriz numpy a partir de una cadena?
- 29. Trabajo de Cron en Ubuntu para php
- 30. cómo hacer un trabajo cron todos los días a las 6 en punto por Cpanel
Considero que drupal_execute es un riesgo, ya que mezcla las API de formulario y nodo, y una de las consecuencias es que no funciona bien en un bucle, que a menudo se requiere al crear los nodos mediante programación. Con algunos módulos contrib, puede ser necesario, pero en el mejor de los casos es una solución. – FGM