Frage

Ich habe ein externes Skript, das im Grunde ein Produkt abruft und alle Bilder ausschließt.Das Skript ist wirklich einfach

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));
}

Wenn ich mir die Rohdatenbank ansehe, kann ich sehen, dass die Tabelle „catalog_product_entity_media_gallery_value“ erfolgreich aktualisiert wurde, z. B. ist die Spalte „disabled“ jetzt für die 10 Bilder für das Produkt auf 1 gesetzt.Ich kann auch sehen, dass die Bilder ein Häkchen im Ausschlusskästchen auf der Produktbild-Detailseite im Admin-System haben.

JEDOCH....

Wenn ich zum Frontend gehe, werden mir immer noch alle Bilder für dieses Produkt angezeigt.Wenn ich im Frontend debugge, kann ich sehen, dass das deaktivierte Flag für die Bilder immer noch auf 0 gesetzt ist.Beispiel unten

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"]=>.........

Ich habe versucht, alle Caches zu löschen und neu zu indizieren, erhalte jedoch immer noch das gleiche Problem.

Das Seltsame, das mich glauben lässt, dass es sich nicht um einen Cache handelt, wenn ich das folgende Roh-SQL ausführe

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

Die Bilder im Frontend werden nicht angezeigt. Es ist also so, als ob ich die falschen Bilder in meinem Skript deaktiviere, aber ich verstehe nicht, wie das geht

Kann jemand helfen?

***** update ***** Wenn ich die tatsächliche MySQL -Tabelle anzeige catalog_product_entity_media_gallery_value und schaue nach „value_id 15083“. Ich kann sehen, dass es zwei Datensätze gibt.

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

Daher aktualisiert mein Skript den Datensatz nur mit der Store-ID 0

Das führt mich zu zwei Fragen

  1. Wie aktualisiere ich das Bild, damit es in allen Geschäften funktioniert?
  2. Warum gibt es 2 Zeilen, da die Magento-Instanz nur 1 Store hat?
War es hilfreich?

Lösung

Auch wenn Sie nur einen Shop haben, verfügen Sie über eine Standardeinstellung, Website-Einstellungen und Shop-Ansichtseinstellungen.Daher können Sie weiterhin alle drei Ebenen zum Überschreiben der Einstellungen nutzen.

Wenn Sie dies nicht verwenden, ist es am einfachsten, einfach alle Einträge zu löschen where store_id != 0

Wenn Sie dies nicht möchten, aktualisieren Sie einfach alle Einträge für ein Bild.

Andere Tipps

Es scheint, dass Sie mit der Zeile den Standardspeicher in Ihrem Skript festlegen Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);.Dies bedeutet dann, dass die Produktzeile, die Sie aktualisieren, für den Admin-Bereich bestimmt ist.

Sie sollten in der Lage sein, über den API-Aufruf den Store anzugeben, den Sie aktualisieren möchten.

Die Aktualisierungsfunktion benötigt einen Parameterspeicher, bei dem es sich um eine Speicher-ID handeln kann.Sie können ihm auch einfach die Produkt-ID anstelle des Produktobjekts übergeben und dann zunächst das Produkt für den gewünschten Shop initialisieren.

public function update($productId, $file, $data, $store = null, $identifierType = null)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top