2010-12-03 26 views
12

Tengo una tienda Magento que tiene alrededor de 3.000 productos. Casi todos estos productos tienen una sola imagen adjunta.¿Todas las imágenes de la tienda son las imágenes base, pequeñas y en miniatura de Magento?

Por alguna razón, aunque configuré la imagen pequeña y la imagen en miniatura como la misma imagen base en el archivo CSV de importación, solo se establece la imagen base para cada producto. Esto significa que cuando busca un producto obtiene un marcador de posición, pero una vez que ingresa a la página del producto obtiene la imagen correcta. Esto se puede remediar fácilmente yendo a la página de administración del producto y seleccionando los cuadros para imagen pequeña y miniatura.

El problema es que con 3000 imágenes esto tomaría mucho tiempo hacerlo manualmente. He encontrado un comando SQL que debe hacer todas las imágenes base, pequeñas y en miniatura mapear la primera imagen para cada producto. Como solo tengo una imagen para cada producto, esto debería ser perfecto. Sin embargo, no hace nada. Dice 0 filas cambiadas.

UPDATE catalog_product_entity_media_gallery AS mg, 
catalog_product_entity_media_gallery_value AS mgv, 
catalog_product_entity_varchar AS ev 
SET ev.value = mg.value 
WHERE mg.value_id = mgv.value_id 
AND mg.entity_id = ev.entity_id 
AND ev.attribute_id IN (70, 71, 72) 
AND mgv.position = 1 

¿Alguien sabe por qué esto no está funcionando?

Gracias,

Danny

Respuesta

19

Después de hacer un cambio de esa manera a la base de datos, incluso si tiene éxito, sería necesario para reconstruir la caché de imágenes en la administración del caché.

Es posible que pueda hacerlo con un script como este y no preocuparse por el almacenamiento en caché o la indexación.

<?php 

require 'app/Mage.php'; 
Mage::app(); 

$products = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*'); 
foreach ($products as $product) { 
    if (!$product->hasImage()) continue; 
    if (!$product->hasSmallImage()) $product->setSmallImage($product->getImage()); 
    if (!$product->hasThumbnail()) $product->setThumbnail($product->getImage()); 
    $product->save(); 
} 

?>Done! 

Guárdelo en su directorio de Magento y acceda escribiendo la dirección URL en la barra de direcciones de su navegador. No he probado este script todavía.

+0

lo siento, cuando pruebo su código, no puede funcionar. por qué. agrego echo 'down!'; después de tu código. no lo da salida. – user1188320

+1

@ user1188320 Asegúrese de tener [display_errors on] (http://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors) para que pueda ver lo que salió mal. Si dice que no hay memoria, aumente el [memory_limit] (http://www.php.net/manual/en/ini.core.php#ini.memory-limit). – clockworkgeek

+0

mismo problema. lo hice lo mismo, pero estoy obteniendo la página en blanco? @clockworkgeek –

1

sé que esta es una publicación anterior, sin embargo, en caso de que alguien tenga el mismo problema, entonces el problema fue con el ev.attribute_id. Código actualizado a continuación:

UPDATE 
    catalog_product_entity_media_gallery AS mg, 
    catalog_product_entity_media_gallery_value AS mgv, 
    catalog_product_entity_varchar AS ev 
SET 
    ev.value = mg.value 
WHERE 
    mg.value_id = mgv.value_id 
     AND mg.entity_id = ev.entity_id 
     AND ev.attribute_id IN (74, 75, 76) 
     AND mgv.position = 1 

Gracias.

21

Solo como una advertencia para cualquier persona (¡como yo!) Que quiera probar este script. ¡Ejecuté esto sin pensarlo y cambió todos los nombres de los productos!

  1. Entre en el panel de atributos, encuentre los atributos de imagen/imagen pequeña/miniatura.
  2. Anote los ID (los míos en este caso fueron 85,86 y 87)
  3. Cambie la consulta para reflejar esos id.

Así que mi pregunta es así:

UPDATE catalog_product_entity_media_gallery AS mg, 
     catalog_product_entity_media_gallery_value AS mgv, 
     catalog_product_entity_varchar AS ev 
SET ev.value = mg.value 
WHERE mg.value_id = mgv.value_id 
AND mg.entity_id = ev.entity_id 
AND ev.attribute_id IN (85,86,87) 
AND mgv.position = 1; 
+0

Sí, acabo de hacer esto. Buen ahorro para cualquiera que encuentre esta publicación PRIMERO :). –

+0

Esta es la respuesta real y debería marcarme como tal. ¡Gracias! – KPheasey

+0

Esta solución funciona, pero ahora muestra la misma imagen que la miniatura en el carrito, en el carrito y en la página de pago. En la página de detalles del producto, muestra la imagen correcta. Ayúdenme a resolver este problema – Krupal

1

que utiliza el método de stereo_world en Magento 1.7.0.2 y funcionó muy bien. (No puedo renunciar a su respuesta porque soy nuevo en stackoverflow)

No sé dónde está viendo el ID del atributo en el panel de atributos, porque no veo ningún identificador numérico. Encontré los ids (85,86,87) abriendo phpMyAdmin y mirando en la tabla eav_attribute.

Como señaló clockworkgeek: reindex/cache flush son necesarios.

+0

Encontré el ID del atributo en la URL de la página de administración de atributos. Así, por ejemplo, 'index.php/admin/catalog_product_attribute/edit/attribute_id/85/key/c2069ce458b67f8598a3660bf2c8edf6 /' (el id viene después de attribute_id) –

0

@ user2321249 Para encontrar la identificación de atributo en CE 1.9.1, vaya a la página de información de atributos y mire la URL. Por ejemplo, desde el backend de administración, seleccione Catálogo-> Administrar atributos. Encuentre el atributo de miniatura y selecciónelo. Con mi sistema de la URL es:

www.example.com/magento/index.php/admin/catalog_product_attribute/edit/ attribute_id/87/clave/f759b57c21a7c75f33095a243f44b2a5/

Usted puede fácilmente Dile a la miniatura attribute_id en mi sistema que es 87. Haz lo mismo con la Imagen base y la Imagen pequeña.

0

Lo tengo trabajo utilizando el siguiente truco para Magento versión 1.9.2.2:

INSERT INTO catalog_product_entity_varchar 
     (entity_type_id, attribute_id, store_id, entity_id, value) 
SELECT 
     entity_type_id, 75, store_id, entity_id, value 
FROM 
     catalog_product_entity_varchar 
WHERE 
     attribute_id = 74 

luego vuelva a colocar el valor 75 con 76 e importar la consulta de nuevo. Asegúrese de reemplazar los valores de identificación de atributo en su propio

Cuestiones relacionadas