Zielregel-Upsells

9

Ich habe ein seltsames Problem mit den Upsells der Magento-Zielregel.

Szenario: Magento EE 1.12. Über 30 Speicheransichten auf derselben Magento-Instanz. Über 30.000 Produkte. Die meisten Produkte haben in allen Geschäftsansichten die gleichen Einstellungen. Ich habe eine Regel zum Anzeigen von Upsells wie folgt erstellt. "Zeigen Sie Produkte aus derselben Kategorie mit einem Preis von 100% oder mehr als das aktuelle Produkt". Einstellungen für die Anzeige von Upsells: "Nur regelbasiert" (das Problem wird für "regelbasiert und ausgewählt" reproduziert). Ich habe die Regel gespeichert. alles neu indiziert. Alles scheint in Ordnung zu sein, Upsells werden (für die von mir getesteten Produkte) gemäß der Regel angezeigt, ABER ... Nach einiger Zeit für dasselbe Produkt in einer Geschäftsansicht werden die Upsells angezeigt und in anderen Geschäftsansichten nicht. Das Produkt hat in allen Geschäftsansichten die gleichen Einstellungen. (und es sollte die gleichen Upsells haben.)

Wenn ich etwas in der Regel ändere und es erneut speichere, werden die Upsells in allen Geschäftsansichten angezeigt, aber nach einiger Zeit wird das Problem reproduziert.

Nachdem ich den Code eingegraben hatte, stellte ich fest, dass die von der Zielregel generierten Upsells in der Tabelle Enterprise_targetrule_index_upsell gespeichert sind, um zu vermeiden, dass jedes Mal alle Regeln analysiert werden. So funktioniert es. (Die Tabelle wird beim Speichern einer Regel abgeschnitten.) Wenn die von mir erwähnte Tabelle Upsells für Zielregeln enthält, werden diese abgerufen. Ist dies nicht der Fall, werden die Regeln analysiert und das Ergebnis in die Indextabelle eingetragen. Hier sind einige Datensätze aus dieser Tabelle für ein bestimmtes Produkt.

+-----------+----------+-------------------+---------------------------------------------------------------------+---------------------+
| entity_id | store_id | customer_group_id | product_ids                                                         | customer_segment_id |
+-----------+----------+-------------------+---------------------------------------------------------------------+---------------------+
|     17372 |        2 |                 0 | 17373,350,583,487,17664,29737,14719,443,445,29502,17666,17667,17668 |                   0 |
|     17372 |        5 |                 0 | 17373,350,583,487,17664,29737,14719,443,445,29502,17666,17667,17668 |                   0 |
|     17372 |       17 |                 0 | 17373,350,583,487,17664,29737,14719,443,445,29502,17666,17667,17668 |                   0 |
|     17372 |       18 |                 0 | 17373,350,583,487,17664,29737,14719,443,445,29502,17666,17667,17668 |                   0 |
|     17372 |       19 |                 0 | 17373,350,583,487,17664,29737,14719,443,445,29502,17666,17667,17668 |                   0 |
|     17372 |       20 |                 0 |                                                                     |                   0 |
|     17372 |       21 |                 0 | 17373,350,583,487,17664,29737,14719,443,445,29502,17666,17667,17668 |                   0 |
|     17372 |       22 |                 0 | 17373,350,583,487,17664,29737,14719,443,445,29502,17666,17667,17668 |                   0 |
|     17372 |       23 |                 0 | 17373,350,583,487,17664,29737,14719,443,445,29502,17666,17667,17668 |                   0 |

Wie Sie sehen können, sind die Upsells für Produkte mit der ID 17372 in allen Geschäftsansichten gleich, mit Ausnahme von store_id 20, das leer ist. Das Geschäft 20 hat nichts Besonderes. Alle hier genannten Produkte sind in allen Geschäften erhältlich.

Irgendeine Idee?

Vielen Dank. Marius.

Marius
quelle
1
Ist Ihr cronrichtig konfiguriert. IIRC die Regeln werden jede Nacht neu aufgebaut und ohne ein aktives cronwird seltsames Verhalten erzeugen
Ben Lessani - Sonassi
Der Cron ist aktiv und läuft jeden Morgen ohne Probleme.
Marius
Ich habe noch etwas gefunden. Nach dem Speichern der Regel enthält die Tabelle 'Enterprise_targetrule_product' alle Produkte, aber nach einiger Zeit sind alle außer einem verschwunden, nicht immer dasselbe. Solange sich die Produkt-IDs in der obigen Tabelle befinden, funktioniert alles.
Marius
1
Beim Speichern eines Produkts werden die Zielregeln für dieses Produkt indiziert und dies führt dazu: (Mage_Rule_Model_Resource_Abstract :: bindRuleToEntity ()) $ adapter-> delete ($ this-> getTable ($ entityInfo ['Associations_table']), $ adapter -> quoteInto ($ entityInfo ['rule_id_field']. 'IN (?) AND', $ ruleIds). $ adapter-> quoteInto ($ entityInfo ['entity_id_field']. 'NOT IN (?)', $ entityIds); Dadurch werden alle anderen Produkte aus der Liste der betroffenen Produkte gelöscht. Wenn ich den Modus für den Zielregelindex auf "manuell" setze, wird das Problem nicht reproduziert. Dies löst es jedoch nicht. Es wird nur ausgeblendet.
Marius
Gibt es einen Grund, warum jemand dies ablehnt?
FlorinelChis

Antworten:

7

In EE 1.13 scheint dieser Fehler behoben zu sein (aber EE 1.13 ist weg)

In Enterprise_TargetRule_Model_Resource_Index::saveProductIndex, Zeile mit Problem wurde ersetzt durch (Hinweis: 4. Parameter "false")

$targetRule->bindRuleToEntity($ruleId, $productId, 'product', false);

und in Mage_Rule_Model_Resource_Abstractwurde die Funktion bindRuleToEntitygeändert in:

public function bindRuleToEntity($ruleIds, $entityIds, $entityType, $deleteOldResults = true)

und Linie $adapter->delete(...)wurde eingewickelt

if ($deleteOldResults) {
    $adapter->delete($this->getTable($entityInfo['associations_table']),
           $adapter->quoteInto($entityInfo['rule_id_field']   . ' IN (?) AND ', $ruleIds) .
           $adapter->quoteInto($entityInfo['entity_id_field'] . ' NOT IN (?)',  $entityIds)
    );
 }

Ein weiterer Fehler, shell / indexer.php --reindex targetrule, bewirkt nichts. Sie können also nicht über cron / console neu indizieren. Beheben Sie dies durch Hinzufügen von Enterprise_TargetRule_Model_Index:

public function reindexAll() {
    return $this->_getResource()->cleanIndex();
}

SPÄTER: Siehe diesen Patch https://github.com/magendooro/targetrulefix

carco
quelle
Ich bin auf 1.13.1 und habe ein Integrity constraint violation:for key '5B1C775075460366570ABDA2839BC68A'-> dieser Schlüssel stammt von enterprise_targetrule_index_related... haben Sie eine Idee, ob er mit den genannten Änderungen zusammenhängt?
Fra
1

Ich habe beschlossen, das, was ich gefunden habe, als Antwort hinzuzufügen, damit diese Frage nicht als unbeantwortet markiert wird.

Beim Speichern eines Produkts werden die Zielregeln für dieses Produkt indiziert und dies geschieht am Ende :( Mage_Rule_Model_Resource_Abstract::bindRuleToEntity())

$adapter->delete($this->getTable($entityInfo['associations_table']), $adapter->quoteInto($entityInfo['rule_id_field'] . ' IN (?) AND ', $ruleIds) . $adapter->quoteInto($entityInfo['entity_id_field'] . ' NOT IN (?)', $entityIds); 

Dadurch werden alle anderen Produkte aus der Liste der betroffenen Produkte gelöscht. Wenn ich den Modus für den Zielregelindex auf "manuell" setze, wird das Problem nicht reproduziert. Aber das löst es nicht. Es verbirgt es einfach.

Aus meiner Sicht ist dies ein schwerwiegender Magento EE-Fehler.

Marius
quelle
Hat die akzeptierte Antwort Ihr Problem gelöst? Ich habe das gleiche Problem in EE 1.11.1.0
dchayka
Es hat für mich getan ..
Marius