Цільовий набір правил


9

У мене є дивна проблема з правилом Magento Target.

Сценарій: Magento EE 1.12. 30+ переглядів магазинів у тому ж екземплярі Magento. 30k + товари. Більшість продуктів мають однакові налаштування для всіх представлень магазину. Я створив правило для відображення продажів наступним чином. "Показати товари з тієї ж категорії із ціною 100% або більше, ніж поточний продукт". Налаштування показу продажів: "Тільки на основі правил" (видання відтворюється для "На основі правил і вибраних"). Я зберегла правило. переробили все. Все виглядає добре, виглядають розпродажі (для продуктів, які я протестував), як визначено правилом, АЛЕ… Через деякий час для одного і того ж продукту в одному представленні магазину з’являються розпродажі, а в інших представленнях магазину вони не є. Продукт має однакові налаштування для всіх представлень магазину. (і він повинен мати однакові продажі.)

Якщо я змінити щось у правилі та зберегти його знову, набір продуктів починає відображатися на всіх представленнях магазину, але через деякий час проблема відтворюється.

Після перекопування коду я виявив, що збитки, згенеровані цільовим правилом, зберігаються в таблиці 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 |

Як ви бачите, продажі для продукту з id 17372 є однаковими для всіх представлень магазинів, за винятком store_id 20, який порожній. У магазині немає нічого особливого. Вся продукція, що бере участь тут, доступна у всіх магазинах.

Будь-яка ідея?

Дякую. Маріус.


1
Чи cronправильно налаштовано. Правила IIRC відновлюються щоночі і без активної дії cronспричинить дивну поведінку
Ben Lessani - Sonassi

Крон активний і працює щоранку без проблем.
Маріус

Я знайшов ще одне. Після збереження правила таблиця 'enterprise_targetrule_product' містить усі продукти, але через деякий час усі вони втрачаються, крім одного, не завжди одного і того ж. Поки ідентифікатори продуктів знаходяться у таблиці вище, все працює.
Маріус

1
при збереженні продукту цільові правила індексуються для цього продукту, і він закінчується так: (Mage_Rule_Model_Resource_Ab абстракт :: bindRuleToEntity ()) $ adapter-> delete ($ this-> getTable ($ entitInfo ['association_table']]), $ adapter -> quoteInto ($ entitInfo ['rule_id_field']. 'IN (?) AND', $ ruleIds). $ adapter-> quoteInto ($ entitInfo ['entit_id_field']. 'NOT IN (?)', $ entitIds); Це видаляє всі інші продукти із списку постраждалих продуктів. Якщо я встановив режим для індексу targetrule на "вручну", це питання не відтворюється. Але це не вирішує, це просто приховує.
Marius

Будь-яка причина, щоб хтось спростував цього?
FlorinelChis

Відповіді:


7

У EE 1.13 ця помилка, здається, виправлена ​​(але EE 1.13 вже немає)

Відповідно Enterprise_TargetRule_Model_Resource_Index::saveProductIndex, рядок із проблемою було замінено на (підказка: 4-й парам "помилковий")

$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

Це зробило для мене ..
Маріус
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.