目标规则加售


9

我对Magento Target规则追加销售有一个奇怪的问题。

场景:Magento EE 1.12。在同一个Magento实例上存储30多个视图。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为空白。商店20没什么特别的。这里涉及的所有产品在所有商店中都可用。

任何的想法?

谢谢。马吕斯


1
您的cron配置是否正确。IIRC每晚都会重新建立规则,并且没有活动cron就会产生奇怪的行为
Ben Lessani-Sonassi 2013年

Cron处于活动状态,并且每天早晨运行都没有问题。
Marius

我发现了另一件事。保存规则后,表“ enterprise_targetrule_product”包含所有产品,但是一段时间后,所有产品都消失了,除了一个产品(并不总是相同的产品)。只要产品ID在上表中,一切都可以使用。
Marius

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指数“手动”问题的模式不复制,但这并不解决它,它只是隐藏它。。
马吕斯

有人反对这个有什么理由吗?
FlorinelChis 2013年

Answers:


7

在EE 1.13中,此错误似乎已修复(但是EE 1.13已消失)

在中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...您是否知道它是否与上述更改有关?
2014年

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索引的模式设置为“ manual”,则不会重现该问题。但这并不能解决。它只是将其隐藏。

从我的角度来看,这是一个严重的Magento EE错误。


接受的答案解决了您的问题吗?我在EE 1.11.1.0中遇到了相同的问题
dchayka '16

它为我做了..
马吕斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.