Jump to content

BUG al importar imagenes CSV (presta 1.5.5)


docjuba

Recommended Posts

Aparte de lo que comenta en su post carupek,

http://www.prestashop.com/forums/topic/271779-solucionado-bug-con-im%C3%A1genes-importando-csv-presta-155/

Tengo que añadir que no me ha funcionado este sistema, sin embargo si me ha funcionado poniendo la url completa, por ejemplo:

http://www.midominio.es/img/producctos/mifotochula.jpg

 

Se han importado todas.

Link to comment
Share on other sites

Aparte de lo que comenta en su post carupek,

http://www.prestashop.com/forums/topic/271779-solucionado-bug-con-im%C3%A1genes-importando-csv-presta-155/

Tengo que añadir que no me ha funcionado este sistema, sin embargo si me ha funcionado poniendo la url completa, por ejemplo:

http://www.midominio.es/img/producctos/mifotochula.jpg

 

Se han importado todas.

Hola, muy buenas.

Después de casi volverme loco con la importación de las imágenes quiero añadir algunas puntualizaciones sobre este tema, por si alguien que le ocurra lo mismo pueda encontrar la solución a su problema:

 

Efectivamente sólo funciona poniendo la URL completa como comenta el compañero docjuba. Por lo que he observado, esto no quiere decir que cada vez que cargue la página de un producto se vaya a esa URL y obtenga la imagen, sino que al hacer la importación utiliza esa URL para crear una copia en tu servidor de dicha imagen (realmente genera 6 copias de la imagen en varios tamaños para optimizar y agilizar las páginas).

 

Por lo tanto, la forma de proceder para importar correctamente las imágenes sería:

1º. Creas una carpeta en tu servidor y subes todas las fotos de todos los productos que necesites (darle los permisos necesarios a la carpeta)

2º. En el archivo CSV indicas las imágenes que corresponden a cada producto mediante su ruta absoluta (Ej.: http://www.midominio.com/carpetadondetengolasimagenes/imagen1.jpg)

3º. Al hacer la importación, Prestashop creará las copias necesarias de todas las fotos de tu carpeta.

4º. Comprobar que todo está correcto.

5º. Si quieres puedes borrar la carpeta que creaste al principio junto con las fotos, ya que ya no es necesaria (ocupa mucho espacio)

 

 

Un saludo!

  • Like 1
Link to comment
Share on other sites

He puesto la url relativa la url absoluta, localhost, fuera del public, dentro del public, los archivos en png, en jpg., en una carpeta dentro de upload en una carpeta dentro de img y por ninguna de las maneras me sube las imágenes al sitio.

Será un bug? (será por bug's en el sistema)

Link to comment
Share on other sites

Muy buenas ramherfer, me pasaba exactamente lo mismo, haz lo que comenta Rhuffus, es raro que te dé error. También leí por ahí que el tamaño de la imagen es importante, no se si el peso de la imagen tendrá algo que ver también, intenta subir imágenes mas pequeñas y con menos peso, hazlo solo con una y a ver que tal. Desde luego subir todas las imágenes "a mano" es un trabajo muy arduo.

Link to comment
Share on other sites

Hola ramherfer, prueba a ver si te funciona alguna de estas cosas:

 

- Las imágenes no pueden ser mayores de 8Mb, aunque si son más pequeñas mucho mejor (menos errores, menos tiempo de carga por FTP, etc..).

 

- La resolución máxima que maneja prestashop es de 600 x 600 píxeles, por lo que te recomiendo que cambies el tamaño de las imágenes antes de subirlas al servidor, así ocuparán mucho menos y tendrás menos problemas. Con Photoshop puedes hacerlo automáticamente (Lotes).

 

- Además mira que tus imágenes sean cuadradas (lo ideal es 600 x 600 px), ya que si son apaisadas luego verás unas franjas blancas arriba y abajo de la imagen en los productos (esto es sólo por cuestión estética).

 

- Revisa que la extensión de las fotos que tienes en el servidor coincida con la que indicas en el CSV ¡¡Ojo, no es lo mismo ".JPG" que ".jpg"!!

 

- Comprueba que introduciendo la ruta absoluta de las imágenes en tu navegador puedes acceder a ellas.

 

- Dale permisos 777 a la carpeta y subcarpetas donde tienes tus imágenes. Luego puedes borrar la carpeta o volverle a cambiar los permisos, por lo que no entraña ningún riesgo de seguridad.

 

- Vigila el carácter separador y subseparador que utilizas en el CSV. Yo opté por utilizar " # " para separar las columnas y " | " para separar dentro de cada columna, con esto evitas problemas si se te ha colado alguna coma en algún campo, ya que prestashop utiliza la coma como carácter subseparador predeterminado.

 

Un saludo!!

Link to comment
Share on other sites

Gracias Rhuffus por tu interés. a excepción del tema de los separadores, que me parece una observación muy importante y a tener presente de aquí en adelante, el resto casi se me caen los ojos de repasarlo una y otra vez. Las imagenes son de 310x310 su peso en Kb sobre los 30, no me gusta nada cambiar permisos pero la carpeta img y sus subcarpetas estan a 777 y las extensiones como .jpg en imagen y en url.

 

Bueno pues parece que hemos avanzado algo (despues de tres días de angustioso trabajo, visionado de videos y un largo etc...) y que el problema se encuentra en la siguiente función del "sufrido" archivo adminimportController.php:

   

protected static function copyImg($id_entity, $id_image = null, $url, $entity = 'products')
    {
        $tmpfile = tempnam(_PS_TMP_IMG_DIR_, 'ps_import');
        $watermark_types = explode(',', Configuration::get('WATERMARK_TYPES'));

        switch ($entity)
        {
            default:
            case 'products':
                $image_obj = new Image($id_image);
                $path = $image_obj->getPathForCreation();
            break;
            case 'categories':
                $path = _PS_CAT_IMG_DIR_.(int)$id_entity;
            break;
        }
        $url = str_replace(' ', '%20', trim($url));

        // Evaluate the memory required to resize the image: if it's too much, you can't resize it.
        if (!ImageManager::checkImageMemoryLimit($url))
            return false;

        // 'file_exists' doesn't work on distant file, and getimagesize make the import slower.
        // Just hide the warning, the traitment will be the same.
        if (Tools::copy($url, $tmpfile))
        {
            ImageManager::resize($tmpfile, $path.'.jpg');
            $images_types = ImageType::getImagesTypes($entity);
            foreach ($images_types as $image_type)
                ImageManager::resize($tmpfile, $path.'-'.stripslashes($image_type['name']).'.jpg', $image_type['width'], $image_type['height']);

            if (in_array($image_type['id_image_type'], $watermark_types))
                Hook::exec('actionWatermark', array('id_image' => $id_image, 'id_product' => $id_entity));
        }
        else
        {
            unlink($tmpfile);
            return false;
        }
        unlink($tmpfile);
        return true;
    }

 

Sustituyendo estas instrucciones por estas:

 

protected static function copyImg($id_entity, $id_image = null, $url, $entity = 'products')
{
    switch ($entity)
    {
        default:
        case 'products':
            $image_obj = new Image($id_image);
            $path = $image_obj->getPathForCreation();
        break;
        case 'categories':
            $path = _PS_CAT_IMG_DIR_.(int)$id_entity;
        break;
    }
    $url = str_replace(' ', '%20', trim($url));
    // Evaluate the memory required to resize the image: if it's too much, you can't resize it.
    if (!ImageManager::checkImageMemoryLimit($url))
        return false;
    // 'file_exists' doesn't work on distant file, and getimagesize make the import slower.
    // Just hide the warning, the traitment will be the same.
    @copy($url, $path.'.jpg');

    return true;
}

La importación la hace "medio correcta", forzandote a regenerar las miniaturas ya que si no realizas esta operación no se visualizan las imagenes importadas.

Claro si observamos la disminución con respecto a las instrucciones "da miedo" aplicarlo como una solución definitiva, asi que a ver si podemos averiguar cual de ellas en origen está haciendo que casque la importación de imagenes.

Saludos,

Ramiro

Link to comment
Share on other sites

Gracias Rhuffus por tu interés. a excepción del tema de los separadores, que me parece una observación muy importante y a tener presente de aquí en adelante, el resto casi se me caen los ojos de repasarlo una y otra vez. Las imagenes son de 310x310 su peso en Kb sobre los 30, no me gusta nada cambiar permisos pero la carpeta img y sus subcarpetas estan a 777 y las extensiones como .jpg en imagen y en url.

 

Bueno pues parece que hemos avanzado algo (despues de tres días de angustioso trabajo, visionado de videos y un largo etc...) y que el problema se encuentra en la siguiente función del "sufrido" archivo adminimportController.php:

   

 

Sustituyendo estas instrucciones por estas:

La importación la hace "medio correcta", forzandote a regenerar las miniaturas ya que si no realizas esta operación no se visualizan las imagenes importadas.

Claro si observamos la disminución con respecto a las instrucciones "da miedo" aplicarlo como una solución definitiva, asi que a ver si podemos averiguar cual de ellas en origen está haciendo que casque la importación de imagenes.

Saludos,

Ramiro

 

Hola, 

 

Me llamo Raul Martinez,

 

Yo esa función en el fichero original de Prestashop 1.5.5.0 la tengo asi:

protected static function copyImg($id_entity, $id_image = null, $url, $entity = 'products', $regenerate = true)
	{
		$tmpfile = tempnam(_PS_TMP_IMG_DIR_, 'ps_import');
		$watermark_types = explode(',', Configuration::get('WATERMARK_TYPES'));

		switch ($entity)
		{
			default:
			case 'products':
				$image_obj = new Image($id_image);
				$path = $image_obj->getPathForCreation();
			break;
			case 'categories':
				$path = _PS_CAT_IMG_DIR_.(int)$id_entity;
			break;
		}
		$url = str_replace(' ', '%20', trim($url));

		// Evaluate the memory required to resize the image: if it's too much, you can't resize it.
		if (!ImageManager::checkImageMemoryLimit($url))
			return false;

		// 'file_exists' doesn't work on distant file, and getimagesize make the import slower.
		// Just hide the warning, the traitment will be the same.
		if (Tools::copy($url, $tmpfile))
		{
			ImageManager::resize($tmpfile, $path.'.jpg');
			$images_types = ImageType::getImagesTypes($entity);

			if ($regenerate)
				foreach ($images_types as $image_type)
				{
					ImageManager::resize($tmpfile, $path.'-'.stripslashes($image_type['name']).'.jpg', $image_type['width'], $image_type['height']);
					if (in_array($image_type['id_image_type'], $watermark_types))
						Hook::exec('actionWatermark', array('id_image' => $id_image, 'id_product' => $id_entity));
				}
		}
		else
		{
			unlink($tmpfile);
			return false;
		}
		unlink($tmpfile);
		return true;
	}

¿Has actualizado correctamente? 

Link to comment
Share on other sites

Raul, he puesto tu bloque de función en el archivo adminImportController.php , pero me sigue dando el mismo error: Error durante la copia de la imagen. Esto es increible e inaudito!!!! con lo sencillo que es, Dios santo y adorado!

Gracias,

Saludos,

Ramiro

Link to comment
Share on other sites

El usuario Adsoa, aquí: http://www.prestashop.com/forums/topic/278975-regenerando-imagenes-1550/?do=findComment&comment=1403128

 


Hola a todos.
 
Gracias Sergio por contestar. Después de buscar mucho, encontré una solución aquí: https://github.com/PrestaShop/PrestaShop/commit/15dd1cf96f0874a28347175e3d3a23fc0f284435
 
Modifiqué el fichero y de momento no me ha vuelto a suceder.
 
Si a alguien le sirve mejor.
 
Un saludo.
 
ha encontrado un enlace, que nos servira a todos.
Link to comment
Share on other sites

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