Aturan target meningkat

9

Saya memiliki masalah aneh dengan aturan Magento Target jual-atas.

Skenario: Magento EE 1.12. 30+ tampilan toko pada instance Magento yang sama. 30k + produk. Sebagian besar produk memiliki pengaturan yang sama pada semua tampilan toko. Saya telah membuat aturan untuk menampilkan upsell sebagai berikut. "Tampilkan produk dari kategori yang sama dengan harga 100% atau lebih dari produk saat ini". Pengaturan untuk menampilkan kenaikan penjualan: 'Hanya berbasis aturan' (masalah mereproduksi untuk 'Berbasis aturan dan dipilih'). Saya sudah menyimpan aturan. mengindeks ulang segalanya. Semuanya terlihat OK, upsell muncul (untuk produk yang saya uji) seperti yang didefinisikan oleh aturan, TAPI ... Setelah beberapa waktu untuk produk yang sama di satu tampilan toko upsells muncul dan pada tampilan toko lain mereka tidak. Produk memiliki pengaturan yang sama pada semua tampilan toko. (Dan itu harus memiliki upsell yang sama.)

Jika saya memodifikasi sesuatu dalam aturan dan menyimpannya lagi, upsell mulai muncul di semua tampilan store tetapi setelah beberapa waktu masalah ini mereproduksi.

Setelah menggali dalam kode saya menemukan bahwa upsell yang dihasilkan oleh aturan target disimpan dalam tabel enterprise_targetrule_index_upsell untuk menghindari parsing semua aturan setiap kali. Inilah cara kerjanya. (tabel terpotong saat menyimpan aturan) Jika ada 'aturan target' meningkat dalam tabel yang saya sebutkan maka mereka diambil. Jika tidak maka aturan diuraikan dan hasilnya dimasukkan dalam tabel indeks. Berikut adalah beberapa catatan dari tabel itu untuk produk tertentu.

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

Seperti yang Anda lihat upsells untuk produk dengan id 17372 semuanya sama pada semua tampilan store kecuali store_id 20 yang kosong. Tidak ada yang istimewa dari toko 20. Semua produk yang terlibat di sini tersedia di semua toko.

Ada ide?

Terima kasih. Marius.

Marius
sumber
1
Apakah Anda crondikonfigurasi dengan benar. IIRC peraturan dibangun kembali setiap malam dan tanpa aktif cronakan menghasilkan perilaku aneh
Ben Lessani - Sonassi
Cron aktif dan berjalan setiap pagi tanpa masalah.
Marius
Saya menemukan satu hal lagi. Setelah menyimpan aturan, tabel 'enterprise_targetrule_product' berisi semua produk tetapi setelah beberapa saat semuanya hilang kecuali satu, tidak selalu sama. Selama id produk berada di tabel di atas, semuanya berfungsi.
Marius
1
ketika menyimpan produk, aturan target diindeks untuk produk itu dan akhirnya melakukan ini: (Mage_Rule_Model_Resource_Abstract :: bindRuleToEntity ()) $ adapter-> delete ($ this-> getTable ($ entitasInfo ['associations_table']), $ adapter -> quoteInto ($ entityInfo ['rule_id_field']. 'IN (?) AND', $ ruleIds). $ adapter-> quoteInto ($ entityInfo ['entity_id_field']. 'BUKAN DI (?)', $ entityIds); Ini menghapus semua produk lain dari daftar produk yang terpengaruh. Jika saya mengatur mode untuk indeks aturan target ke 'manual' masalah tidak mereproduksi. Tapi ini tidak menyelesaikannya. Itu hanya menyembunyikannya.
Marius
Adakah alasan seseorang membatalkan ini?
FlorinelChis

Jawaban:

7

Di EE 1.13, bug ini tampaknya diperbaiki (tetapi EE 1.13 hilang)

Dalam Enterprise_TargetRule_Model_Resource_Index::saveProductIndex, sejalan dengan masalah diganti dengan (petunjuk: 4 param "false")

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

dan, dalam Mage_Rule_Model_Resource_Abstract, fungsi bindRuleToEntitydiubah menjadi:

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

dan garis $adapter->delete(...)dibungkus

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

Bug lain, shell / indexer.php --reindex targetrule tidak melakukan apa-apa, jadi, Anda tidak dapat mengindeks ulang melalui cron / konsol, perbaiki dengan menambahkan Enterprise_TargetRule_Model_Index:

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

KEMUDIAN: lihat tambalan ini https://github.com/magendooro/targetrulefix

carco
sumber
Saya di 1.13.1 dan saya memiliki Integrity constraint violation:for key '5B1C775075460366570ABDA2839BC68A'-> kunci ini berasal dari enterprise_targetrule_index_related... apakah Anda tahu jika itu terkait dengan perubahan yang disebutkan?
Fra
1

Saya memutuskan untuk menambahkan apa yang saya temukan sebagai jawaban sehingga pertanyaan ini tidak akan ditandai sebagai tidak dijawab.

saat menyimpan produk, aturan target diindeks untuk produk itu dan akhirnya melakukan ini :( 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); 

Ini menghapus semua produk lain dari daftar produk yang terpengaruh. Jika saya mengatur mode untuk indeks targetrule ke 'manual' masalah tidak mereproduksi. Tapi ini tidak menyelesaikannya. Itu hanya menyembunyikannya.

Dari sudut pandang saya, ini adalah bug Magento EE yang serius.

Marius
sumber
Apakah jawaban yang diterima menyelesaikan masalah Anda? Saya mengalami masalah yang sama di EE 1.11.1.0
dchayka
Itu berhasil untuk saya ..
Marius