Tra tutte le attività di programmazione ci sono quelli che devono essere ripetute ad intervalli regolari. Una di queste può essere l’invio di email o newsletter, la pulizia dei log, la generazoine di sitemap e molto altro.
Come si fa in Magento a creare uno script che esegue ripetutamente (ad intervalli regolari) una funziona php?
Come in tutti i sistemi unix la risposta è CRON.
Cron è un programma che permette di eseguire ad intervalli regolari altri programmi, ma passiamo immediatamente al nostro magento.
Per prima cosa è necessario creare un modulo con la seguente configurazione:
[sourcecode language=”xml”]
<?xml version="1.0"?>
<config>
<modules>
<IacopoPecchi_Varie>
<version>0.1.0</version>
</IacopoPecchi_Varie>
</modules>
<global>
<models>
<varie>
<class>IacopoPecchi_Varie_Model</class>
</varie>
</models>
</global>
<crontab>
<jobs>
<buoni_send>
<schedule>
<cron_expr>* * * * *</cron_expr>
</schedule>
<run>
<model>varie/observer::funzioneDaRchiamare</model>
</run>
</buoni_send>
</jobs>
</crontab>
</config>
[/sourcecode]
Come vedere non c’è nulla di particolare se non le impostazoini del model e quelle del cron.
Particolare importanza va data alla riga
[sourcecode language=”xml”]
<cron_expr>* * * * *</cron_expr>
[/sourcecode]
che sta ad indicare la frequenza con la quale richiamare lo script php, o meglio la funzione funzioneDaRchiamare
Gli asterischi hanno un valore posizionale e rispettivamente significano secondi, ore, giorni, settimane, mesi ed anni. Questa tabella presa da wikipedia spiega meglio come impostare il periodo:
Entry | Description | Equivalent To |
---|---|---|
@yearly (or @annually) |
Run once a year, midnight, Jan. 1st | 0 0 1 1 * |
@monthly |
Run once a month, midnight, first of month | 0 0 1 * * |
@weekly |
Run once a week, midnight on Sunday | 0 0 * * 0 |
@daily |
Run once a day, midnight | 0 0 * * * |
@hourly |
Run once an hour, beginning of hour | 0 * * * * |
@reboot |
Run at startup |
Fatto questo sara necessario solamente creare il file Observer.php all’interno della directory Model del nostro modulo con il seguente contenuto:
[sourcecode language=”php”]
<?php
class IacopoPecchi_Varie_Model_Observer
{
public function funzioneDaRchiamare()
{
Mage::log("ciao");
}
}
?>
[/sourcecode]
Magento in questo modo è predisposto per eseguire script ad intervalli di tempo previssati. L’ultima cosa da fare è quella di richiamare il file /path_to_magento/cron.php ad intervalli regolari (tanto frenquenti quanto quelli impostati nel modulo) per fare comunicare il cron di magento con il cron di sistema linux.
Per i dettagli su come inserire uno script cron nei sistemi unix/linux potete leggere qua su wikipedia: Crontab