Mam dziwny problem z wyprzedażą reguły Magento Target.
Scenariusz: Magento EE 1.12. Ponad 30 wyświetleń sklepu w tej samej instancji Magento. Ponad 30 000 produktów. Większość produktów ma takie same ustawienia we wszystkich widokach sklepu. Utworzyłem regułę pokazującą wyprzedaże w następujący sposób. „Pokaż produkty z tej samej kategorii w cenie 100% lub wyższej niż obecny produkt”. Ustawienia wyświetlania upsells: „Tylko na podstawie reguł” (problem powtarza się dla „na podstawie reguł i wybrane”). Zapisałem regułę. reindeksował wszystko. Wszystko wydaje się wyglądać OK, pojawiają się wyprzedaże (dla produktów, które testowałem) zgodnie z definicją reguły, ALE… Po pewnym czasie dla tego samego produktu w jednym sklepie pojawiają się wyprzedaże, a w innych sklepach nie. Produkt ma takie same ustawienia we wszystkich widokach sklepu. (i powinien mieć te same wyprzedaże).
Jeśli zmodyfikuję coś w regule i zapiszę ponownie, wyprzedaże zaczną pojawiać się we wszystkich widokach sklepu, ale po pewnym czasie problem się powtarza.
Po wczytaniu kodu dowiedziałem się, że wzrosty generowane przez regułę docelową są przechowywane w tabeli enterprise_targetrule_index_upsell, aby uniknąć analizowania wszystkich reguł za każdym razem. Oto jak to działa. (tabela jest obcinana podczas zapisywania reguły) Jeśli w tabeli, o której wspomniałem, są jakieś upsellery „reguły docelowej”, są one pobierane. Jeśli nie są, reguły są analizowane, a wynik jest umieszczany w tabeli indeksu. Oto niektóre rekordy z tej tabeli dla określonego produktu.
+-----------+----------+-------------------+---------------------------------------------------------------------+---------------------+
| 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 |
Jak widać, wyprzedaże produktu o identyfikatorze 17372 są takie same we wszystkich widokach sklepu, z wyjątkiem store_id 20, który jest pusty. W sklepie 20. nie ma nic specjalnego. Wszystkie produkty tutaj dostępne są dostępne we wszystkich sklepach.
Dowolny pomysł?
Dzięki. Marius.
źródło
cron
skonfigurowany jest poprawnie? IIRC zasady są odbudowywane co noc i bez aktywnegocron
spowoduje dziwne zachowanieOdpowiedzi:
W EE 1.13 ten błąd wydaje się być naprawiony (ale EE 1.13 zniknął)
W
Enterprise_TargetRule_Model_Resource_Index::saveProductIndex
, wiersz z problemem został zastąpiony przez (wskazówka: 4. param „false”)$targetRule->bindRuleToEntity($ruleId, $productId, 'product', false);
i, w
Mage_Rule_Model_Resource_Abstract
, funkcjabindRuleToEntity
została zmieniona na:i linia
$adapter->delete(...)
została owiniętaKolejny błąd, shell / indexer.php - reindex targetrule nic nie robi, więc nie można reindeksować przez cron / konsolę, napraw poprzez dodanie
Enterprise_TargetRule_Model_Index
:PÓŹNIEJ: zobacz tę łatkę https://github.com/magendooro/targetrulefix
źródło
Integrity constraint violation:for key '5B1C775075460366570ABDA2839BC68A'
-> ten klucz pochodzi odenterprise_targetrule_index_related
... Czy masz pojęcie, czy jest to związane ze wspomnianymi zmianami?Postanowiłem dodać to, co znalazłem jako odpowiedź, aby to pytanie nie zostało oznaczone jako bez odpowiedzi.
podczas zapisywania produktu reguły docelowe są indeksowane dla tego produktu, co kończy się na tym :(
Mage_Rule_Model_Resource_Abstract::bindRuleToEntity()
)Spowoduje to usunięcie wszystkich innych produktów z listy produktów, których dotyczy problem. Jeśli ustawię tryb indeksu docelowej reguły na „ręczny”, problem się nie powiela. Ale to nie rozwiązuje problemu. Po prostu to ukrywa.
Z mojego punktu widzenia jest to poważny błąd Magento EE.
źródło