soanix Posted July 7, 2011 Share Posted July 7, 2011 Saludos Compañeros de fatiga, Se que muchos estan locos como yo lo estaba hace 5 minutos, por saber como actualizar productos por la referencia, y no por la id del producto.Pues señores tengo la solución:Un ingles de esos que pregunta afirmando, comentó que había modificado una cosa y le funcionó, pero si el producto no estaba en el csv, se lo borraba. Pues gracias a ese codigo, que es verdad, no hacía del todo bien su funcion, saque lo que puede ser nuestra solución.Aqui va:Se necesitan unicamente 2 modificaciones:Buscamos el siguiente texto en el archivo product.php de la carpeta classes: public static function existsInDatabase($id_product) { $row = Db::getInstance()->getRow(' SELECT `id_product` FROM '._DB_PREFIX_.'product p WHERE p.`id_product` = '.(int)($id_product)); return isset($row['id_product']); } Justo después añadiremos esto otro: public static function refInDatabase($ref) { $sql = 'SELECT id_product FROM '._DB_PREFIX_.'product WHERE reference = \''.$ref.'\''; $tab = Db::getInstance()->getValue($sql); return $tab; } Así que quedará de esta manera: public static function existsInDatabase($id_product) { $row = Db::getInstance()->getRow(' SELECT `id_product` FROM '._DB_PREFIX_.'product p WHERE p.`id_product` = '.(int)($id_product)); return isset($row['id_product']); } public static function refInDatabase($ref) { $sql = 'SELECT id_product FROM '._DB_PREFIX_.'product WHERE reference = \''.$ref.'\''; $tab = Db::getInstance()->getValue($sql); return $tab; } Despues, buscaremos el archivo AdminImport.php el la carpeta /admin/tabs/En este doccumento buscaremos el codigo: if ($product->id AND Product::existsInDatabase((int)($product->id))) { $datas = Db::getInstance()->getRow('SELECT `date_add` FROM `'._DB_PREFIX_.'product` WHERE `id_product` = '.(int)($product->id)); $product->date_add = pSQL($datas['date_add']); $res = $product->update(); } Por encima de ese codigo añadiremos lo siguiente: if ($product->reference AND Product::refInDatabase($product->reference)) { $product->id = Product::refInDatabase($product->reference); } Así que quedará de esta manera: if ($product->reference AND Product::refInDatabase($product->reference)) { $product->id = Product::refInDatabase($product->reference); } if ($product->id AND Product::existsInDatabase((int)($product->id))) { $datas = Db::getInstance()->getRow('SELECT `date_add` FROM `'._DB_PREFIX_.'product` WHERE `id_product` = '.(int)($product->id)); $product->date_add = pSQL($datas['date_add']); $res = $product->update(); } Bueno señores a disfrutarlo.por cierto, está probado en la version 4.1. Link to comment Share on other sites More sharing options...
guillegm Posted July 8, 2011 Share Posted July 8, 2011 Muy interesante. ¿Funciona en 1.4.3?Pero, ¿porque no es posible actualizar nativamente los precios por referencia? Link to comment Share on other sites More sharing options...
soanix Posted July 8, 2011 Author Share Posted July 8, 2011 Mi version es la: PrestaShop™ 1.4.3así que si que funciona (LOGICAL) jajajaEso me gustaría saber a mi, tamnpoco es cambiar medio prestashop, son 4 lineas en uno y 4 lineas en otro. Link to comment Share on other sites More sharing options...
jaimemm Posted July 9, 2011 Share Posted July 9, 2011 Por qué tantas consultas SQL cuando sólo hace falta una? No sería muuuucho más fácil usar únicamente estas líneas?if ($product->id){ $datas = Db::getInstance()->getRow('SELECT `date_add` FROM `'._DB_PREFIX_.'product` WHERE `reference`=$product->reference); if (isset($datas['reference'])) { $product->date_add = pSQL($datas['date_add']); $res = $product->update(); }} Link to comment Share on other sites More sharing options...
soanix Posted July 9, 2011 Author Share Posted July 9, 2011 ese quit ala posivilidad de actualizar por id si quieres. Link to comment Share on other sites More sharing options...
guillegm Posted July 14, 2011 Share Posted July 14, 2011 Gracias Soanix, lo he probado y funciona correctamente, ahora puedo actualizar los precios por referencia. Funciona!!!Muchas gracias compañero!! Link to comment Share on other sites More sharing options...
outblast Posted July 17, 2011 Share Posted July 17, 2011 The problem is that deletes the missing fields for example if i don’t put the description, suplier, producer… in the csv. file, after update the product description, suplier, producer from the website disappears, please tell me what is wrong. TXS Link to comment Share on other sites More sharing options...
guillegm Posted July 20, 2011 Share Posted July 20, 2011 Referente a lo que dice el amigo anglosajón de arriba;Si actualizo los productos por ID, ¿necesito volver a poner todos los campos (despripción, fabricante, meta tags, etc...)? Es que yo solo necesito actualizar los precios._____________________________________________________If I update the items by ID, I need to fill in all fields? I only need update the price.SAludos!!! Link to comment Share on other sites More sharing options...
outblast Posted July 20, 2011 Share Posted July 20, 2011 if u update by ID i don't need to put all the fields, u can put only the id and the price, test first with 1 product, should work Link to comment Share on other sites More sharing options...
raitiamine Posted August 14, 2011 Share Posted August 14, 2011 Hi, After modification of Product.php file I have a blanck page and APACHE give me this error : [sun Aug 14 14:19:13 2011] [error] [client XX.XXX.XXX.XXX] PHP Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /var/www/classes/Product.php on line 3012 error in this line : $sql = 'SELECT id_product FROM '._DB_PREFIX_.'product WHERE reference = ''.$ref.'''; thank you Link to comment Share on other sites More sharing options...
soanix Posted August 30, 2011 Author Share Posted August 30, 2011 fix: $sql = "SELECT id_product FROM "._DB_PREFIX_."product WHERE reference = '".$ref."'"; Link to comment Share on other sites More sharing options...
pk2 Posted October 13, 2011 Share Posted October 13, 2011 Hola buenas, me da error en la siguiente linea del products.php $sql = 'SELECT id_product FROM '._DB_PREFIX_.'product WHERE reference = ''.$ref.'''; uso la version de ps 1.4.4.1 Puede ser devido a esto Link to comment Share on other sites More sharing options...
pk2 Posted October 13, 2011 Share Posted October 13, 2011 ok, la solucion la tengo un poco mas arriba, no me fije bien... graciaaaas Link to comment Share on other sites More sharing options...
infsistemas Posted October 18, 2011 Share Posted October 18, 2011 la nueva versión 1.4.5 ya tiene implementado esto Link to comment Share on other sites More sharing options...
soanix Posted October 24, 2011 Author Share Posted October 24, 2011 la nueva versión 1.4.5 ya tiene implementado esto Lo he provado y hace lo mismo que el mio, te manda todo a inicio y ale. Por suerte he creado un modulo que aun está en fase test, que hace lo mismo que el Admin Import, aparentemente casi igual, pero te actualiza unicamente aquello que eliges. Directamente por sql. Por lo que todo lo que no este en el csv ni seleccionado como columna ni lo tocará. No se, me he llevado una desilusión con la actualización Link to comment Share on other sites More sharing options...
pk2 Posted November 3, 2011 Share Posted November 3, 2011 Lo he provado y hace lo mismo que el mio, te manda todo a inicio y ale. Por suerte he creado un modulo que aun está en fase test, que hace lo mismo que el Admin Import, aparentemente casi igual, pero te actualiza unicamente aquello que eliges. Directamente por sql. Por lo que todo lo que no este en el csv ni seleccionado como columna ni lo tocará. No se, me he llevado una desilusión con la actualización Como llevas el tema del modulo, eh actualizado a 1.4.5 y no se si actualizar productos sin que se me vaya al garete Link to comment Share on other sites More sharing options...
soanix Posted November 3, 2011 Author Share Posted November 3, 2011 Como llevas el tema del modulo, eh actualizado a 1.4.5 y no se si actualizar productos sin que se me vaya al garete He terminado la v1.0 funcional. Está aquí: http://www.prestashop.com/forums/topic/138397-aporte-y-desilusion-admin-import-1451/ estoy terminando la versión 2.0 que añade una funcionalidad para actualizar solo si son de un proveedor. Link to comment Share on other sites More sharing options...
neokid Posted November 17, 2011 Share Posted November 17, 2011 Desgraciadamente en la versión 1.4.5.1 a pesar de que teoricamente se puede actualizar mediante la referencia, como bien decías al hacerlo elimina los campos donde no encuentra texto. El archivo adminimport parece contener con exactitud el código que dices, sin embargo en el product.php varía respecto al que tú dices, siendo éste: public static function refInDatabase($ref) { $sql = 'SELECT id_product FROM '._DB_PREFIX_.'product WHERE reference = ''.$ref.'''; $tab = Db::getInstance()->getValue($sql); return $tab; } ¿Podrías dar luz a un ignorante en programación por favor? Adjunto los archivos por si pudieras ser tan amable de decirme algo. AdminImport.php Product.php Link to comment Share on other sites More sharing options...
Recommended Posts