Question

J'ai un script externe qui récupère essentiellement un produit et exclut toutes les images.Le scénario est vraiment simple

include('app/Mage.php');
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
error_reporting(E_ALL | E_STRICT);
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
ob_implicit_flush (1);
$mediaApi = Mage::getModel("catalog/product_attribute_media_api");
$_product = Mage::getModel('catalog/product')->load(15509);
$_images = $_product->getMediaGalleryImages();
foreach($_images as $_image)
{
    $mediaApi->update($_product->getId(),  $_image->getFile(),array('exclude' => 1));
}

En regardant la base de données brute, je peux voir que la table catalog_product_entity_media_gallery_value a été mise à jour avec succès, par exemple la colonne désactivée est maintenant définie sur 1 pour les 10 images du produit.Je peux également voir que les images sont cochées dans la case exclue de la page de détail des images du produit dans le système d'administration.

CEPENDANT....

Lorsque je vais sur le frontend, il me montre toujours toutes les images de ce produit.Lorsque je débogue sur le frontend, je peux voir que l'indicateur désactivé est toujours défini sur 0 pour les images.Exemple ci-dessous

object(Varien_Object)#1036 (7) {
["_data":protected]=>array(11) {
["value_id"]=>
string(5) "15083"
["file"]=>
string(43) "/F/F/FF6D86FE39366DF362D711765C56FDAA_1.jpg"
["label"]=>
string(0) ""
["position"]=>
string(1) "1"
["disabled"]=>
string(1) "0"
["label_default"]=>.........

J'ai essayé de vider tous les caches et de réindexer, mais j'ai toujours le même problème.

La chose étrange qui m'amène à croire qu'il ne s'agit pas d'un cache si j'exécute le SQL brut suivant

UPDATE `catalog_product_entity_media_gallery_value` SET `disabled` = '1' WHERE `disabled` = '0';

Les images sur le frontend ne s'affichent pas, c'est comme si je désactivais les mauvaises images dans mon script mais je ne vois pas comment

Quelqu'un peut-il m'aider ?

***** Mise à jour ***** Si je considère le tableau MySQL réel catalog_product_entity_media_gallery_value et recherchez value_id 15083, je peux voir qu'il y a 2 enregistrements.

value_id    store_id    label   position    disabled
15083           0        \N       0           1
15083           1        \N       1           0

Donc mon script met uniquement à jour l'enregistrement avec l'identifiant de magasin de 0

Cela m'amène donc à 2 questions

  1. Comment mettre à jour l'image pour qu'elle soit appliquée dans tous les magasins ?
  2. Pourquoi y a-t-il 2 lignes alors que l'instance Magento n'a qu'un seul magasin
Était-ce utile?

La solution

Même si vous n'avez qu'un seul magasin, vous disposez d'un paramètre par défaut, de paramètres de site Web et de paramètres d'affichage du magasin.Par conséquent, vous pouvez toujours utiliser les trois niveaux pour écraser les paramètres.

si vous ne l'utilisez pas, le plus simple est de simplement supprimer toutes les entrées where store_id != 0

Si vous ne souhaitez pas faire cela, assurez-vous simplement de mettre à jour toutes les entrées d'une image.

Autres conseils

Il semble que vous définissiez le magasin par défaut dans votre script avec la ligne Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);.Cela signifiera alors que la ligne de produits que vous mettez à jour sera destinée à la section d'administration.

Vous devriez pouvoir spécifier le magasin que vous souhaitez mettre à jour via l'appel API.

La fonction de mise à jour prend un magasin de paramètres qui peut être un identifiant de magasin.Vous pouvez également simplement lui transmettre l'identifiant du produit plutôt que l'objet produit, puis la première chose qu'il fera sera d'initialiser le produit pour le magasin souhaité.

public function update($productId, $file, $data, $store = null, $identifierType = null)
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top