Reguły sprzedaży upsells

9

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.

Marius
źródło
1
Czy Twój cronskonfigurowany jest poprawnie? IIRC zasady są odbudowywane co noc i bez aktywnego cronspowoduje dziwne zachowanie
Ben Lessani - Sonassi
Cron jest aktywny i działa każdego ranka bez problemów.
Marius
Znalazłem jeszcze jedną rzecz. Po zapisaniu reguły tabela „Enterprise_targetrule_product” zawiera wszystkie produkty, ale po pewnym czasie zniknęły wszystkie oprócz jednego, nie zawsze tego samego. Dopóki identyfikatory produktu znajdują się w powyższej tabeli, wszystko działa.
Marius
1
podczas zapisywania produktu reguły docelowe są indeksowane dla tego produktu i kończy się tak: (Mage_Rule_Model_Resource_Abstract :: bindRuleToEntity ()) $ adapter-> usuń ($ this-> getTable ($ entityInfo ['stowarzyszenie_tabela']), $ adapter -> quoteInto ($ entityInfo ['id_pola_ reguły']. 'IN (?) AND', $ rulesIds). $ adapter-> quoteInto ($ entityInfo ['id_identyfikatora']. 'NOT IN (?)', $ entityIds); Spowoduje to usunięcie wszystkich innych produktów z listy produktów, których dotyczy problem. Jeśli ustawię tryb indeksu docelowego na „ręczny”, problem się nie powiela, ale to nie rozwiązuje problemu. Po prostu go ukrywa.
Marius
Czy jest jakiś powód, dla którego ktoś głosuje za tym?
Florinel Chis,

Odpowiedzi:

7

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, funkcja bindRuleToEntityzostała zmieniona na:

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

i linia $adapter->delete(...)została owinięta

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

Kolejny 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:

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

PÓŹNIEJ: zobacz tę łatkę https://github.com/magendooro/targetrulefix

Carco
źródło
Mam 1.13.1 i mam Integrity constraint violation:for key '5B1C775075460366570ABDA2839BC68A'-> ten klucz pochodzi od enterprise_targetrule_index_related... Czy masz pojęcie, czy jest to związane ze wspomnianymi zmianami?
Fra
1

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())

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

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.

Marius
źródło
Czy zaakceptowana odpowiedź rozwiązała Twój problem? Mam ten sam problem w EE 1.11.1.0
dchayka
To zrobiło dla mnie ..
Marius