Php Magento cron作业表达式动态
我正在尝试在自定义模块中动态设置cron作业。但这不会将作业代码保存到cron_调度表中Php Magento cron作业表达式动态,php,magento,cron,Php,Magento,Cron,我正在尝试在自定义模块中动态设置cron作业。但这不会将作业代码保存到cron_调度表中 <config> <crontab> <jobs> <bookingreservation_summary> <!--<schedule><cron_expr>*/5 * * * *</cron_expr></schedule>-->
<config>
<crontab>
<jobs>
<bookingreservation_summary>
<!--<schedule><cron_expr>*/5 * * * *</cron_expr></schedule>-->
<run><model>bookingreservation/observer::sendBookingSummaryEmail</model></run>
</bookingreservation_summary>
</jobs>
</crontab>
</config>
该类执行并保存到config_数据中
class ABC_Bookingreservation_Model_Config_Backend_Cron extends Mage_Core_Model_Config_Data
{
const CRON_STRING_PATH = 'crontab/jobs/process_bookingreservation_summary/schedule/cron_expr';
const CRON_MODEL_PATH = 'crontab/jobs/process_bookingreservation_summary/run/model';
/**
* Cron settings after save
*
* @return Mage_Adminhtml_Model_System_Config_Backend_Log_Cron
*/
protected function _afterSave()
{
$enabled = $this->getData('groups/booking_summary/fields/enabled/value');
$time = $this->getData('groups/booking_summary/fields/time/value');
$frequncy = $this->getData('groups/booking_summary/fields/frequency/value');
$frequencyDaily = Mage_Adminhtml_Model_System_Config_Source_Cron_Frequency::CRON_DAILY;
$frequencyWeekly = Mage_Adminhtml_Model_System_Config_Source_Cron_Frequency::CRON_WEEKLY;
$frequencyMonthly = Mage_Adminhtml_Model_System_Config_Source_Cron_Frequency::CRON_MONTHLY;
if ($enabled)
{
$cronDayOfWeek = date('N');
$cronExprArray = array(
intval($time[1]), # Minute
intval($time[0]), # Hour
($frequncy == $frequencyMonthly) ? '1' : '*', # Day of the Month
'*', # Month of the Year
($frequncy == $frequencyWeekly) ? '1' : '*', # Day of the Week
);
$cronExprString = join(' ', $cronExprArray);
}
else{
$cronExprString = '';
}
try
{
Mage::getModel('core/config_data')
->load(self::CRON_STRING_PATH, 'path')
->setValue($cronExprString)
->setPath(self::CRON_STRING_PATH)
->save();
Mage::getModel('core/config_data')
->load(self::CRON_MODEL_PATH, 'path')
->setValue((string) Mage::getConfig()->getNode(self::CRON_MODEL_PATH))
->setPath(self::CRON_MODEL_PATH)
->save();
}
catch (Exception $e)
{
Mage::throwException(Mage::helper('adminhtml')->__('Unable to save the cron expression.'));
}
}
}
任何人都可以帮助解决我的代码的问题,因为每当我通过浏览器运行cron.php时,cron_scedule表都会更新,但不会保存此作业中的作业代码
path:crontab/jobs/bookingrervation\u summary/schedule/cron\u expr
而不是:
路径:crontab/jobs/process\u bookingervation\u summary/schedule/cron\u expr
如果您没有解决此问题,请查看它如何工作sitemap模块的cron设置(它与您希望实现的功能相同)取消对代码中的以下行的注释,然后查看它是否工作
<!--<schedule><cron_expr>*/5 * * * *</cron_expr></schedule>-->
我认为这可能有用……如果有用,请告诉我。你曾经解决过这个问题吗?如果是,你需要做什么才能让它工作?找到了这个优秀而简洁的方法,无需额外的代码(对于未来的谷歌用户):
<!--<schedule><cron_expr>*/5 * * * *</cron_expr></schedule>-->