Añadir nuevos campos en productos Virtuemart
- Categoría: Tutoriales Joomla
- Visto: 26707
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.

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.
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.

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
Cito a yeyupa:
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
Pero como hago para que este campo que se ha dado de alta, o que se ha configurado, aparezca en el front?
-¿Cómo puedo hacer para que se muestren los nuevos campos en el front-end?
-¿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
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
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
Suscripción de noticias RSS para comentarios de esta entrada.