MSI Posted July 5, 2016 Share Posted July 5, 2016 (edited) 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 July 6, 2016 by vicentealtas (see edit history) Link to comment Share on other sites More sharing options...
MSI Posted July 6, 2016 Author Share Posted July 6, 2016 (edited) 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 July 6, 2016 by vicentealtas (see edit history) Link to comment Share on other sites More sharing options...
MSI Posted July 15, 2016 Author Share Posted July 15, 2016 Nadie tiene ni idea?? aunquesea que me guie? o no se entiende mi problema?? gracias de nuevo Link to comment Share on other sites More sharing options...
buhoplace Posted July 15, 2016 Share Posted July 15, 2016 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. 1 Link to comment Share on other sites More sharing options...
MSI Posted July 18, 2016 Author Share Posted July 18, 2016 (edited) 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 July 18, 2016 by vicentealtas (see edit history) Link to comment Share on other sites More sharing options...
buhoplace Posted July 19, 2016 Share Posted July 19, 2016 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; controller: cart add: 1 ajax: true qty: 1 id_product: 7 token: 628851898dc0dfbfe83b94a9fa79af2a 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. 1 Link to comment Share on other sites More sharing options...
MSI Posted July 19, 2016 Author Share Posted July 19, 2016 (edited) 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; controller: cart add: 1 ajax: true qty: 1 id_product: 7 token: 628851898dc0dfbfe83b94a9fa79af2a 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 July 19, 2016 by vicentealtas (see edit history) Link to comment Share on other sites More sharing options...
buhoplace Posted July 19, 2016 Share Posted July 19, 2016 (edited) 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 July 19, 2016 by buhoplace (see edit history) 1 Link to comment Share on other sites More sharing options...
MSI Posted July 20, 2016 Author Share Posted July 20, 2016 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 More sharing options...
buhoplace Posted July 20, 2016 Share Posted July 20, 2016 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. 1 Link to comment Share on other sites More sharing options...
MSI Posted July 27, 2016 Author Share Posted July 27, 2016 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 More sharing options...
MSI Posted September 30, 2016 Author Share Posted September 30, 2016 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now