Uno de los temas principales que nos aparecen cuando queremos migrar de nuestra web a una web con drupal,
es, que hacemos con todo el contenido que tenemos y como lo importamos a la nueva web?
Todos los datos guardados en la bd, todos los registros de usuarios, todas las relaciones con imágenes, etc.
Se puede migrar todo este contenido hacia drupal sin tener que entrarlo todo a mano de nuevo?
La respuesta, es que si, pero entendiendo un poco la filosofía de trabajo de drupal.
Es este primer tutorial, mirare de explicar un poco la manera como empezar a realizar correctamente la importación y crearemos la estructura de contenido en drupal.
La idea no es entrar el contenido directamente a la base de datos, copiando los campos uno a uno dentro de cada campo, si no, utilizar las funciones que nos facilita drupal para poder realzar una importación correcta y validar los contenidos entrados.
Si creamos los contenidos directamente en la base de datos de drupal no validaremos ningún contenido, aparte que drupal no sabrá relacionar los nodos y será todo un cacao ya que cuando drupal crea un nodo, crea muchos registros-subregistros, cosa que realizarlo a mano seria prácticamente imposible.
Nota: El tutorial podríamos decir que es de un nivel medio, con lo cual, recomendaría antes de nada, leer un poco sobre como trabaja drupal con los nodos, cck, etc.
En el ejemplo, vamos a importar la tabla noticias.
Este seria nuestra table noticias en el MySQL de nuestra web actual.
-
Id_noticia (INT)
-
Titulo (VARCHAR 250)
-
Entradilla ( varchar250)
-
Body (BLOB)
-
Fecha ( TIMESTAMP)
-
Id_usuario (INT)
-
Imagen (VARCHAR 250)
(Nota: la imagen es una ruta y no una imagen guardada en bd)
Primero de todo, y lo mas importante, es tener instalado el modulo CCK ya que sin el, no podremos crear ningún tipo de contenido ni campos, ni ná de ná
Si ya lo tenéis instalado, deberemos crear todos los tipos de contenido con sus campos y los campos que tengas un tipo similar o igual al de la web. Osea, que si el campo nombre en la web actual es un campo de texto, en el actual no sea un radiobutton
, supongo que esto es obvio no?
Creamos un nuevo tipo de contenido: noticias y creamos los siguientes campos:
Title – body (los campos por defecto del nodo)
Entradilla => text => text field
Fecha => datestamp => mostrar en calendario
Id_usuario => user_reference => autocomplete
Imagen => file => image
Si no disponéis del campo fecha, instalar el modulo date. Descargar desde aquí.
Si no disponéis del campo file, instalar el modulo Imagefield. Descargar desde aquí.
Si alguno de los tipos no se os muestran, ir a admin/buid/modules, e instalároslos ya que los otros tipos de campo forman parte del core.
Notas:
-El campo id usuario, se relacionara con los usuario que tengamos en la web, por lo tanto, antes de importar las noticias, deberíamos crear los usuarios para poder establecer una relación en la importación.
- No comento como configurar los campos, ya que en la documentación de los mismos creo que ya esta bien explicado. En caso de dudas, se puede comentar sin problema
Ya tenemos la estructura de las noticias creada, como continuamos?
Para una importación rápida y automática, nos crearemos un fichero .php que creara automáticamente todos los nodos del tipo noticia.
Para que lo entendáis, el programa que crearemos, nos va a rellenar el nodo de noticias con los datos, y guardara el nodo, igual como si lo hiciésemos a mano.
En este primer tutorial, solo vamos a hacer la importación de los tipos de texto ya que cada tipo de campo tiene sus propiedades distintas.
Empezamos con el programa:
-
$type= ‘noticias’; // Definimos el tipo del contenido, en este caso, noticias.
-
$language = ‘es’; // Definimos el lenguaje del nodo, en este caso español
-
$user = 1 // El uid del usuario admin. Este campo puede ser cualquier uid de cualquier usuario. Nota: Este no es el id_usuario definido anteriormente. Este campo es el usuario creador del nodo.
-
-
// Recogemos todos los datos de la base de datos de noticias
-
if (!$result) {
-
echo “Error al cargar datos de la base de datos\n”;
-
}
-
// Empezaremos por tratar los campos de tipo texto.
-
// NOTA: Vigilar en los campos de texto que la codificación de caracteres es la misma. En caso de no ser
-
// la misma, deberíamos cambiar la codificación. Osea que si tenemos latin en la nueva debe ser latin, o en // todo caso, cambiar de latin a la nueva.
-
-
-
// Definimos el nodo y le insertamos por defecto el parámetro del tipo de nodo, en nuestro caso, noticias.
-
$node = (object)array('type' => $type); // Importante, en drupal, el nodo es un objecto y como tal,
-
//debemos tratarlo como un objeto.
-
-
// Información Principal
-
$form_state['values']['title'] = $titulo_nodo;
-
$form_state['values']['language'] = $language;
-
$form_state['values']['status'] = 1; // Si es 1. el nodo estará activo, 0 inactivo
-
$form_state['values']['name'] = $user; // Id o nombre del usuario propietario del nodo.
-
$form_state['values']['body'] = $desc_nodo;
-
// (todos estos parámetros son los que siempre deberán existir ya que contienen información necesaria para
-
//la creación del nodo.
-
-
// Campos del CCK.
-
$form_state['values']['field_entradilla']['value'] = $entradilla_campo;
-
// Si nos fijamos en la estructura, siempre será mas o menos la misma: values => nombre de campo => value
-
-
$form_state['values']['op'] = t('Save'); // Le decimos a drupal que debe guardar el nodo.
-
drupal_execute($type .'_node_form', $form_state, $node); // Esta función de drupal es la encargada de
-
// ejecutar el formulario y tratar todos los datos contenidos.
-
// mas info: http://api.drupal.org/api/function/drupal_execute/6
-
-
// Comprobamos el resultado de la inserción
-
$result = form_set_error();
-
}
-
}
Y con este primer código crearíamos todas las noticias con su titulo, entradilla y body.
En el siguiente tutorial, vamos a insertar las fechas y si da tiempo, los usuarios relacionados.
Cualquier consulta, comentar en el post.
Este articulo ha sido escrito en enbloger.net .






