Jump to content

Modificar los valores de un producto (precio,imagen) desde codigo


Recommended Posts

Buenas muchas gracias desde ya por la ayuda

 

Mi problema es el siguiente tengo un iframe (que sirve mi proevedor) en el que puedes configurar un producto este iframe devuelve una url :

 

http://212.34.130.180/~pruebaborr/es/?ref=100-30-MD-A-P-10-0-0&oro=18&img=http%3A%2F%2Fp-j.es%2Fgestion%2Fadm%2Fweb%2Fduoo%2Fimg%2Falianzas%2F100%2Falianzas%2F100-30-A-P-0-0.png&precio=240%2C00

 

 

Os la separo para que se vea bien

 

http://212.34.130.180/~pruebaborr/es/?

 

ref=100-30-MD-A-P-10-0-0&oro=18&

 

img=http%3A%2F%2Fp-j.es%2Fgestion%2Fadm%2Fweb%2Fduoo%2Fimg%2Falianzas%2F100%2Falianzas%2F100-30-A-P-0-0.png

 

&precio=240%2C00

 

 

esta url contiene toda la informacion que necesito para generar un producto y asi porder realizar el proceso normal de compra de prestashop

 

  • ref (referencia)
  • oro (calidad)
  • img (URL completa)
  • precio (en euros)

Pero no se como coger los valores de la url que genera y tampoco se como meterlos en un producto

 

Aclaro que la url que genera puedo modificar esta parte unicamente http://212.34.130.180/~pruebaborr/es/

 

Gracias de nuevo y un saludo cualquier duda o si no me explicado bien comentarmelo

 

Tengo instalado  PrestaShop™ 1.6.0.14 - 1.872s

 

--------------------------------------------------------------------------------------------------------------------------------------------->

 

Si alguien me puede ayudar almenos a sobreescribir el precio de un producto por ejemplo en product.php e escrito esto y efectivamente el producto 1 me aperece hola, solo me queda saber sobreescribir el precio que ya tiene

 

 if ($id_product == (int)1) {echo"hola";}

 

no se si es posible gracias de nuevo

Edited by vicentealtas (see edit history)
Link to comment
Share on other sites

He metido en el product.php este codigo

 

         if ($id_product == 1) { $price= $_GET["precio"];

 

                                           $prices =(float)str_replace(',', '.', $price); 

                                            return $prices; }

 

aparece el precio como podeis ver aqui:

 

 

 

http://212.34.130.180/~pruebaborr/es/inicio/1-prueba.html?ref=100-30-MD-A-P-10-0-0&oro=18&img=http://p-j.es/gestion/adm/web/duoo/img/alianzas/100/alianzas/100-30-A-P-0-0.png&precio=240,00

 

pero al agregarlo al carrito el precio desaparece ese es mi principal problema (la referencia y la imagen todabia no se como pasarla)

 

 

edit: si meto un valor fijo si que funciona asique imagino que el problema es el casteo que no se muy bien como recoge los valores prestashop

 

 

 

  if ($id_product == 1) { $price= $_GET["precio"];

 

                                           $price=(float)80.00;

                                            return $price; }

 

 

 

 

 

 

 

Haber si alguien puede echarme una mano gracias

Edited by vicentealtas (see edit history)
Link to comment
Share on other sites

  • 2 weeks later...

Cuando agregas un producto al carrito, este se añade mediante su id de producto e id de attributo. no puedes modificar el precio así como así, ya que cada combinación del producto tiene un precio.

 

En temas/tuTema/js/modules/blockcart/ajax-cart.js tienes el post que hace para añadir el producto, ahí puedes añadir más parametros.

 

Después llama a la funcion de classes/Cart/updateQty(), para añadir el producto, en dicho método tienes un hook que puedes utilizar;

 

Después crea, o actualiza una nueva combinación con dicho precio y parámetros.

  • Like 1
Link to comment
Share on other sites

Cuando agregas un producto al carrito, este se añade mediante su id de producto e id de attributo. no puedes modificar el precio así como así, ya que cada combinación del producto tiene un precio.

 

En temas/tuTema/js/modules/blockcart/ajax-cart.js tienes el post que hace para añadir el producto, ahí puedes añadir más parametros.

 

Después llama a la funcion de classes/Cart/updateQty(), para añadir el producto, en dicho método tienes un hook que puedes utilizar;

 

Después crea, o actualiza una nueva combinación con dicho precio y parámetros.

 

 

 

Muchas gracias lo primero por contestar voy a averiguar todo lo que pueda sobre lo que me has comentado

 

Pero te adjunto el ultimo codigo que modifique por si se podria areglar

 

 

esta en  /classes/product.php

 

         if ($id_product == 1)

         {

          

 

          if(is_null($globalvar)){

          $price= $_GET["precio"];

           $prices =(float)str_replace(',', '.', $price);

              //$prices=(float)80.00;                                   -----------------------> Esta linea funciona es decir le puedo asignar el precio que quiera el producto con id 1 vandra 80 el problema es :

           $globalvar = $prices;

               return $prices;

          

          }else{

           return $globalvar;}

             

                                   }

 

 

problema---> Yo quiero asignarle el precio desde una url con esto ($price= $_GET["precio"] cojo el precio de la url y lo paso a una variable, mi idea que uan vez pasada a una variable sea lo mismo que con $prices=(float)80.00; un valor fijo pero no se como filtrarlo por if y tampoco que ese valor se quede guardado

 

no se si me explico?¿

 

muchas gracias

Edited by vicentealtas (see edit history)
Link to comment
Share on other sites

Entiendo lo que dices, el valor ya lo tienes, simplemente tienes que crear o coger una combinación con este precio, para añadirla al carrito.

 

Mira la clase Combination,

Al crearla, debes asegurarte que updateQty la recibe o modificarla en un hook.

 

El controlador ajax envia esto;

 

  1. controller:
    cart
  2. add:
    1
  3. ajax:
    true
  4. qty:
    1
  5. id_product:
    7
  6. token:
    628851898dc0dfbfe83b94a9fa79af2a
  7. ipa:
    34
 
ipa = id_product_attribute, si te fijas en la tabla, este tiene su precio. Debes hacer o cambiar esto antes de que lo envie, o una vez enviado cambiarlo como dije antes. O simplemente cambiar el controlador, y hacer uno tuyo donde lo añadas.
  • Like 1
Link to comment
Share on other sites

 

Entiendo lo que dices, el valor ya lo tienes, simplemente tienes que crear o coger una combinación con este precio, para añadirla al carrito.

 

Mira la clase Combination,

Al crearla, debes asegurarte que updateQty la recibe o modificarla en un hook.

 

El controlador ajax envia esto;

 

  1. controller:
    cart
  2. add:
    1
  3. ajax:
    true
  4. qty:
    1
  5. id_product:
    7
  6. token:
    628851898dc0dfbfe83b94a9fa79af2a
  7. ipa:
    34
 
ipa = id_product_attribute, si te fijas en la tabla, este tiene su precio. Debes hacer o cambiar esto antes de que lo envie, o una vez enviado cambiarlo como dije antes. O simplemente cambiar el controlador, y hacer uno tuyo donde lo añadas.

 

 

Muchas gracias por la ayuda deverdad que estoy atascado,  realmente esto

 

Mira la clase Combination,

Al crearla, debes asegurarte que updateQty la recibe o modificarla en un hook.

 

 no echo nada nunca con esas clases ni constructores asique ando un poco perdido

 

no se donde estan ni como crearlas lo voy a investigar todo lo posible y te comento lo que vea

 

(parece que me quede tan poco pero ando tan perdido jaja)

 

gracias de nuevo voy a ver

Edited by vicentealtas (see edit history)
Link to comment
Share on other sites

Una idea asi rapida:

 

En ajax-cart.js

 

busca donde se añade al carrito por ajax, (linea 328 en mi caso);

 

podemos añadir; la variable, precioreal;

var precio_real= $("#precioreal").val();

data: 'controller=cart&add=1&ajax=true&qty=' + ((quantity && quantity != null) ? quantity : '1') + '&id_product=' + idProduct + '&token=' + static_token + ( (parseInt(idCombination) && idCombination != null) ? '&ipa=' + parseInt(idCombination): '' + '&id_customization=' + ((typeof customizationId !== 'undefined') ? customizationId : 0)  +"&precio_real="+precio_real),

En Controllador frontal, CartController;

 public function init()
    {
        parent::init();

        // Send noindex to avoid ghost carts by bots
        header('X-Robots-Tag: noindex, nofollow', true);

        // Get page main parameters
        $this->id_product = (int)Tools::getValue('id_product', null);
        $this->id_product_attribute = (int)Tools::getValue('id_product_attribute', Tools::getValue('ipa'));
        $this->customization_id = (int)Tools::getValue('id_customization');
        $this->qty = abs(Tools::getValue('qty', 1));
        $this->id_address_delivery = (int)Tools::getValue('id_address_delivery');
        $this->precio_real = Tools::getValue('precio_real');
    }

En; processChangeProductInCart  Busca donde añade el updateQty

$update_quantity = $this->context->cart->updateQty($this->qty, $this->id_product, $this->id_product_attribute, $this->customization_id, Tools::getValue('op', 'up'), $this->id_address_delivery,$this->precio_real);

En la clase Cart, añade tu parámetro

public function updateQty($quantity, $id_product, $id_product_attribute = null, $id_customization = false,
$operator = 'up', $id_address_delivery = 0, Shop $shop = null, $auto_add_cart_rule = true,$precio_real=0)
{

Ya tenemos el precio real,

 

podemos hacer algo asi:

 

 

if($precio_real!=0){

  if($precio_real!=combinacion->precio){

  // creamos nueva combinacion o actualizamos

 

}

}

Edited by buhoplace (see edit history)
  • Like 1
Link to comment
Share on other sites

Una idea asi rapida:

 

En ajax-cart.js

 

busca donde se añade al carrito por ajax, (linea 328 en mi caso);

 

podemos añadir; la variable, precioreal;

var precio_real= $("#precioreal").val();

data: 'controller=cart&add=1&ajax=true&qty=' + ((quantity && quantity != null) ? quantity : '1') + '&id_product=' + idProduct + '&token=' + static_token + ( (parseInt(idCombination) && idCombination != null) ? '&ipa=' + parseInt(idCombination): '' + '&id_customization=' + ((typeof customizationId !== 'undefined') ? customizationId : 0)  +"&precio_real="+precio_real),

En Controllador frontal, CartController;

 public function init()
    {
        parent::init();

        // Send noindex to avoid ghost carts by bots
        header('X-Robots-Tag: noindex, nofollow', true);

        // Get page main parameters
        $this->id_product = (int)Tools::getValue('id_product', null);
        $this->id_product_attribute = (int)Tools::getValue('id_product_attribute', Tools::getValue('ipa'));
        $this->customization_id = (int)Tools::getValue('id_customization');
        $this->qty = abs(Tools::getValue('qty', 1));
        $this->id_address_delivery = (int)Tools::getValue('id_address_delivery');
        $this->precio_real = Tools::getValue('precio_real');
    }

En; processChangeProductInCart  Busca donde añade el updateQty

$update_quantity = $this->context->cart->updateQty($this->qty, $this->id_product, $this->id_product_attribute, $this->customization_id, Tools::getValue('op', 'up'), $this->id_address_delivery,$this->precio_real);

En la clase Cart, añade tu parámetro

public function updateQty($quantity, $id_product, $id_product_attribute = null, $id_customization = false,
$operator = 'up', $id_address_delivery = 0, Shop $shop = null, $auto_add_cart_rule = true,$precio_real=0)
{

Ya tenemos el precio real,

 

podemos hacer algo asi:

 

 

if($precio_real!=0){

  if($precio_real!=combinacion->precio){

  // creamos nueva combinacion o actualizamos

 

}

}

 

 Muchisimas gracias de nuevo es una pasada la ayuda que m estas proporcionando

 

te comento unas dudillas

 

En la clase Cart, añade tu parámetro -------> aqui yo lo he añadido a Cart.php ya que existia tal cual pero sin precio real es correcto?

 

luego donde pone

podemos hacer algo asi:

 

 

if($precio_real!=0){

  if($precio_real!=combinacion->precio){

  // creamos nueva combinacion o actualizamos

 

}

 

 

No se donde devo ponerlo Product.php?? ademas no se crear la combinacion (aun asi lo voy a buscar)

 

te paso el resultado http://212.34.130.180/~pruebaborr/es/inicio/1-prueba.html?ref=100-30-MD-A-P-10-0-0&oro=18&img=http%3A%2F%2Fp-j.es%2Fgestion%2Fadm%2Fweb%2Fduoo%2Fimg%2Falianzas%2F100%2Falianzas%2F100-30-A-P-0-0.png&precio=240%2C00%20%3E%3E%20212.34.130.180/~pruebaborr212.34.130.180/~pruebaborr/es/inicio/1-prueba.html?ref=100-30-MD-A-P-10-0-0&oro=18&img=http://p-j.es/gestion/adm/web/duoo/img/alianzas/100/alianzas/100-30-A-P-0-0.png&precio=240,00

 

Como puedes ver el carrito ha dejado de funcionar, estoy tratando de descubrir porque se queda enganchado

 

De nuevo gracias

Link to comment
Share on other sites

Lo suyo seria tener el precio real obtenido por parámetro, el que pones por la api o frame que recoges, 

 

Luego necesitamos cambar la combinación, lo suyo seria antes comprobar si ya existe una, si vamos creando combinaciones todo el rato quizas se nos llene bastante la tabla con parámetros, que podemos reutilizar sin tener que crear una y otra vez.

 

Aunque debes tener en cuenta, los atributos que tiene dicha combinación por lo que si son los mismos, comprobamos si el precio coincide, si no actualizamos el precio.;

 

 

Debajo de;

if ($id_product_attribute) {
            $combination = new Combination((int)$id_product_attribute);
            if ($combination->id_product != $id_product) {
                return false;
            }
        } 

Pon :

if($precio_real!=0){
  if($precio_real!=$combination->price){
 $combination->price = $precio_real;
 $combination->update(); // ACTUALIZAMOS @ver ObjectModel.
  }
}

Lo único que debes controlar, son los atributos.

  • Like 1
Link to comment
Share on other sites

Lo suyo seria tener el precio real obtenido por parámetro, el que pones por la api o frame que recoges, 

 

Luego necesitamos cambar la combinación, lo suyo seria antes comprobar si ya existe una, si vamos creando combinaciones todo el rato quizas se nos llene bastante la tabla con parámetros, que podemos reutilizar sin tener que crear una y otra vez.

 

Aunque debes tener en cuenta, los atributos que tiene dicha combinación por lo que si son los mismos, comprobamos si el precio coincide, si no actualizamos el precio.;

 

 

Debajo de;

if ($id_product_attribute) {
            $combination = new Combination((int)$id_product_attribute);
            if ($combination->id_product != $id_product) {
                return false;
            }
        } 

Pon :

if($precio_real!=0){
  if($precio_real!=$combination->price){
 $combination->price = $precio_real;
 $combination->update(); // ACTUALIZAMOS @ver ObjectModel.
  }
}

Lo único que debes controlar, son los atributos.

Estoy intentadolo pero aun me falta por ubicar algunas cosas aun asi he parado unos dias y te dire que tal en unos dias que lo retome muchas gracias y en poco hablamos

Link to comment
Share on other sites

  • 2 months later...

Estoy intentadolo pero aun me falta por ubicar algunas cosas aun asi he parado unos dias y te dire que tal en unos dias que lo retome muchas gracias y en poco hablamos

Buenas retorno al proyecto y todabia no doy con la solucion, he pensado algo antes de seguiir con la modificacion de las conbinaciones que me comentaste es posible crear una pagina php que recoja los valores de forma sencilla (incluyendo la cabecera y footer (eso es facil ya lo tengo )

 

Me faltaria desde ese mismo archivo generar el articulo que se envie al carrito e visto que se puede crear un pedido desde php lo que no se es el pago como se lleva a cabo por parte del comprador

 

este es el codigo que he visto:

 

https://www.prestashop.com/forums/topic/228545-webservice-api-how-to-create-a-full-order-customer-cart-and-order/

 

 

Muchas gracias de nuevo y haber si con tu ayuda consigo terminar esto te lo agradezco

 

Un saludo

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...