Inicio Secciones Tecnología Joomla! Automatización para creación/importación de usuarios a Virtuemart
  • Increase font size
  • Default font size
  • Decrease font size
Buscar

Blog - Tadek Chávez

Automatización para creación/importación de usuarios a Virtuemart

E-mail Imprimir PDF

Tags: Joomla 1.5 | Open Source | VirtueMart

Hoy estuve investigando un poco sobre las tablas y campos que afecta la creación de un nuevo usuario para una tienda electrónica basada en Virtuemart 1.1.2 para Joomla! 1.5.x. Talvez no es muy común que se requiera migrar una gran base de datos de usuarios hacia el modo en que virtuemart los almacena, pero aunque solo tengamos unos cuantos registros, es importante conocer que campos afecta y como son generados para poder crear un script de automatización que lo haga por nosotros.

Mi problema o situación fue la siguiente: una base de datos con más de 1,500 usuarios registrados en una tienda virtual que fue desarrollada a la medida en su momento, la tabla en general no fue diseñada muy bien, lo cuál dificultaba un poco la manipulación de los datos, aquí les presento una imagen de phpmyadmin con la estructura de la tabla "tienda" que será de donde obtendrémos todos los datos para virtuemart.

tadek/migrate_2_virtuemart/users_origin_table.jpg

Para automatizar este proceso de migración de tantos usuarios hice un script PHP (incluido al final) que de manera general hace lo siguiente:

  1. Asigna valores de conexión a bases de datos (origen y destino)
  2. Se conecta a la base de datos origen y obtiene todos los registros de la tabla en cuestión, en este caso la tabla se llama tienda. Los registros se almacenan en un arreglo.
  3. Se conecta a la base de datos destino.
  4. Se realizan operaciones de inserción en las tablas pertinentes de la Base de datos para cada uno de los registros almacenados en el arreglo.

En este caso específico el nombre del usuario se tendrá que separar en first_name y last_name para integrarlo con la base de datos de virtuemart en la tabla #__vm_user_info, no existe una forma exacta y perfecta de hacer esto ya que no podemos saber que es un nombre y un apellido para cada usuario, pero basándonos en las costumbres de escribir nombre en combinación con apellidos, el siguiente código será suficiente:

$nombre= explode(" ", ucwords( strtolower($row['nombre']) ), 4);

    if(count($nombre)==1){
        $name = $nombre[0];
        $lastname = ' ';
    }else if(count($nombre)==2){
        $name = $nombre[0];
        $lastname= $nombre[1];
    } else if(count($nombre)==3){
        $name = $nombre[0];
        $lastname= $nombre[1].' '.$nombre[2];
    } else if(count($nombre)>=4){
        $name = $nombre[0].' '.$nombre[1];
        $lastname= $nombre[2].' '.$nombre[3];
    }

El primer INSERT en el script que hice es para añadir la información a la tabla #__users de Joomla. Es importante que almacenemos el id tras haberse creado, el código está en la línea 134:

$sql = "INSERT INTO jos_users VALUES ('','$name"." ".$lastname."', '".$nickname."', '".strtolower($row['email'])."', '".md5($row['pass'])."', '$usertype', 0, 0, $groupid, '$registerdate', '$registerdate','','')";

$result = mysql_query($sql) or die("Error SQL: " . mysql_error());

$userid = mysql_insert_id();    // Get assigned userid from Joomla!

Las siguientes tablas que deberán ser modificadas son:

jos_core_acl_aro : Tabla de control de acceso de Joomla

jos_core_acl_groups_aro_map : Tabla de mapeo de grupos de acceso

Para las tablas que corresponden a Virtuemart, se tienen que insertar datos en:

jos_vm_shopper_vendor_xref :

jos_vm_auth_user_vendor :  Tabla de relación de usuario con tienda online.

jos_vm_user_info : Almacena información extendida de cada usuario registrado en Joomla.

Entre los datos curiosos o difíciles de obtener para dar de alta a un usuario, es la creación del customer_number en la tabla #__vm_shopper_vendor_xref, este es generado con:

$customer_number = uniqid( rand() );

También el campo user_info_id de la tabla #__vm_user_info es un caso especial, para ser generado podemos utilizar el siguiente código como VALUE directamente en la consulta MySQL:

md5( date_format( date_add( sysdate( ) , INTERVAL FLOOR( 1 + ( RAND( ) *998 ) ) MICROSECOND ) ,"%Y%m%d%H%i%s%f" ) )

Como podrán ver en el script, al final agregué un do-while que repite el query mientras no pueda ser almacenado, esto es debido a que existe el caso en que el valor generado por este md5 ya exista en la BD. Este campo es llave primaria, por lo que no puede repetirse.

A quien le interese, podrá encontrar el código que aquí les paso bastante útil, obviamente fue creado para mis necesidades pero bastará con que modifiquen los nombres de campos de la Base de Datos origen para que cumplan con sus requerimientos.

Ver archivo -> migrar_a_virtuemart.php

Tadek ChávezTadek Chávez es el editor principal de este sitio. Ingeniero en sistemas computacionales especializado en ciencias de la computación con enfoque en sistemas abiertos. Director de tadzioTektadzioTek.

Más sobre Tadek Chávez


Comparte este artículo en tu red social preferida.
Digg! Reddit! Del.icio.us! Google! Live! Facebook! StumbleUpon! Yahoo!
Actualizado ( Viernes, 13 de Marzo de 2009 09:25 )  

Comentarios

avatar Turin
0
 
 
Hola... muchas gracias por compartir información y tu esfuerzo por mejorar las necesidades de las licencias libres... tengo una pregunta haber si es posible.. estoy aprendiendo a usar Joomla y obviamente VirtueMart.. y todo lo que lea al respecto me parece que en un futuro lo llegare a necesitar conforme vaya aprendiendo.. pero como no se mucho del lenguaje.. podrías decir que campos son los que debo cambiar segun a mis nesecidades... para que mi VirtueMart funcione mejor... o cuando menos para ver que resultados arroja y ver si para mi serian importantes como los son para ti.. gracias y Saludos
PD... hay muy poca información de como usar VirtueMart.. es decir como cambiar la plantilla, como cambiar monedas.. "que ya lei anteriormente" como usar el CSS etc etc..
Por favor, inicia sesión para hacer comentarios.

Lo nuevo en TadekChavez.com


Lo más visto...

Editores de TadekChavez.com

Visita nuestro perfil y síguenos en Twitter.

Tadek Chávez - Editor principal TadekChavez.com
Tadek Chávez
Editor principal
Follow Tadek Chávez on Twitter

Manuel Giménez - Editor de
Manuel Giménez
"La Columna de Manu"
Follow Manu on Twitter

Raúl Ponce de León - Editor de Tecnología en TadekChavez.com
Raúl Ponce de León

Editor - "Tecnología"
Follow Raúl on Twitter

Gonzalo Quinteros - Fotógrafo
Gonzalo Quinteros
Editor - "Fotografía"
Follow Gonzalo Quinteros on Twitter

Alejandro Castillo - Editor de Medicina
Alejandro Castillo
Editor - "Medicina"
Follow Alex on Twitter

Diana Chávez - Editora de Medicina
Diana Chávez
Editora - "Medicina"
Follow Dian on Twitter