Upsell di regole target


9

Ho uno strano problema con le vendite al dettaglio di Magento Target.

Scenario: Magento EE 1.12. Più di 30 punti vendita nella stessa istanza di Magento. 30k + prodotti. La maggior parte dei prodotti ha le stesse impostazioni su tutte le visualizzazioni del negozio. Ho creato una regola per mostrare gli upsell come segue. "Mostra prodotti della stessa categoria con un prezzo pari o superiore al 100% rispetto al prodotto corrente". Impostazioni per la visualizzazione di upsell: 'Solo basato su regole' (il problema si riproduce per 'Basato su regole e selezionato'). Ho salvato la regola. reindicizzato tutto. Tutto sembra a posto, compaiono gli upsell (per i prodotti che ho testato) come definito dalla regola, MA ... Dopo un po 'di tempo per lo stesso prodotto in una visualizzazione del negozio, appaiono gli upsell e in altre visualizzazioni del negozio non lo fanno. Il prodotto ha le stesse impostazioni su tutte le visualizzazioni del negozio. (e dovrebbe avere gli stessi upsell.)

Se modifico qualcosa nella regola e lo salvo di nuovo, gli upsell iniziano a comparire su tutte le viste dello store ma dopo qualche tempo il problema si riproduce.

Dopo aver scavato nel codice ho scoperto che gli upsell generati dalla regola target sono mantenuti nella tabella enterprise_targetrule_index_upsell per evitare di analizzare tutte le regole ogni volta. Ecco come funziona. (la tabella viene troncata durante il salvataggio di una regola) Se nella tabella che ho menzionato sono presenti upsell di "regola di destinazione", questi vengono recuperati. In caso contrario, le regole vengono analizzate e il risultato viene inserito nella tabella dell'indice. Ecco alcuni record da quella tabella per un prodotto specifico.

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

Come puoi vedere, gli upsell per il prodotto con ID 17372 sono tutti uguali su tutte le visualizzazioni dello store tranne store_id 20 che è vuoto. Non c'è nulla di speciale nel negozio 20. Tutti i prodotti qui coinvolti sono disponibili in tutti i negozi.

Qualche idea?

Grazie. Mario.


1
È cronconfigurato correttamente. IIRC le regole vengono ricostruite ogni notte e senza un attivo cronprodurrà un comportamento strano
Ben Lessani - Sonassi

Il cron è attivo e funziona ogni mattina senza problemi.
Marius

Ho trovato un'altra cosa. Dopo aver salvato la regola, la tabella "enterprise_targetrule_product" contiene tutti i prodotti, ma dopo qualche tempo sono andati tutti tranne uno, non sempre lo stesso. Finché gli ID prodotto sono nella tabella sopra, tutto funziona.
Marius

1
quando si salva un prodotto, le regole di destinazione vengono indicizzate per quel prodotto e finisce per farlo: (Mage_Rule_Model_Resource_Abstract :: bindRuleToEntity ()) $ adapter-> delete ($ this-> getTable ($ entityInfo ['association_table']), $ adapter -> quoteInto ($ entityInfo ['rule_id_field']. 'IN (?) AND', $ ruleIds). $ adapter-> quoteInto ($ entityInfo ['entity_id_field']. 'NOT IN (?)', $ entityIds); Questo elimina tutti gli altri prodotti dall'elenco dei prodotti interessati. Se imposto la modalità per l'indice targetrule su "manuale" il problema non si sta riproducendo. Ma questo non lo risolve. Lo nasconde e basta.
Marius

Qual è il motivo per cui qualcuno ha votato in negativo?
Florinel,

Risposte:


7

In EE 1.13, questo errore sembra essere stato corretto (ma EE 1.13 è sparito)

In Enterprise_TargetRule_Model_Resource_Index::saveProductIndex, la riga con il problema è stata sostituita da (suggerimento: 4th param "false")

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

e, in Mage_Rule_Model_Resource_Abstract, la funzione è bindRuleToEntitystata cambiata in:

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

e la linea $adapter->delete(...)fu avvolta

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

Un altro bug, shell / indexer.php --reindex targetrule non fa nulla, quindi non è possibile reindicizzare tramite cron / console, risolto aggiungendo Enterprise_TargetRule_Model_Index:

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

DOPO: vedi questa patch https://github.com/magendooro/targetrulefix


Sono su 1.13.1 e sto avendo un Integrity constraint violation:for key '5B1C775075460366570ABDA2839BC68A'-> questa chiave proviene da enterprise_targetrule_index_related... hai idea se è correlata alle modifiche menzionate?
Fra

1

Ho deciso di aggiungere ciò che ho trovato come risposta in modo che questa domanda non venga contrassegnata come senza risposta.

quando si salva un prodotto, le regole di destinazione vengono indicizzate per quel prodotto e finisce per farlo :( 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); 

Ciò elimina tutti gli altri prodotti dall'elenco dei prodotti interessati. Se imposto la modalità per l'indice targetrule su "manuale" il problema non si sta riproducendo. Ma questo non lo risolve. Lo nasconde e basta.

Dal mio punto di vista si tratta di un grave bug di MagE EE.


La risposta accettata ha risolto il tuo problema? Sto riscontrando lo stesso problema in EE 1.11.1.0
dchayka,

Lo ha fatto per me ..
Marius
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.