Quelet Posted January 14, 2013 Share Posted January 14, 2013 Hola! Soy relativamente nuevo en esto y llevo algunos días atascado con la importación de productos y categorías. Estoy intentando cargar productos y categorías en castellano y en catalán. He hecho un csv en castellano y otro en catalán con toda la información. Al cargar cualquiera de los dos se me salta la restricción de idioma de la pantalla del import y me lo carga todo para las dos lenguas que tengo habilitadas (catalán y castellano). ¿Cómo debo hacerlo para poder cargar separadamente los csv de cada idioma? Muchas gracias Link to comment Share on other sites More sharing options...
Quelet Posted January 21, 2013 Author Share Posted January 21, 2013 Hola de nuevo! ¿Nadie sabe cómo podría hacerlo? Muchas gracias Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted January 21, 2013 Share Posted January 21, 2013 Hola de nuevo! ¿Nadie sabe cómo podría hacerlo? Muchas gracias ¿Has preparado dos csv, uno para el idioma x, y otro para el idioma a? Link to comment Share on other sites More sharing options...
Quelet Posted January 21, 2013 Author Share Posted January 21, 2013 Sí, tengo un csv en el idioma A y otro para el B. El problema es que al cargarlo para el A me lo pone en el A y el B con lo que en la tienda me salen las categorias duplicadas ( las tengo escritas en A y en . Cuándo cargo el csv del idioma B me pasa lo mismo: me carga los datos en los dos idiomas. Gracias Link to comment Share on other sites More sharing options...
petete2008 Posted January 21, 2013 Share Posted January 21, 2013 Que versión tienes? Te aconsejo la 1.5.3.1 porque la 1.5.3 tiene problemas con el importador CSV Link to comment Share on other sites More sharing options...
Quelet Posted January 21, 2013 Author Share Posted January 21, 2013 Hola! Tengo la 1.5.3.1 instalada. Ya solucioné, gracias a un post del foro, un error que había al importar los productos y que hacía que no se grabaran bien ni las categorias ni las url's de las imágenes de los productos. Para este error de ahora no he encontrado aún ninguna solución, Link to comment Share on other sites More sharing options...
Quelet Posted January 25, 2013 Author Share Posted January 25, 2013 Hola! Gracias por la ayuda pero al final despúes de buscar en el bugtracker dí con una posible solución. Según los de prestashop no se trata de un error. La herramienta de importación CVS no tiene soporte multiidoma. Es una mejora que se hará en un futuro. Lo que he hecho para que me funcione ha sido: Pongo de idioma predeterminado catalan. Voy a Idiomas y dejo habilitado sólo el catalán. Cargo el CVS en catalán forzando los Id's. Cambio el idioma predeterminado a castellano. Voy a Idiomas y dejo habilitado sólo el castellano. Cargo el CVS en castellano forzando los Id's. Habilito de nuevo el idioma catalán- Y listos. Ya lo tengo cargado para los dos idiomas. Espero que le sirva a alguien de ayuda en un futuro. 1 Link to comment Share on other sites More sharing options...
yolandaqc Posted March 11, 2013 Share Posted March 11, 2013 Quelet yo tb tengo que hacer la pagina en varios idiomas, 3. Entiendo bien que en la version 1.5.3 no se puede importar por CSV en mas de un idioma sin hacer lo que tu dices? Lo de "forzar los id's" eso como se hace? Mil gracias, sl2 Yolanda Link to comment Share on other sites More sharing options...
ebigfoot Posted April 1, 2013 Share Posted April 1, 2013 La herramienta de importación CVS no tiene soporte multiidoma. Es una mejora que se hará en un futuro. Lo que he hecho para que me funcione ha sido: Pongo de idioma predeterminado catalan. Voy a Idiomas y dejo habilitado sólo el catalán. Cargo el CVS en catalán forzando los Id's. Cambio el idioma predeterminado a castellano. Voy a Idiomas y dejo habilitado sólo el castellano. Cargo el CVS en castellano forzando los Id's. Habilito de nuevo el idioma catalán- Y listos. Ya lo tengo cargado para los dos idiomas. Espero que le sirva a alguien de ayuda en un futuro. Gràcies Quelet. M'has salvat la vida. Els de Prestashop només haurien d'afegir una columa per l'idioma a l'arxiu CSV i ja estaria solucionat Gracias Quelet. Me has salvado la vida. Los de Prestashop tan solo tendrían que añadir una columa para el idioma en el archivo CSV y ya estaría solucionado Link to comment Share on other sites More sharing options...
Quelet Posted April 23, 2013 Author Share Posted April 23, 2013 Quelet yo tb tengo que hacer la pagina en varios idiomas, 3. Entiendo bien que en la version 1.5.3 no se puede importar por CSV en mas de un idioma sin hacer lo que tu dices? Lo de "forzar los id's" eso como se hace? Mil gracias, sl2 Yolanda Yolanda, en la pestaña de importación tienes que marcar la opción de "Forzar todos los identificadores mientres dure la importación". Espero que te sirva. Gràcies Quelet. M'has salvat la vida. Els de Prestashop només haurien d'afegir una columa per l'idioma a l'arxiu CSV i ja estaria solucionat Gracias Quelet. Me has salvado la vida. Los de Prestashop tan solo tendrían que añadir una columa para el idioma en el archivo CSV y ya estaría solucionado De res. ;-) De nada ;-) Link to comment Share on other sites More sharing options...
ebigfoot Posted August 8, 2013 Share Posted August 8, 2013 Hola! Gracias por la ayuda pero al final despúes de buscar en el bugtracker dí con una posible solución. Según los de prestashop no se trata de un error. La herramienta de importación CVS no tiene soporte multiidoma. Es una mejora que se hará en un futuro. Lo que he hecho para que me funcione ha sido: Pongo de idioma predeterminado catalan. Voy a Idiomas y dejo habilitado sólo el catalán. Cargo el CVS en catalán forzando los Id's. Cambio el idioma predeterminado a castellano. Voy a Idiomas y dejo habilitado sólo el castellano. Cargo el CVS en castellano forzando los Id's. Habilito de nuevo el idioma catalán- Y listos. Ya lo tengo cargado para los dos idiomas. Espero que le sirva a alguien de ayuda en un futuro. He estado investigando a fondo el código de restashop 1.5.4.0 y he llegado a las siguientes conclusiones: NO HAY SOLUCIÓN ? No hay solución dado que al importar un nuevo artículo en el idioma 1 puede pasar que el valor de la característica: - NO exista - SÍ exista Si NO existe, entonces se crea un nuevo valor [tabla: ps_feature_value_lang] para todos los idiomas (dado que no pueden quedar vacíos) Si SÍ existe, es que el valor de la característica está escrito en el mismo idioma. Entonces ¿qué valor deberíamos poner para el otro idioma? -> No se puede ya que no disponemos de ese dato en ese momento. LA PRIMERA SOLUCIÓN Todos los valores de las características tienen que estar dados de alta, con sus correspondientes variantes de idioma, antes de hacer la importación. LA SEGUNDA SOLUCIÓN (para PRESTASHOP 1.5.4.0): Esta solución es más drástica y tiene el problema de que será eliminada en cuanto se aplique una actualización de Prestashop ya que afecta al núcleo. La modificación de los siguientes archivos del núcleo de Prestashop 1.5.4.0 corrige el defecto en la importación de artículos para varios idiomas: - /controllers/admin/AdminImportController.php - /classes/FeatureValue.php El defecto consiste en que si tenemos 2 archivos para la importación de artículos, cada uno en un idioma distinto, al importar el campo características (features) del artículo en el idioma 1, escribe las características para los 2 idiomas y al importar el fichero en el idioma 2 vuelve a escribir las características para los 2 idiomas también. Esta modificación permite la importación de de productos en varios idiomas y asigna el valor de la característica al idioma correspondiente. No importa el orden en que se importan los archivos csv. Da igual cual sea el primer idioma de importación. Creo que esta modificación del código debería ser incluida en futuras versiones de Prestashop, a menos que haya un cambio drástico en el tratamiento del multilenguaje. Fichero: /controllers/admin/AdminImportController.php Modificaciones: // obtiene el idioma seleccionado para la importación $actual_language_id = Language::getIdByIso(Tools::getValue('iso_lang')); // Se añaden los parámetros $product->id y $actual_language_id $id_feature_value = FeatureValue::addFeatureValueImport($product->id, $id_feature, $feature_value, $actual_language_id); Función modificada: productImport public function productImport() { $this->receiveTab(); $handle = $this->openCsvFile(); $default_language_id = (int)Configuration::get('PS_LANG_DEFAULT'); AdminImportController::setLocale(); $shop_ids = Shop::getCompleteListOfShopsID(); // obtiene el idioma seleccionado para la importación $actual_language_id = Language::getIdByIso(Tools::getValue('iso_lang')); for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++) { ... // Features import $features = get_object_vars($product); if (isset($features['features']) && !empty($features['features'])) foreach (explode($this->multiple_value_separator, $features['features']) as $single_feature) { $tab_feature = explode(':', $single_feature); $feature_name = trim($tab_feature[0]); $feature_value = trim($tab_feature[1]); $position = isset($tab_feature[2]) ? $tab_feature[2]: false; if(!empty($feature_name) && !empty($feature_value)) { $id_feature = Feature::addFeatureImport($feature_name, $position); // Se añaden los parámetros $product->id y $actual_language_id $id_feature_value = FeatureValue::addFeatureValueImport($product->id, $id_feature, $feature_value, $actual_language_id); Product::addFeatureProductImport($product->id, $id_feature, $id_feature_value); } } ... } Fichero: /classes/FeatureValue.php Modificaciones: $rq = Db::getInstance()->executeS(' [color=#0000ff]SELECT fv.`id_feature_value` FROM ('._DB_PREFIX_.'feature_value fv LEFT JOIN '._DB_PREFIX_.'feature_product fp USING (`id_feature_value`)) JOIN '._DB_PREFIX_.'product p USING (`id_product`) WHERE fv.`id_feature` = '.(int)$id_feature.' AND p.`id_product` = '.(int)$id_product[/color] ); else { // Update Feature value with actual lang value // Actualiza el valor de la característica con el valor del idioma actual Db::getInstance()->execute(' UPDATE '._DB_PREFIX_.'feature_value_lang SET `value` = \''.pSQL($name).'\' WHERE `id_feature_value` = '.(int)$id_feature_value.' AND `id_lang` = '.(int)$id_lang ); } Función modificada: addFeatureValueImport public static function addFeatureValueImport($id_product, $id_feature, $name, $id_lang = 1) { $rq = Db::getInstance()->executeS(' [color=#0000ff]SELECT fv.`id_feature_value` FROM ('._DB_PREFIX_.'feature_value fv LEFT JOIN '._DB_PREFIX_.'feature_product fp USING (`id_feature_value`)) JOIN '._DB_PREFIX_.'product p USING (`id_product`) WHERE fv.`id_feature` = '.(int)$id_feature.' AND p.`id_product` = '.(int)$id_product[/color] ); if (!isset($rq[0]['id_feature_value']) || !$id_feature_value = (int)$rq[0]['id_feature_value']) { // Feature doesn't exist, create it $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; } else { // Update Feature value with actual lang value // Actualiza el valor de la característica con el valor del idioma actual Db::getInstance()->execute(' UPDATE '._DB_PREFIX_.'feature_value_lang SET `value` = \''.pSQL($name).'\' WHERE `id_feature_value` = '.(int)$id_feature_value.' AND `id_lang` = '.(int)$id_lang ); } return (int)$id_feature_value; } Si queréis, se pueden eliminar los valores de las características de producto que se han ido acumulando en sucesivas importaciones y que no se corresponden con características establecidas a través del elemento del menú del Backoffice Características (Features) Así se elimina "basura" de la base de datos Hacerlo sólo si a continuación vais a recargar todos los productos mediante importación de uno o varios archivos CSV. Este código hay que ejecutarlo directamente contra la base de datos. DELETE ps_feature_value, ps_feature_value_lang FROM ps_feature_value LEFT JOIN ps_feature_value_lang USING (id_feature_value) WHERE custom = 1; Un saludo Link to comment Share on other sites More sharing options...
Recommended Posts