我创建了一个自定义模块和一个自定义cron作业。这是我的代码:
<crontab>
<jobs>
<customer_cron_job>
<schedule>
<cron_expr>*/1 * * * *</cron_expr><!-- will be configurable from custom admin frontend-->
</schedule>
<run>
<model>globalconnector/observer::cronUpdates</model>
</run>
</customer_cron_job>
</jobs>
</crontab>
现在这个模块有一个自定义的管理前端。在这里,我想为用户提供指定运行cron作业的时间(cron_expr)的功能。即"cron_expr"将被动态设置。非常感谢您的帮助。
<crontab>
<jobs>
<company_export_send_order>
<schedule>
<!-- Use the config path in your system.xml here -->
<config_path>globalconnector/general/cron_settings</config_path>
</schedule>
<run>
<model>globalconnector/observer::cronUpdates</model>
</run>
</company_export_send_order>
</jobs>
</crontab>
在模块的system.xml中,只需定义一个文本字段即可在其中输入cron表达式。
这里有更多详细信息:后端配置中的magento-cron
我得到了……以下是我所做的。
对config.xml 中的以下内容进行了评论
<schedule> <cron_expr>*/1 * * * *</cron_expr><!-- will be configurable from custom admin frontend--> </schedule>
我为我的自定义adminmodule.html创建了一个块文件。这个文件包含一个表单,用户在其中提供各种参数,然后在同一页面上提交表单。
我创建了一个名为setCron($cronData)的函数。此函数从phtml:调用
$this->setCron($_POST)
功能如下
function setCron($cronData){ $gcSwitch = new Mage_Core_Model_Config(); $cronExprString = ''; foreach ($cronData as $key => $value) { $cronExprString = $cronExprString.' '.$value; } $cronExprString = ltrim($cronExprString); $gcSwitch ->saveConfig('crontab/jobs/customer_cron_job/schedule/cron_expr', $cronExprString, 'default', 0); }
这样做的目的是更新数据库中的"core_config_data"表。关于更多的证据,我们可以看看这张表。此表包含以下列:
config_id(PK),scope,scope_id,path,value
我想现在可以理解上面的setConfig()方法操作了。还有一件事,该表已经包含"crontab/jobs/customer_cron_job/schedule/cron_expr"的条目。如果没有,则config.xml中存在一些问题。