Crear nueva columna en base de datos para crear nuevo campo en productos
Recordar que el prefijo jos_ no tiene porque ser el prefijo que ustedes tienen en los nombres de las tablas.
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 / Nombre:
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 SOLO para Virtuemart 1.
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 ++
Edición 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 código.
<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.
// 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.
$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.
$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.
En Versiones Virtuemart 3 tenemos la opción de serie en Productos / Campos Personalizados.
Hola, lei el que esta en ingles y no me entere ni de la mitad. Y con este tuyo en un abrir y cerra de ojos. Otra vez me salvaste la vida 😆
¿Y por qué no hacerlo como dice el manual en [url=http://virtuemart.net/documentation/User_Manual/Product_Types.html]4.6.5. Product Types Management[/url] que no requiere trastear con nada externo al web interface de VirtueMart? ¿O estamos hablando de cosas diferentes?
Si y No. En el tutorial que redacte sobre virtuemart la opcion “[b]Añadir tipo de producto[/b]” Justamente aqui http://solojoomla.com/tutorial-virtuemart-en-espanol-para-joomla/4.html pongo “Proximamente” . Esta opcion es para [u]tipos de productos[/u]. Aqui se trata de añadir campos, no en los detalles de un producto. Aunque seguramente has hecho bien en decirmelo ya que puede conducir a error. Vere como precisar este punto. Gracias.
Lo siento, sigo sin entender la diferencia. Lo que me parecía que decía el manual, es que si quieres añadir propiedades personalizadas a un producto, el modo es primero crear un tipo de producto nuevo, y luego crear dentro de éste nuevos parámetros (campos). Todo mediante el interface web.
Es decir, uno crea el tipo de producto “camiseta”, y luego en éste, puedes añadir el campo “color” a la lista de los que ya te proporciona VirtueMart. Así los nuevos productos que crees, a los cuáles les asignes el tipo “camiseta” tendrán un campo “color” que el resto no tendrán.
Ya hice la precison. Es simple, esto sirve para añadir campos por ejemplo una numeracion o codigo propio y no la que asigna por defecto virtuemart a cada producto, numeracion o nombre. En el caso de numeracion que pueda auto incrementarse de forma automatica. Esto no es posible con la opcion “Añadir tipos de producto” cuando se le añade un parametro al tipo de producto.
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?
En la opcion [b]Tipo[/b] ¿que has seleccionado?
[quote name=”redlo”]En la opcion [b]Tipo[/b] ¿que has seleccionado?[/quote]
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
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.
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
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
Publicar los nuevos campos en el front?
Ha muy fácil, gracias.
-¿Cómo puedo hacer para que se muestren los nuevos campos en el front-end?
Como Logro Hacer que se Muestre en el Front?
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?
En VM 1.1.9
Pues gracias por el esmero del post, pero me surgio duda, todo iba bien hasta lo que sigue de [b]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:[/b]
no encuentro ninguna linea que se paresca a ‘[b]PHPSHOP_PRODUCT_FORM_SKU’ => ‘SKU’,[/b]
posiblemente por que mi version de vm es 1.1.9
Saludos
Version virtuemart
¿Que version estas utilizando? Acabo de comprobarlo en la version 1.1.9 y ese codigo aparece tal como lo indican en este tutorial.
[quote name=”yeyupa”]Pues gracias por el esmero del post, pero me surgio duda, todo iba bien hasta lo que sigue de [b]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:[/b]
no encuentro ninguna linea que se paresca a ‘[b]PHPSHOP_PRODUCT_FORM_SKU’ => ‘SKU’,[/b]
posiblemente por que mi version de vm es 1.1.9
Saludos[/quote]