Hedef kural yükseliyor


9

Magento Target kuralıyla ilgili garip bir sorunum var.

Senaryo: Magento EE 1.12. Aynı Magento örneğinde 30'dan fazla mağaza görünümü. 30k + ürünler. Ürünlerin çoğu tüm mağaza görünümlerinde aynı ayarlara sahiptir. Aşağıdaki gibi satışları göstermek için bir kural oluşturdum. “Aynı kategorideki ürünleri, mevcut ürünün% 100 veya daha fazla fiyatıyla göster”. Yükselme gösterme ayarları: 'Yalnızca kural tabanlı' (sorun 'Kural tabanlı ve seçili' için yeniden oluşturulur). Kuralı kaydettim. her şeyi yeniden endeksledi. Her şey iyi görünmek için dikişler, kurallar tarafından tanımlandığı gibi (test ettiğim ürünler için) satışlar görünür, AMA… Bir mağaza görünümünde aynı ürün için bir süre sonra satışlar görünür ve diğer mağaza görünümlerinde görünmez. Ürün, tüm mağaza görünümlerinde aynı ayarlara sahiptir. (ve aynı yükselişe sahip olmalıdır.)

Kuraldaki bir şeyi değiştirip tekrar kaydedersem, satış mağazaları tüm mağaza görünümlerinde görünmeye başlar, ancak bir süre sonra sorun yeniden üretilir.

Kodu kazdıktan sonra, hedef kural tarafından oluşturulan yukarı satışların her zaman tüm kuralları ayrıştırmaktan kaçınmak için enterprise_targetrule_index_upsell tablosunda tutulduğunu öğrendim. İşte böyle çalışır. (bir kural kaydedilirken tablo kesilir) Bahsettiğim tabloda herhangi bir 'hedef kural' yükseliyorsa, bunlar alınır. Değilse, kurallar ayrıştırılır ve sonuç dizin tablosuna konur. İşte belirli bir ürün için bu tablodaki bazı kayıtlar.

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

Gördüğünüz gibi 17372 kimliğine sahip ürün satışları, boş olan store_id 20 dışındaki tüm mağaza görünümlerinde aynıdır. Mağaza 20 hakkında özel bir şey yoktur. Burada yer alan tüm ürünler tüm mağazalarda mevcuttur.

Herhangi bir fikir?

Teşekkürler. Marius.


1
Sizin mi crondoğru yapılandırılmamış. IIRC kuralları yeniden inşa gecelik ve bir aktif olmadan crontek davranış üretecek
Ben Lessani - Sonassi

Cron aktiftir ve her sabah sorunsuz çalışır.
Marius

Başka bir şey buldum. Kuralı kaydettikten sonra, 'enterprise_targetrule_product' tablosu tüm ürünleri içerir, ancak bir süre sonra hepsi bir değil, hepsi aynı değil. Ürün kimlikleri yukarıdaki tabloda olduğu sürece her şey işe yarar.
Marius

1
bir ürünü kaydederken hedef kurallar o ürün için endekslenir ve bunu yapar: (Mage_Rule_Model_Resource_Abstract :: bindRuleToEntity ()) $ adaptor-> delete ($ this-> getTable ($ entityInfo ['associations_table']), $ adaptor -> quoteInto ($ entityInfo ['rule_id_field']. 'IN (?) AND', $ ruleIds). $ adaptor-> quoteInto ($ entityInfo ['entity_id_field']. 'NOT IN (?)', $ entityIds); Bu, etkilenen ürün listesindeki diğer tüm ürünleri siler Eğer targetrule dizini için modu 'manuel' olarak ayarlarsam, sorun yeniden üretilmez.Ancak bu çözülmez, sadece gizler.
Marius

Birinin bunu küçümsemesi için bir sebep var mı?
Mart'ta

Yanıtlar:


7

EE 1.13'te, bu hata düzeltilmiş gibi görünüyor (ancak EE 1.13 gitti)

In Enterprise_TargetRule_Model_Resource_Index::saveProductIndex, problemli satır ile değiştirildi (ipucu: 4. param "false")

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

ve içinde Mage_Rule_Model_Resource_Abstractişlev bindRuleToEntityşu şekilde değiştirildi:

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

ve çizgi $adapter->delete(...)içine sarılmış

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

Başka bir hata, shell / indexer.php --reindex targetrule hiçbir şey yapmaz, bu nedenle, cron / konsol aracılığıyla yeniden dizine ekleyemezsiniz, ekleyerek düzeltin Enterprise_TargetRule_Model_Index:

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

LATER: bu yamaya bakın https://github.com/magendooro/targetrulefix


Ben 1.13.1 ve bir Integrity constraint violation:for key '5B1C775075460366570ABDA2839BC68A'-> bu anahtar geliyor enterprise_targetrule_index_related... söz konusu değişikliklerle ilgili herhangi bir fikrin var mı?
Fra

1

Cevap olarak bulduğum şeyi eklemeye karar verdim, böylece bu soru cevapsız olarak işaretlenmeyecek.

bir ürünü kaydederken, hedef kurallar o ürün için endekslenir ve bunu yapar :( 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); 

Bu, etkilenen ürün listesindeki diğer tüm ürünleri siler. Hedef kural dizini için modu 'manuel' olarak ayarlarsam sorun yeniden oluşmaz. Ancak bu çözülmez. Sadece gizler.

Benim açımdan bu ciddi bir Magento EE hatası.


Kabul edilen cevap sorununuzu çözdü mü? Aynı sorunu EE 1.11.1.0'da yaşıyorum
dchayka

Benim için yaptı ..
Marius
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.