Jump to content

Se borran las características de los productos sin hacer nada!


Recommended Posts

Hola buenos días!

Tengo un csv que importo, me lo hace sin problemas y me pone las características bien.

Pero al cabo de un tiempo :huh: van desapareciendo los campos de las características... se borran de la ficha de producto y por tanto no salen en la tienda...

 

A alguien le ha pasado algo tan raro???? ya me ha pasado dos veces, y lo que hago es volver a cargar el csv y se vuelve a ver bien... pero al tiempo van desapareciendo... rarisimo la verdad. estoy trabajando con versión 1.5.4

 

Muchas gracias!

Link to comment
Share on other sites

ACUTALIZO: creo que he encontrado cuando lo hace... tiene pinta de bug.

 

Si cargo todas las caracteristicas por CSV se muestran bien. Pero si voy a editar una característica manualmente, al editar y guardar se colapsa o algo y hace desaparecer las otras :S:S.

 

Además se borran algunas características, otras no... no se un follón la verdad

Edited by [email protected] (see edit history)
Link to comment
Share on other sites

ACTUALIZO2: el error pasa también si entro a un producto cualquier y le doy simplemente a guardar. Borra alguna de las características.

 

Mirando las tablas y comparando con justo la que importa y cuando le doy a guardar, desaparecen bastantes filas de los features... q desastre. Alguien sabe algo? gracias

Link to comment
Share on other sites

  • 4 weeks later...

Creo que es por un bug del prestashop al importar varias características desde el excel con su "magnifico" importador de csv...

 

Lo que nosotros hicimos para solucionar fue utilizar el "EmagicOne Store Manager for Prestashop"

Que permite hacer muchas cosas. Al principio es un poco "lio" el tema de la importación con este programa pero al pillarle el truco va bien.

 

Con este importador cada característica ha de estar en una columna separada etc...

 

Espero que te sirva!

Tiene una versión de 30 días de prueba

Link to comment
Share on other sites

  • 5 weeks later...

Está reportado un error en las Features (características) que hace que estas se borren parcial o totalmente cuando, tras importar productos desde CSV, editamos alguno de ellos y luego lo guardamos. Está documentado en: http://forge.prestas...owse/PSCFV-7907

Lo que sigue es una traducción aproximada del inglés de esta entrada:

 

El error parece estar en la función addFeatureValueImport()definida en la clase FeatureValue. Esta función se utiliza para insertar los distintos valores de cada feature que se hallan encontrado durante una importación de productos en la base de datos.

 

El problema es que a veces lo hace mal, ya que interpreta que las features con valores idénticos NO SON valores personalizados. Ejemplo: si se encuentra un valor de feature para “descuento” establecido como “25%”, la segunda vez que lo encuentra entiende que el valor no es personalizado. En este caso esto impide que el valor sea editado y cambiado a 12%, por ejemplo, como valor personalizado. La función intenta “averiguar” que tipo de feature está importando de manera errónea.

 

Más adelante, cuando se edita un producto (se cambie, o no, algo) se realiza el siguiente proceso:Los valores de las features son declarados como personalizados en addFeatureValueImport(). Esto hace que los valores sean mostrados como valores individuales, mientras que la función rechaza un valor como si ya existiese. Los muestra como valores personalizados pero los trata como valores sincronizados.

 

El punto 3. explica por qué los valores se actualizan de forma correcta en los productos que han sido introducidos mediante el editor. El punto 1. explica por qué CUALQUIER otro producto que haya sido importado y que contenga el mismo valor de feature hace que esos valores sean borrados.

 

La solución propuesta en el POST es tratar todas las features como personalizadas en la función addFeatureValueImport() y forzarlas como nuevas features para evitar que se borren. Es lo que hay... de momento y hasta que no se corrija este error de forma oficial solo se pueden importar features personalizadas. De esta forma 6V y 12V (en el caso de los Voltios de las baterías) se tratan como valores editables e individuales, no como seleccionables en un desplegable, que sería lo lógico.

 

El código de la función modificado:

 

public static function addFeatureValueImport($id_feature, $name)

  • Se seleccionan todos los valores de feature asociados al producto y son recorridos mediante un bucle para:
    1. Si el valor de la feature es personalizado (valor introducido en un campo de texto en lugar de seleccionado de una lista de valores predefinidos mediante un desplegable), cada ocurrencia de ese valor de feature es borrado temporalmente de las tablas ps_feature_value y ps_feature_value_lang.
    2. Todas las asociaciones realizadas entre el producto y cada feature y entre esta y sus valores son eliminadas (borradas de la tabla ps_feature_product).
    3. Los distintos valores de feature pasados son iterados. Se pasa el ID, que permite a Prestashop reinsertar los valores de cada feature actualizados (evitando generar nuevos Ids). Se actualizan las tablas ps_feature_product, ps_feature_value y ps_feature_value_lang.

{

/*$rq = Db::getInstance()->executeS('

SELECT fv.`id_feature_value`

FROM '._DB_PREFIX_.'feature_value fv

LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl

ON (fvl.`id_feature_value` = fv.`id_feature_value`)

WHERE `value` = \''.pSQL($name).'\'

AND fv.`id_feature` = '.(int)$id_feature.'

GROUP BY fv.`id_feature_value` LIMIT 1

');

 

if (!isset($rq[0]['id_feature_value']) || !$id_feature_value = (int)$rq[0]['id_feature_value'])

{

// Feature doesn't exist, create it

*/

 

// Al comentar las líneas anteriores de código forzamos a PRESTASHOP a crear un nuevo valor para la FEATURE tratándolas todas como PERSONALIZADAS

$feature_value = new FeatureValue();

 

$languages = Language::getLanguages();

foreach ($languages as $language)

$feature_value->value[$language['id_lang']] = strval($name);

 

$feature_value->id_feature = (int)$id_feature;

$feature_value->custom = 1;

$feature_value->add();

 

return (int)$feature_value->id;

/*}

return (int)$id_feature_value;*/

}

 

 

Yo lo he probado y he conseguido solucionar el problema.

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

Está reportado un error en las Features (características) que hace que estas se borren parcial o totalmente cuando, tras importar productos desde CSV, editamos alguno de ellos y luego lo guardamos. Está documentado en: http://forge.prestas...owse/PSCFV-7907

Lo que sigue es una traducción aproximada del inglés de esta entrada:

 

El error parece estar en la función addFeatureValueImport()definida en la clase FeatureValue. Esta función se utiliza para insertar los distintos valores de cada feature que se hallan encontrado durante una importación de productos en la base de datos.

 

El problema es que a veces lo hace mal, ya que interpreta que las features con valores idénticos NO SON valores personalizados. Ejemplo: si se encuentra un valor de feature para “descuento” establecido como “25%”, la segunda vez que lo encuentra entiende que el valor no es personalizado. En este caso esto impide que el valor sea editado y cambiado a 12%, por ejemplo, como valor personalizado. La función intenta “averiguar” que tipo de feature está importando de manera errónea.

 

Más adelante, cuando se edita un producto (se cambie, o no, algo) se realiza el siguiente proceso:Los valores de las features son declarados como personalizados en addFeatureValueImport(). Esto hace que los valores sean mostrados como valores individuales, mientras que la función rechaza un valor como si ya existiese. Los muestra como valores personalizados pero los trata como valores sincronizados.

 

El punto 3. explica por qué los valores se actualizan de forma correcta en los productos que han sido introducidos mediante el editor. El punto 1. explica por qué CUALQUIER otro producto que haya sido importado y que contenga el mismo valor de feature hace que esos valores sean borrados.

 

La solución propuesta en el POST es tratar todas las features como personalizadas en la función addFeatureValueImport() y forzarlas como nuevas features para evitar que se borren. Es lo que hay... de momento y hasta que no se corrija este error de forma oficial solo se pueden importar features personalizadas. De esta forma 6V y 12V (en el caso de los Voltios de las baterías) se tratan como valores editables e individuales, no como seleccionables en un desplegable, que sería lo lógico.

 

El código de la función modificado:

 

public static function addFeatureValueImport($id_feature, $name)

  • Se seleccionan todos los valores de feature asociados al producto y son recorridos mediante un bucle para:
    1. Si el valor de la feature es personalizado (valor introducido en un campo de texto en lugar de seleccionado de una lista de valores predefinidos mediante un desplegable), cada ocurrencia de ese valor de feature es borrado temporalmente de las tablas ps_feature_value y ps_feature_value_lang.
    2. Todas las asociaciones realizadas entre el producto y cada feature y entre esta y sus valores son eliminadas (borradas de la tabla ps_feature_product).
    3. Los distintos valores de feature pasados son iterados. Se pasa el ID, que permite a Prestashop reinsertar los valores de cada feature actualizados (evitando generar nuevos Ids). Se actualizan las tablas ps_feature_product, ps_feature_value y ps_feature_value_lang.

{

/*$rq = Db::getInstance()->executeS('

SELECT fv.`id_feature_value`

FROM '._DB_PREFIX_.'feature_value fv

LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl

ON (fvl.`id_feature_value` = fv.`id_feature_value`)

WHERE `value` = \''.pSQL($name).'\'

AND fv.`id_feature` = '.(int)$id_feature.'

GROUP BY fv.`id_feature_value` LIMIT 1

');

 

if (!isset($rq[0]['id_feature_value']) || !$id_feature_value = (int)$rq[0]['id_feature_value'])

{

// Feature doesn't exist, create it

*/

 

// Al comentar las líneas anteriores de código forzamos a PRESTASHOP a crear un nuevo valor para la FEATURE tratándolas todas como PERSONALIZADAS

$feature_value = new FeatureValue();

 

$languages = Language::getLanguages();

foreach ($languages as $language)

$feature_value->value[$language['id_lang']] = strval($name);

 

$feature_value->id_feature = (int)$id_feature;

$feature_value->custom = 1;

$feature_value->add();

 

return (int)$feature_value->id;

/*}

return (int)$id_feature_value;*/

}

 

 

Yo lo he probado y he conseguido solucionar el problema.

 

 

Es decir, que tal como suponia aquí: http://www.prestashop.com/forums/index.php?/topic/252701-se-borran-las-caracteristicas-de-los-productos-sin-hacer-nada/page__view__findpost__p__1288530 el problema estaba comentado en forge.prestashop ..

Link to comment
Share on other sites

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