Comunidad Drupal en español


Importar nodos en Drupal

By Ariel - Posted on 15 Abril 2008

Veremos una forma de importar nodos en Drupal que me funciono muy bien.

Los datos a importar tienen que estar en un archivo CSV, que es un archivo de texto con las columnas separadas por comas.

Mi archivo CSV tiene esta forma:

titulo-nodo,cuerpo-nodo,fecha-creacion,tid1,tid2

tid1 y tid2 son los id de categorias, que tienen que estar previamente configuradas.

fecha-creacion tiene que estar en un formato reconocido por la funcion de php strtotime(), dos formatos que funcionan son: 14-APR-2008 y 2008-4-14

La importación se hace con un script que lee el archivo CSV y lo importa como nodos utilizando la funcion de Drupal node_save()

El script lo ingrese como página y cada vez que el administrador ve la pagina, se realiza la importación.

<?php

global $user;

if($user->uid!=1) {
print
"Acceso negado";
return;
}

$handle = fopen("/drupal/archivo.csv", "r");

// fgetcsv es la funcion que lee las lineas del archivo csv
// 100 es la maxima longitud de la linea

$lineno = 0;
while (
$line = fgetcsv ($handle, 100)) {
 
$lineno++;
 
$titulo = $line[0];
 
$cuerpo = $line[1];
 
$fecha  = $line[2];
 
$tid1   = $line[3];
 
$tid2   = $line[4];

  $int_fecha = strtotime($fecha);  // Intentamos convertir la fecha a segundos

  $term1 = new StdClass();
 
$term1->tid = $tid1;

  $term2 = new StdClass();
 
$term2->tid = $tid2;

  $node = new StdClass();
 
$node->type = 'node-type'// Reemplazar node-type con el nombre de los nodos que estamos importando
 
$node->uid = 1// Usuario propietario del nodo

  // Si se pudo convertir la fecha la guardamos
  // Si la fecha no se pudo convertir, se importaran los nodos con la fecha actual
 
if($int_fecha)
   
$node->created = $int_fecha;

  $node->status = 1; // Published
 
$node->promote = 0;
 
$node->sticky = 0;
 
$node->title = $titulo;
 
$node->body = $cuerpo;

  $node->taxonomy[$tid1] = $term1;
 
$node->taxonomy[$tid2] = $term2;

  node_save($node);
  }

fclose($handle);
print
"Se importaron $lineno nodos";
?>

El script es bastante rudimentario, le falta comprobacion de errores, como verificar si la apertura de archivo es exitosa, que el titulo del nodo no esta vacio, etc.

Más información en este hilo de Drupal.org.

Responder

  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <h1> <h2> <h3> <img> <p> <div> <b> <i> <pre> <span> <hr>
  • You may quote other posts using [quote] tags.
  • Textual smileys will be replaced with graphical ones.
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato

CAPTCHA
Esta pregunta es para probar si eres un visitante humano y prevenir el envio automático de spam.
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.