pablobuendiaelvira Posted May 9, 2017 Share Posted May 9, 2017 Hola, Hice un script para importar desde un xml a la bbdd de prestashop miles de productos. Ahora necesito importar mediante un script o mediante la sentencia UPDATE, eso he pensado, las imágenes correspondientes para todos los productos que tengo ya en la bbdd. Según he estado mirando prestashop crea una carpeta para cada producto en una posición concreta (2 22 222, por ejemplo) y luego crea imágenes de distintos tamaños. ¿Como puedo hacer para insertar las imágenes de los muchísimos productos que tengo? Gracias!! Link to comment Share on other sites More sharing options...
nadie Posted May 9, 2017 Share Posted May 9, 2017 Hola, Hice un script para importar desde un xml a la bbdd de prestashop miles de productos. Ahora necesito importar mediante un script o mediante la sentencia UPDATE, eso he pensado, las imágenes correspondientes para todos los productos que tengo ya en la bbdd. Según he estado mirando prestashop crea una carpeta para cada producto en una posición concreta (2 22 222, por ejemplo) y luego crea imágenes de distintos tamaños. ¿Como puedo hacer para insertar las imágenes de los muchísimos productos que tengo? Gracias!! Desconozco como has desarrollado el Script, pero puedes fijarte en el fichero: controllers/admin/AdminImportController.php Saludos, Link to comment Share on other sites More sharing options...
Enrique Gómez Posted May 9, 2017 Share Posted May 9, 2017 Lo ideal es haber "traducido" el xml a un csv compatible con prestashop y usar el importador oficial. Si te fijas en el código de importación oficial en controllers\admin\AdminImportController.php if (isset($product->image) && is_array($product->image) && count($product->image)) { $product_has_images = (bool)Image::getImages($this->context->language->id, (int)$product->id); foreach ($product->image as $key => $url) { $url = trim($url); $error = false; if (!empty($url)) { $url = str_replace(' ', '%20', $url); $image = new Image(); $image->id_product = (int)$product->id; $image->position = Image::getHighestPosition($product->id) + 1; $image->cover = (!$key && !$product_has_images) ? true : false; // file_exists doesn't work with HTTP protocol if (($field_error = $image->validateFields(UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $image->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && $image->add()) { // associate image to selected shops $image->associateTo($shops); if (!AdminImportController::copyImg($product->id, $image->id, $url, 'products', !$regenerate)) { $image->delete(); $this->warnings[] = sprintf(Tools::displayError('Error copying image: %s'), $url); } } else { $error = true; } } else { $error = true; } if ($error) { $this->warnings[] = sprintf(Tools::displayError('Product #%1$d: the picture (%2$s) cannot be saved.'), $image->id_product, $url); } } } se crea la imagen con la API de prestashop ($image->add()) y luego se usa AdminImportController::copyImg. En AdminImportController::copyImg se copia desde la url de origen a la carpeta de destino y se usa ImageManager::resize entre otras para regenerar las imágenes Link to comment Share on other sites More sharing options...
pablobuendiaelvira Posted May 9, 2017 Author Share Posted May 9, 2017 Muchas gracias por la ayuda, La verdad es que debería haber traducido el xml a un csv compatible Enrique, puedo subsanar ahora el error utilizando AdminImportController.php? ¿Donde debo subir las imágenes que tengo preparadas, en que carpeta? Gracias. Link to comment Share on other sites More sharing options...
Enrique Gómez Posted May 9, 2017 Share Posted May 9, 2017 Si es algo que tienes que hacer una sola vez (una primera carga masiva) yo crearía un csv con el id de producto (o la referencia), el nombre (creo que es obligatorio) y la columna imagenes. Esta columna son las urls de las imagenes separadas por comas (puedes ver un ejemplo en el panel de administración > importación). De esta forma el importador oficial te creará todo ok, la BBDD, las carpetas en img/p copiara las imagenes y generará las miniaturas. Si no, habría que llamar al código de prestashop del importador desde el script que hayas creado. En ambos casos debes tener las imagenes en una url accesible. Link to comment Share on other sites More sharing options...
nadie Posted May 9, 2017 Share Posted May 9, 2017 Muchas gracias por la ayuda, La verdad es que debería haber traducido el xml a un csv compatible Enrique, puedo subsanar ahora el error utilizando AdminImportController.php? ¿Donde debo subir las imágenes que tengo preparadas, en que carpeta? Gracias. Las puedes subir a un directorio llamado "subirImagenes" (lo he dicho por poner un nombre)" y luego colocas las urls/rutas de las imagenes cuando realices la importación, si preparas bien el importador, y usas las funciones que te da Prestashop, el se encargara luego de copiar esas imágenes a los directorios adecuados de /img/p para los productos, /img/c/ para las categorías, ect.. Link to comment Share on other sites More sharing options...
nadie Posted May 9, 2017 Share Posted May 9, 2017 Se adelanto Enrique en la respuesta (por menos de 1 minuto D)) En fin, que raro va el foro, que en los años que lleva el foro, nunca me han saltado bien las respuestas (cuando responden y luego respondo y me llevo la sorpresa de que ya habían respondido, en todo caso siempre es bueno colaborar) Prueba lo comentado y recuerda que es importante usar lo que tienes de base de Prestashop y ir ampliando tu código en base a lo te ofrece Prestashop. Suerte y ya nos cuentas. Link to comment Share on other sites More sharing options...
pablobuendiaelvira Posted May 9, 2017 Author Share Posted May 9, 2017 Muchas gracias a los dos, da gusto vuestra ayuda, Os contaré como acaba esto. Un saludo. Link to comment Share on other sites More sharing options...
pablobuendiaelvira Posted May 9, 2017 Author Share Posted May 9, 2017 Hola Enrique y nadie. Estoy creando un csv de un solo producto para hacer la prueba con 3 columnas (id, name, image url) separadas por comas. Cuando subo el archivo me dice 2 errores (ID: 1) no se puede guardar Property Product->name is not valid El ID del producto es 1 y el nombre es el correcto del producto 1. No entiendo ese error, ¿Que puede estar pasando? Link to comment Share on other sites More sharing options...
Enrique Gómez Posted May 10, 2017 Share Posted May 10, 2017 Has asignado cada columna el nombre que le toca? Puedes adjuntar una captura? Link to comment Share on other sites More sharing options...
pablobuendiaelvira Posted May 10, 2017 Author Share Posted May 10, 2017 (edited) Hola Enrique, Gracias por tu ayuda de nuevo, adjunto la imagen de carga y el error que me da. Edited May 10, 2017 by pablobuendiaelvira (see edit history) Link to comment Share on other sites More sharing options...
Enrique Gómez Posted May 10, 2017 Share Posted May 10, 2017 Las imágenes deben estar accesibles por http (una url de acceso público). El nombre esta bien mapeado? no se puede saber con la captura. Entiendo que en la etapa anterior tienes Forzar todos los números ID en Si Link to comment Share on other sites More sharing options...
pablobuendiaelvira Posted May 10, 2017 Author Share Posted May 10, 2017 Si, Enrique, tengo Forzar todos los números ID en si. ¿A que te refieres con que el nombre está bien mapeado? Link to comment Share on other sites More sharing options...
Enrique Gómez Posted May 10, 2017 Share Posted May 10, 2017 Si te fijas en la doc http://doc.prestashop.com/pages/viewpage.action?pageId=29655303 cada columna del csv tiene que "corresponder" a una del selector (prestashop). Donde esta el Nombre? este es obligatorio Link to comment Share on other sites More sharing options...
pablobuendiaelvira Posted May 10, 2017 Author Share Posted May 10, 2017 (edited) Me siguen dando los mismos errores Enrique. Ahora en el csv he puesto el campo nombre, aunque no me lo marca como obligatorio (*) Edited May 10, 2017 by pablobuendiaelvira (see edit history) Link to comment Share on other sites More sharing options...
pablobuendiaelvira Posted May 10, 2017 Author Share Posted May 10, 2017 Ahora, haciendo lo mismo no me da error, Me dice que tengo que reconstruir la búsqueda de los productos. ¿Que es eso? Link to comment Share on other sites More sharing options...
pablobuendiaelvira Posted May 10, 2017 Author Share Posted May 10, 2017 (edited) Solo he hecho una prueba para importar una imagen en un producto. He realizado la importación asignando las columnas de manera correcta y ha puesto la url como nombre de la imagen. No entiendo el porque!! Edited May 10, 2017 by pablobuendiaelvira (see edit history) Link to comment Share on other sites More sharing options...
nadie Posted May 10, 2017 Share Posted May 10, 2017 Ahora, haciendo lo mismo no me da error, Me dice que tengo que reconstruir la búsqueda de los productos. ¿Que es eso? En principio ese error es para que las busquedas (del propio buscador de prestashop) te encuentre los productos cuando por ejemplo usas el buscador en la tienda, si vas a la pestaña Preferencias -> Buscar puedes reconstruir el indice. Link to comment Share on other sites More sharing options...
pablobuendiaelvira Posted May 10, 2017 Author Share Posted May 10, 2017 En principio ese error es para que las busquedas (del propio buscador de prestashop) te encuentre los productos cuando por ejemplo usas el buscador en la tienda, si vas a la pestaña Preferencias -> Buscar puedes reconstruir el indice. Gracias nadie, ya he solucionado ese apartado. Ahora no entiendo porque en el campo name me asigna la url de la importación si como he mostrado en las imágenes de antes la asignación de columnas la hago bien. Link to comment Share on other sites More sharing options...
pablobuendiaelvira Posted May 11, 2017 Author Share Posted May 11, 2017 Sigo intentando hacer la importación de las imágenes con el csv y me coloca la url en el apartado del nombre del producto. Alguien sabe porque? Gracias!! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now