Ayuda Joomla! | Tutoriales y Foros joomla!

Extensiones Joomla!
Está aquí: Home Tutoriales Añadir nuevos campos en productos Virtuemart

Añadir nuevos campos en productos Virtuemart

Trabajando con joomla y virtuemart, son muchas las ocasiones a la hora de añadir productos en nuestra tienda online VirtueMart de Joomla, en las que deseariamos poder añadir nuevos campos como por ejemplo un numero de registro para cada producto y NO* en los productos que añadimos en virtuemart joomla 1.5. En los foros de solojoomla ya han preguntado en alguna ocasion, por ejemplo para poder añadir una numeracion que no fuese la que se incluye de forma automatica en Joomla virtuemart 1.1.x. a un producto. Buscando posibles soluciones a estas petciones necesarias para muchos usuarios encontre una solucion muy efectiva y bastante sencilla de implementar. Paso a redactar la solucion al castellano para un mejor entendimiento de los pasos a seguir...
*Tengo que precisar que esta opcion no es para añadir tipos de productos, para eso ya esta la opcion contemplada en el menu Productos de la administracion Virtuemart en "Añadir tipo de producto" Documentacion . El primer paso es hacer una copia de nuestros archivos y base de datos antes de ponernos a cambiar nada, como sabran, es facil equivocarse en este tipo de tareas, asi que mas vale prevenir. Una vez realizadas las copias pasaremos a crear en la tabla jos_vm_product de nuestra base de datos el nuevo campo que queremos añadir. Para poder añadir ese nuevo campo en la tabla utilizaremos el phpmyadmin desde nuestro panel de control, les resultara mas sencillo. Una vez accedamos al phpmyadmin pincharemos en el nombre de nuestra base de datos y buscaremos la tabla jos_vm_product, recordar que el prefijo jos_ no tiene porque ser el prefijo que ustedes tienen en los nombres de las tablas. Es mas, cuando instalen su joomla por seguridad es conveniente cambiar ese prefijo por otro que solo usted conozca, les hara la vida algo mas dificil a quien intente fastidiarle. Una vez localizada la tabla haremos clic en el nombre de la tabla y arriba en la pestaña Estructura,luego abajo del todo en Añadir campos, seleccionamos donde lo vamos a situar y a continuar, que en este caso lo situaremos debajo del campo SKU de virtuemart.

 

Añadir campo nuevo en tabla  MySql desde Phpmyadmin
Una vez que le hemos pinchado en continuar, vamos a pasar a darle un nombre y unas caracteristicas a nuestro campo situado debajo del campo SKU. Siguiendo las necesidades de las peticiones realizadas en el foro vamos a insertar un campo llamado "Mi Codigo" . En la siguiente pantalla que nos sera mostrada despues de pinchar en continuar, observaremos las distintas opciones como muestro en la siguiente imagen.

Insercion nombre campo y caracteristicas del mismo

Campo:
Ahi pondremos el nombre de nuestro campo, que en este caso sera mi_codigo , a recordar para las modificaciones en los archivos php.

Tipo:
VARCHAR es la abreviatura en castellano de Caracteres variados, pudiendo aplicar numero, letras... a nuestro codigo. Se puede aplicar otra forma, segun el campo que deseen añadir.

Longitud/Valores
:
Es el numero de caracteres permitidos

Cotejamiento:
El sistema de codificacion que vamos a utilizar

Nulo:
Señalando esa opcion, tendremos la opcion de dejar vacio el campo.

Auto increment
:
Señalando "Auto Increment", cada vez que se agregue un registro aumentará en 1 el valor en el caso de ser numeracion.

Una vez rellenado pinchamos en GRABAR y ya tendremos mas o menos lista base de datos.

El siguiente paso son las modificaciones en los archivos php, que paso a comentar.

En administrator/components/com_virtuemart/html/ editaremos el archivo product.product.form.php, bien desde nuestro cliente FTP o descargando el archivo a nuestro ordenador para luego una vez realizados los cambios actualizar el archivo, lo cual sera valido en ambos casos y para los demas archivos a modificar, parchear o hackear como lo quieran llamar.
Un editor gratuito excelente para editar codigos --> Notepad ++

Edicion archivo product.product.form.php:

Busquen estas lineas de codigo en el archivo sobre la linea 217.

<tr class="row1">
<td width="21%" >
<div style="text-align:right;font-weight:bold;"><?php echo $VM_LANG->_('PHPSHOP_PRODUCT_FORM_SKU') ?>:</div>
</td>
<td width="79%">
<input type="text" class="inputbox"  name="product_sku" value="<?php $db->sp("product_sku"); ?>" size="32" maxlength="64" />
</td>
</tr>

Justo despues de estas lineas añadan el siguiente codigo.

<tr class="row1"> 
<td width="21%" ><div style="text-align:right;font-weight:bold;"><?php echo $VM_LANG->_('PHPSHOP_PRODUCT_FORM_MI_CODIGO') ?>:</div>
</td>
<td width="79%" height="2">
<input type="text" class="inputbox"  name="mi_codigo" value="<?php $db->sp("mi_codigo"); ?>" size="32" maxlength="64" />
</td>
</tr>

Se entiende que donde he puesto mi_codigo es el nombre del campo añadido a la tabla de la base de datos con lo cual si han puesto otro nombre al campo añadido en la tabla de la base de datos deberan poner el mismo.

Para activar el campo actualizado en su base de datos en administrator/components/com_virtuemart/classes/ editen el archivo ps_product.php y en sobre la linea 275 como se muestra en el siguiente codigo:

// Insert into DB
$fields = array ( 'vendor_id' => $vendor_id,
'product_parent_id' => vmRequest::getInt('product_parent_id'),
'product_sku' => vmGet($d,'product_sku'),

Añadan justo despues el siguiente codigo:

'mi_codigo' => vmGet($d,'mi_codigo'),

Y en el mismo archivo sobre la linea 475 haremos el mismo cambio, podran visualizar la similitud del codigo.

Luego para ponerle un nombre al campo traducido al castellano (español) editaremos el archivo spanish.php situado en administrator/components/com_virtuemart/languages/product/ sobre la linea 50 como se muestra aqui

'PHPSHOP_PRODUCT_FORM_SKU' => 'SKU',

Añadiremos justo despues el siguiente codigo:

'PHPSHOP_PRODUCT_FORM_MI_CODIGO' => 'Mi Codigo', 
O como lo quieran llamar.

Ahora vamos a incluir este nuevo campo para las busquedas que se realizen con el objetivo encontrar un producto por su codigo, que es este caso, pero que podria ser del tipo de campo que hayan decidido añadir. Para esa tarea deberemos editar el archivo product.product.list.php que esta en administrator/components/com_virtuemart/html/ y sobre la linea 73 como se muestra en el siguiente cofigo:
$search_sql .= "#__{vm}_product.product_sku LIKE '%$keyword%' OR \n";
Añadiremos justo despues el siguiente codigo:

$search_sql = " (#__{vm}_product.mi_codigo LIKE '%$keyword%' OR \n";
Y para finalizar este pequeño tutorial o parche para añadir campos a los productos de la extension virtuemart de Joomla, les voy a mostrar como realizar el añadido para que el nombre o numero que se le asigne a un producto no pueda ser duplicado.

Editaremos el archivo ps_product.php situado en administrator/components/com_virtuemart/classes/ y sobre la linea 42 veran el siguiente codigo.

$q = "SELECT product_id,product_thumb_image,product_full_image FROM #__{vm}_product WHERE product_sku='";
$q .= $d["product_sku"] . "'";
$db->setQuery($q); $db->query();
if ($db->next_record()&&($db->f("product_id") != $d["product_id"])) {
$vmLogger->err( "A Product with the SKU ".$d['product_sku']." already exists." );
$valid = false;
}

Justo despues deberan añadir el siguiente codigo:

$q = "SELECT product_id,product_thumb_image,product_full_image FROM #__{vm}_product WHERE mi_codigo='";
$q .= $d["mi_codigo"] . "'";
$db->setQuery($q); $db->query();
if ($db->next_record()&&($db->f("product_id") != $d["product_id"])) {
$vmLogger->err( "Un producto con este codigo ".$d['mi_codigo']." ya existe." );
$valid = false;
}
Espero les sirva de ayuda, como siempre. Este hack esta en ingles en los foros de virtuemart, pero al ver que no explicaba claramente por ejemplo como añadir campos en una tabla o distintas opciones a tener en cuenta en el caso de querer añadir un campo diferente y todo en ingles considere oportuno realizar uno propio en castellano.

+NUEVO

Si no quieren complicarse la vida les doy la opcion de dos Quickstart con todo montado y en español, enviar un SMS y descargar

Pack Joomvir y Joomvir 2 - Quickstart joomla + Virtuemart listos para vender online en Español

Comentarios   

 
0 #15 Version virtuemartrobert 27-02-2012 17:55
¿Que version estas utilizando? Acabo de comprobarlo en la version 1.1.9 y ese codigo aparece tal como lo indican en este tutorial.

Cito a yeyupa:
Pues gracias por el esmero del post, pero me surgio duda, todo iba bien hasta lo que sigue de Para activar el campo actualizado en su base de datos en administrator/components/com_virtuemart/classes/ editen el archivo ps_product.php y en sobre la linea 275 como se muestra en el siguiente codigo:
no encuentro ninguna linea que se paresca a 'PHPSHOP_PRODUCT_FORM_SKU' => 'SKU',
posiblemente por que mi version de vm es 1.1.9
Saludos
Reportar al moderador
 
 
0 #14 En VM 1.1.9yeyupa 24-02-2012 23:09
Pues gracias por el esmero del post, pero me surgio duda, todo iba bien hasta lo que sigue de Para activar el campo actualizado en su base de datos en administrator/c omponents/com_v irtuemart/class es/ editen el archivo ps_product.php y en sobre la linea 275 como se muestra en el siguiente codigo:
no encuentro ninguna linea que se paresca a 'PHPSHOP_PRODUCT_FORM_SKU' => 'SKU',
posiblemente por que mi version de vm es 1.1.9
Saludos
Reportar al moderador
 
 
0 #13 Como Logro Hacer que se Muestre en el Front?arkanoyd 03-09-2011 12:13
Hola A Todos, Segui este tutorial y la verdad, como aqui lo explicas es muy facil y concreto, mis respetos, es excelente ya que lo logré hacer sin complicaciones, Muchas gracias !

Pero como hago para que este campo que se ha dado de alta, o que se ha configurado, aparezca en el front?
Reportar al moderador
 
 
0 #12 Publicar los nuevos campos en el front?Sirhowar 17-03-2011 05:11
Ha muy fácil, gracias.
-¿Cómo puedo hacer para que se muestren los nuevos campos en el front-end?
Reportar al moderador
 
 
+1 #11 muzas 20-06-2010 17:56
Ha sido muy útil y muy fácil, gracias
-¿Cómo puedo hacer para que se muestren los nuevos campos en el front?
- A veces cuando introduzco los datos, le doy a guardar y al refrescar la página desaparecen
Reportar al moderador
 
 
0 #10 nano02 22-04-2010 21:05
A ver si logro explicarme que es algo que no se me da bien:
Necesito un campo para introducir el año del articulo, le he llamado FECHA con una longitud de 4 y VARCHAR.
Funciona todo correctamente, se visualiza en el apartado de añadir productos, se da de alta correctamente en la base de datos etc,etc.
El problema lo tengo a la hora de visualizarlo, he modificado el template, añadido la cabecera pero no me visualiza este campo ¿¿?? la misma linea que he añadido la modifico cambiando solamente el nombre del campo para ver que si me he equivocado en el codigo y cambio el nombre por el del campo product_sku y si funciona, entonces no entiendo que pasa, he probado el tipo INT y el DATE y sigue igual
Reportar al moderador
 
 
+3 #9 redlo 22-04-2010 17:48
Si lo he entendido bien... Este es otro campo o el del año que querias añadir y por eso te preguntaba que habias seleccionado en Tipo, ya que tienes la posibilidad de incorporar alguna de las opciones DATE and TIME y no la de VARCHAR. De todas formas revisa bien los añadidos y modificaciones de los archivos php. Y si vas a utilizar una numeracion y quieres que se actualize debes selecionar la opcion AUTO INCREMENT en las caracteristicas del campo.
Reportar al moderador
 
 
0 #8 nano02 22-04-2010 16:26
Cito a redlo:
En la opcion Tipo ¿que has seleccionado?

Ya he conseguido que me actualice la tabla, no habia cambiado el nombre de campo en una linea, he puesto tipo VARCHAR de longitud 4 porque me interesa el año solamente, el problema que tengo ahora es que no me visualiza el campo en la lista de productos, si pongo cualquier otro campo me lo visualiza pero el nuevo no, he copiado incluso un campo de la tabla y le he cambiado el nombre, el tipo, null... todo pero no hay manera de que visualice este campo
Reportar al moderador
 
 
0 #7 redlo 21-04-2010 21:26
En la opcion Tipo ¿que has seleccionado?
Reportar al moderador
 
 
0 #6 nano02 21-04-2010 16:47
Hola, he seguido este manual paso a paso porque queria añadir un campo de fecha de fabricacion a los productos y todo correcto excepto que no me acualiza la tabla, se queda siempre con el mismo valor por defecto, ¿he hecho algo mal?
Reportar al moderador
 

Debe registrarse para poder Comentar

Crear un Negocio Rentable en internet....
Presupuesto tienda online En estos tiempos que vivimos de crisis generalizada, personas que nunca pensaron que iban a tener nada que ver con internet y menos montar una tienda online, hoy dia lo ven como una salida a la situacion generada......
Plantillas web Joomla! para Móviles RWD
Plantillas Responsive Web Design Todos conocemos el avance imparable de la nueva forma de navegación a través de nuestro inseparable teléfono móvil y que el futuro ya ha llamado a nuestra puerta......
Extensiones joomla! a Medida
Creación Extensiones joomla! a Medida Creación extensiones Joomla! a medida, para su empresa y o negocio, le daremos forma a su idea. Con estilo original y profesional....

Suscribete a los Boletines para recibir las últimas novedades.

Suscribirse

Suscribete a los Boletines para recibir las últimas novevdades.