Целевое правило upsells

9

У меня странная проблема с продвижением правил Magento Target.

Сценарий: Magento EE 1.12. 30+ просмотров магазина на том же экземпляре Magento. 30к + продукты. Большинство продуктов имеют одинаковые настройки для всех видов магазина. Я создал правило для показа upsells следующим образом. «Показать товары из той же категории с ценой 100% или более, чем текущий товар». Настройки для показа upsells: «Только на основе правил» (проблема воспроизводится для «На основе правил и выбранных»). Я сохранил правило. переиндексировал все. Все выглядит хорошо, появляются продажи (для продуктов, которые я тестировал), как определено правилом, НО ... Через некоторое время для одного и того же продукта в одном представлении магазина появляются продажи, а в других - нет. Продукт имеет одинаковые настройки для всех видов магазина. (и он должен иметь такие же upsells.)

Если я изменяю что-то в правиле и сохраняю его снова, продажи начинают появляться во всех представлениях магазина, но через некоторое время проблема воспроизводится.

После анализа кода я обнаружил, что upsells, сгенерированные целевым правилом, хранятся в таблице enterprise_targetrule_index_upsell, чтобы избежать синтаксического анализа всех правил каждый раз. Вот как это работает. (таблица усекается при сохранении правила) Если в таблице, о которой я упомянул, есть какие-либо продажи «целевого правила», то они извлекаются. Если нет, то правила анализируются, и результат помещается в таблицу индексов. Вот некоторые записи из этой таблицы для конкретного продукта.

+-----------+----------+-------------------+---------------------------------------------------------------------+---------------------+
| 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 |

Как вы можете видеть, продажи товара с идентификатором 17372 одинаковы во всех представлениях магазина, кроме store_id 20, который пуст. В магазине 20 нет ничего особенного. Все продукты, представленные здесь, доступны во всех магазинах.

Есть идеи?

Спасибо. Marius.

Мариус
источник
1
Ваш cronнастроен правильно. IIRC правила перестраиваются по ночам и без активного cronвыдают странное поведение
Бен Лессани - Сонасси
Крон активен и работает каждое утро без проблем.
Мариус
Я нашел еще одну вещь. После сохранения правила таблица 'enterprise_targetrule_product' содержит все продукты, но через некоторое время все они исчезли, кроме одного, не всегда одного и того же. Пока идентификаторы продуктов находятся в таблице выше, все работает.
Мариус
1
при сохранении продукта целевые правила индексируются для этого продукта, и в итоге выполняется следующее: (Mage_Rule_Model_Resource_Abstract :: bindRuleToEntity ()) -> quoteInto ($ entityInfo ['rule_id_field']. 'IN (?) AND', $ ruleIds). $ adapter-> quoteInto ($ entityInfo ['entity_id_field']. 'NOT IN (?)', $ entityIds); При этом удаляются все остальные продукты из списка затронутых продуктов. Если я установил режим для индекса targetrule как «ручной», проблема не воспроизводится. Но это не решает ее. Она просто скрывает ее
Marius
Есть ли причина, по которой это кто-то отрицает?
FlorinelChis

Ответы:

7

В EE 1.13 эта ошибка, кажется, исправлена ​​(но EE 1.13 исчезла)

In Enterprise_TargetRule_Model_Resource_Index::saveProductIndex, строка с проблемой была заменена на (подсказка: 4-й параметр "false")

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

и, в Mage_Rule_Model_Resource_Abstract, функция bindRuleToEntityбыла изменена на:

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

и линия $adapter->delete(...)была завернута в

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

Другая ошибка, shell / indexer.php --reindex targetrule ничего не делает, поэтому вы не можете переиндексировать через cron / console, исправить это, добавив Enterprise_TargetRule_Model_Index:

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

ПОЗЖЕ: посмотрите этот патч https://github.com/magendooro/targetrulefix

Карко
источник
Я на 1.13.1 и у меня есть Integrity constraint violation:for key '5B1C775075460366570ABDA2839BC68A'-> этот ключ взялся enterprise_targetrule_index_related... у вас есть какие-либо идеи, если это связано с упомянутыми изменениями?
Фра
1

Я решил добавить то, что нашел в качестве ответа, чтобы этот вопрос не был помечен как неотвеченный.

при сохранении продукта целевые правила индексируются для этого продукта, и в конечном итоге это происходит :( 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); 

Это удалит все другие продукты из списка затронутых продуктов. Если я установил режим для индекса targetrule как «ручной», проблема не воспроизводится. Но это не решает этого. Это просто скрывает это.

С моей точки зрения, это серьезная ошибка Magento EE.

Мариус
источник
Разрешенный ответ решил вашу проблему? У меня та же проблема в EE 1.11.1.0
dchayka
Это сделал для меня ..
Мариус