Bienvenido a los foros %s

Foro comunidad hispana Dolibarr

Identificarse Registrarse

Insertar nuevos datos en mysql

Cuestiones sobre cómo utilizar Dolibarr, ayudas sobre las funcionalidades o cualquier cuestión que no está relacionada con un error.
yetroo
Soldado
Mensajes: 121
Registrado: Vie, 03/02/2017, 15:35

Insertar nuevos datos en mysql

Mensaje por yetroo »

Saludos comunidad.

les planteo mi duda.
En productos necesito algunos campos adicionales, que ya he insertado en product.class.php ( por ejemplo)
var $agregado; //
$sql.= ", agregado = '" . $this->db->escape($this->agregado) ."'"; //
y en $sql = "UPDATE ".MAIN_DB_PREFIX."product";

y en card.php
// Add a product or service
$object->agregado = GETPOST('agregado');
// Update a product or service
$object->agregado = GETPOST('agregado');

Hasta aqui ninguna novedad, los campos nuevos se ven y "parece" que son modificables, pero a la hora de
insertarlos no los guarda en mysql (que ya estan en la tabla product).

En cambio si los inserto desde mysql si son visibles.

/* Modo vista */

Imagen
# Modo edicion

Imagen

Vale aclarar que utilizar los campos adicionales de productos no es una opcion muy viable en mi caso, por eso
he decido que esten en la misma tabla ( llx_product )

Si alguien puede decirme donde esta mi error le agradeceria mucho

gracias.

Avatar de Usuario
aduart
Yoda
Mensajes: 1086
Registrado: Mié, 06/06/2012, 19:37

Mensaje por aduart »

Hola. Si amplias una tabla, tenes que ampliar todos los archivos que usan esa tabla.
Podes seguir el nombre de algun campo de la tabla para ver por todos los lados
que aparece, y en esos puntos poner los nuevos campos.

Saludos,
Eduardo.

yetroo
Soldado
Mensajes: 121
Registrado: Vie, 03/02/2017, 15:35

Mensaje por yetroo »

Gracias por responder.

Si, efectivamente eso es lo que he hecho, siguiendo como guia
donde aparecen, asi es como he logrado que aparezcan tanto en
modo edicion como en modo vista, pero lograr insertarlo en la
base de datos aun no lo consigo.

Miguel AR
Novato
Mensajes: 24
Registrado: Mié, 21/09/2016, 12:42

Mensaje por Miguel AR »

Hola,

¿Y por qué no usas el módulo de producto adicionales?, ahí puedes añadir cualquier campo que necesites si necesidad de editar el código fuente.

Inicio -> Configuración -> Módulos -> Productos -> Atributos Adicionales.

Y ahí configuras el/los campos que necesites:
- (Listas)
- (Casillas de verificación)
- (Texto)
- (Y muchos más)

De la manera que tu lo comentas también se puede, pero el día que quieras actualizar de versión, vas a tener que hacerlo con mucho cuidado ya que se te pisarán los cambios que estas efectuando. Deberías evitar siempre como programador editar el código fuente.

Si esto no se adapta a tus necesidades siempre puedes crearte tu pantalla personalizada.

Crear tu módulo que realice un alter de la tabla producto añadiendo los campos que necesites.
Y si no quieres hacer de cero la pantalla del producto, copiar la actual y modificar la al gusto.
En el caso de la clase hacer la tuya propia que extienda de producto añadiendo los datos adicionales a guardar.

Ejemplo de la clase:

Código: Seleccionar todo

require_once ( DOL_DOCUMENT_ROOT .  '/product/class/product.class.php' );

class MyProduct extends Product
{
  
  public $myExtraField;
  
  /*
  * No necesario, por si quieres añadirle algo más
  */
  public function __construct($db)
  {
  	parent::__construct($db);
  }
  
  public function create(User $user, $noTrigger = 0)
  {
	$idProduct = parent::create($user, $noTrigger);
    	
    if($idProduct < 0) return $idProduct; 
    
    $this->myExtraField = GETPOST('extrafield') ? GETPOST('extrafield') : null;

    $sql = [];
    array_push($sql, "UPDATE " . MAIN_DB_PREFIX . "product");
    array_push($sql, "SET my_extra_field = " . $this->db->escape($this->myExtraField))
    array_push($sql, "WHERE rowid = $idProduct");
	
    $this->db->begin();
    $query = $this->db->query(implode(' ', $sql));
    if($query) {
      $this->db->commit();
      return $idProduct;
    }

    $this->db->rollback();
    return $idProduct;
  }
El código esta hecho de prisa y corriendo, espero que sirva para hacerte una idea.


Un saludo, suerte.