Jump to content

[Aporte] Actualizar productos por referencia ¡Por fin!


soanix

Recommended Posts

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

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

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

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

  • 4 weeks later...

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

  • 3 weeks later...
  • 1 month later...

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

la nueva versión 1.4.5 ya tiene implementado esto :P

 

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

  • 2 weeks later...

 

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

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

  • 2 weeks later...

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

Guest
This topic is now closed to further replies.
×
×
  • Create New...