Crear nodos via codigo en Drupal

Voy escribir y dejar asentado este pequeño pedazo de codigo, porque ya otras veces tuve que utilizar algo similar, muy muy util a la hora de generar wrapper, crawler o bichos similares que obtienen información de algo un lado, como un rss especial (una vez me toco un georss).un xml custom, o bien alguna tabla de otra base de datos con un formato propio; que luego deben dejar la informacion prolijita dentro de una instalacion de Drupal 6.x. incluyendo campos CCK

Este codigo puede ser utilizado dentro de un template o de un modulo.

Yo recomiendo hacer un pequeño modulo, que genere un path que al hacerle click corra nuestra rutina.

Primero hacemos el archivo .info:

miwrapper.info

; $Id: miwrapper.info,v 1.0.0.0 2010/11/15 04:40:41 lolcats Exp $
name = MiWrapper
description = Importador de informacion
core = 6.x

; Information added by drupal.org packaging script on2010-11-1
version = "6.x-1.12"
core = "6.x"
project = "miwrapper"
datestamp = "1243896498"


O sea simplemente la información básica nada más.

El código clave para la inserción es simple y es el siguiente:

        $node = new stdClass();
        $node->title = $titulo;
        $node->body = $contenido;
        $node->type = 'letra';
        $node->created = strtotime("now");
        $node->changed = strtotime("now");
        $node->status = 1;
        $node->comment = 0;
        $node->promote = 0;
        $node->moderate = 0;
        $node->sticky = 0;
        $node->field_compositor[0]['value'] = $compositor;
        $node->field_autor[0]['value'] = $autor;

        $node = node_submit($node);
        node_save($node);


El contenido en cursiva es el que deben ajustar a sus necesidades.
Prestad atención: los campos CCK no siempre son iguales. Este caso es para tipico campo de texto. Como hay muchos formatos y modulos que amplian esta funcionalidad para cada caso hay que hacer mas research.

Un posible modulo seria:

miwrapper.php

<?php

function miwrapper_all() {

    // Obtienes la infomacion que deseas ingresar. por ejemplo
    $titulo = "Mi Cancion";
    $contenido = "La guardia vieja replica";
    $compositor = "Juan Perez";
    $autor = "Pedro Lopez";

    $node = new stdClass();
    $node->title = $titulo;
    $node->body = $contenido;
    $node->type = 'letra';
    $node->created = strtotime("now");
    $node->changed = strtotime("now");
    $node->status = 1;
    $node->comment = 0;
    $node->promote = 0;
    $node->moderate = 0;
    $node->sticky = 0;
    $node->field_compositor[0]['value'] = $compositor;
    $node->field_autor[0]['value'] = $autor;

    // importante para setear valores por default
    $node = node_submit($node);
    node_save($node);

    $page_content = 'Adding Node';

    return $page_content;
   
}
       

function miwrapper_menu() {

  $items = array();

  $items['miwrapper'] = array(
    'title' => 'MiWrap',
    'page callback' => 'miwrapper_all',
    'access arguments' => array('access miwrapper content'),
    'type' => MENU_CALLBACK
  );

  return $items;
}

?>



Finalmente se activa el modulo y se puede correr el script en la url http://misitio.com/miwrapper