L'aggiornamento giornaliero delle regole del catalogo non funziona


15

Devo affrontare il problema che l'aggiornamento quotidiano delle regole del catalogo di Magento non funziona. Ciò significa che non ci sono variazioni del prezzo dei prodotti quando arriva la data di scadenza della regola del catalogo, quindi devo premere il pulsante Applica regola in Amministratore. Cron è configurato e funzionante. Sembra che il metodo catalogrule / observer :: dailyCatalogUpdate dovrebbe controllare e applicare le regole automaticamente ogni giorno, ma non è così (anche io ho provato ad avviarlo manualmente). Ecco il codice principale di Magento:

<!--file: app/code/core/Mage/CatalogRule/etc/config.xml-->
<crontab>
    <jobs>
        <catalogrule_apply_all>
            <schedule>
                <cron_expr>*/1 * * * *</cron_expr>
            </schedule>
            <run>
                <model>catalogrule/observer::dailyCatalogUpdate</model>
            </run>
        </catalogrule_apply_all>
    </jobs>
    ...
</crontab>

Osservatore:

/*file app/code/core/Mage/CatalogRule/Model/Observer.php*/
public function dailyCatalogUpdate($observer)
{
    Mage::getResourceSingleton('catalogrule/rule')->applyAllRulesForDateRange();

    return $this;
}

Ho avuto successo modificando il metodo dell'osservatore come di seguito:

/*file app/code/core/Mage/CatalogRule/Model/Observer.php*/
public function dailyCatalogUpdate($observer)
{
    Mage::getModel('catalogrule/rule')->getResourceCollection()
                  ->walk(array(
                         Mage::getResourceSingleton('catalogrule/rule'),
                         'updateRuleProductData'
                  ));
    Mage::getResourceSingleton('catalogrule/rule')->applyAllRulesForDateRange();

    return $this;
}

In questo modo le regole vengono controllate e applicate ogni giorno e i prezzi dei prodotti vengono modificati se la regola scade. Non credo che sia un bug di Magento. Si prega di avvisare qual è il problema che le regole non vengono controllate e applicate automaticamente?


Ci sono errori nel registro degli errori PHP o nella colonna dei messaggi nella tabella cron_schedule? Suppongo che il cron sia effettivamente chiamato poiché hai indicato che avresti avuto un certo successo modificando il metodo dell'osservatore.
davidalger,

Inoltre è possibile effettuare alcune chiamate di registro nell'osservatore originale e vedere se viene chiamato. Solo per essere al sicuro su questo.
Petar Dzhambazov,

Risposte:


7

Di recente ho avuto lo stesso problema quando stavo testando una nuova regola di prezzo per il nostro progetto. E la ragione del mio mal di testa era che non me ne sono accorto ogni volta che quando si crea una nuova regola o si modificano alcune delle regole esistenti - è necessario premere il pulsante " Applica regole " per far conoscere Magento alle modifiche delle regole.


2
Grazie mille. Hai ragione: la regola di salvataggio non è sufficiente per le modifiche. Sarebbe bello avere una colonna aggiuntiva nella griglia delle regole che dice se la regola è stata applicata o meno.
vovsky

Si suppone che dailyCatalogUpdate applichi le regole ogni notte se non si preme quel pulsante. Altrimenti qual è lo scopo di quel cron?
Oca

7

Accertarsi di selezionare "Applica regole" non è sempre sufficiente. Di recente ho scoperto che se cron non è impostato correttamente, ad un certo punto in futuro, le regole non verranno applicate.

Non sono stato in grado di inchiodare quando le regole hanno smesso di funzionare. Nel mio caso ho avuto una manciata di regole che si applicano in base al gruppo di clienti (all'ingrosso).

  1. Controlla la cron_scheduletabella. Assicurati di avere qui alcune voci corrispondenti a catalogrule_apply_all(penso che sia il nome del processo).
  2. Impostare cronjob nel config.xmlfile del modulo CatalogRule per l'esecuzione ogni minuto circa (per il test) con * / 1.
  3. Guarda indietro al cron_scheduletavolo e continua a ricaricarlo ogni paio di minuti. Dovresti vedere nuovi processi aggiunti / eseguiti automaticamente senza mai dover colpire manualmente il cron.phpfile del tuo negozio .
  4. Se non vedi nessuno dei processi aggiornare manualmente, SSH nel sito come l'utente proprietario dei file del sito. Da una riga di comando: crontab -e(potresti essere in Vim e non sapere cosa fare, suggerisco a Google di utilizzare i comandi Vim di base).
  5. Imposta crontab per l'esecuzione: */1 * * * * /path/to/your/cron.sh
  6. Ora controlla di cron_schedulenuovo la tabella per assicurarti che i processi cron vengano eseguiti automaticamente.
  7. Spero che tutto vada bene a questo punto. Vai avanti e indietro e imposta i tuoi processi cron in modo che vengano eseguiti agli intervalli desiderati.

3

Controlla se il lavoro viene programmato

Puoi farlo controllando il database o installando questa estensione: Aoe_Scheduler

Verifica se il lavoro funziona

Crea uno script php run_my_rules.phpe inserisci solo il contenuto della funzione: dailyCatalogUpdateeseguilo dalla console. Guarda cosa sta succedendo.

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.