Creación de nodos desde módulos - Drupal 6

Este articulo será el primero de muchos sobre el fascinante mundo de Drupal, mi idea es publicar pequeños artículos sobre temas que considero importantes pero que en su momento me han llevado horas de investigación para poder implementarlos en mis proyectos.

En esta ocasión el tema es como insertar nodos al sistema por medio de un módulo, en ocasiones nos es indispensable para cumplir con los requerimientos de los clientes importar información al sistema y esto es algo que me parece que es poco documentado en español por lo cual lo explico a continuación.

Para llevar a cabo esta tarea el api de Drupal pone a nuestra disposición la función node_save(), esta función espera un objeto nodo enviado por referencia, y guarda dicho nodo en la base de datos.

Ahora bien para crear un objeto nodo tenemos la clase stdClass, por lo cual la sintaxis es la siguiente:

$node = new stdClass();

Este objeto ahora se encuentra en blanco totalmente por lo que es necesario llenarlo con los datos requeridos del tipo de contenido que deseamos incluir. Resultando en unas sentencias como las siguientes:

global $user;
 
//Creación del objeto nodo
$node = new stdClass();
 
//Ingreso de valores al objeto
$node->type = 'page';
$node->uid = $user->uid;
$node->title = 'titulo del nodo';
$node->body = 'cuerpo del nodo';
 
//Inserción de nodo
node_save($node);

Este es un ejemplo básico de cómo podemos insertar el contenido deseado, este se puede complicar tanto como sea la estructura de los campos personalizados de cada tipo de contenido hecho vía CCK. 

Una forma fácil de obtener la estructura de tipo de contenido que deseamos insertar es mediante la función node_load(), función que al enviarle el número de identificador de nodo conocido como nid retorna un objeto nodo con la información del mismo, acto seguido podemos imprimir en el log de Drupal el objeto ó utilizar alguna función de los kit de desarrollo que tenemos a disposición en Drupal. La sintaxis para hacer lo antes descrito es la siguiente:

$node = node_load(34); //Carga del nodo en cuestión
watchdog('nodo','<pre>' . print_r($node,true) . '</pre>');

Al hacer esto se puede tener como resultado la siguiente fracción de código del arreglo, el cual pertenece a un campo tipo enlace:

[field_link_interes] => Array
        (
            [0] => Array
                (
                    [value] => http://www.maxmendez.net
                )

        )

Por lo tanto es posible determinar que para insertar este campo en el nodo debemos de imitar esta estructura lo que resultaría la siguiente sentencia:

$node->field_enlace_noticia =  array( array( 'value' => 'http://www.maxmendez.net') );

 

Puede encontrarse la documentación de estas funciones y más en http://api.drupal.org, también puedes visitar mi sitio web http://www.maxmendez.net/ para encontrar más artículos sobre Drupal y otros temas.