magento cron in backend configuration

后端 未结 3 858
無奈伤痛
無奈伤痛 2020-12-13 21:33

So I know how to setup a cron using the config.xml crontab stuff:


    
        
            

        
相关标签:
3条回答
  • 2020-12-13 22:17

    If I were approaching this problem, I might run the cronjob at whatever the maximum interval useful to me was, and then use the cronjob execution itself to account for the system setting. I'm not sure if the solution you posted will work, but if it does come tell us, because it's another pretty clever approach :)

    0 讨论(0)
  • 2020-12-13 22:18

    A better solution that doesn't involve a custom backend model.

    config.xml

    <?xml version="1.0"?>   
    <config>
        <modules>
            <Company_Export>
                <version>0.1.0</version>
            </Company_Export>
        </modules>
        <global>
            <models>
                <company_export>
                    <class>Company_Export_Model</class>
                </company_export>
            </models>
        </global>
        <default>
            <export>                
                <order>
                    <cron_settings>*/5 * * * *</cron_settings>
                </order>
            </export>
        </default>
        <crontab>
            <jobs>                
                <company_export_send_order>
                    <schedule>
                        <config_path>export/order/cron_settings</config_path>
                    </schedule>
                    <run>
                        <model>company_export/observer::exportOrderData</model>
                    </run>
                </company_export_send_order>
            </jobs>
        </crontab>
    </config>
    

    system.xml

    <?xml version="1.0"?>
    <config>
        <tabs>
            <feedsconfig translate="label" module="export">
                <label>Feeds Configuration</label>
                <sort_order>99999</sort_order>
            </feedsconfig>
        </tabs>
        <sections>
            <export translate="label" module="export">
                <label>Export</label>
                <tab>feedsconfig</tab>
                <frontend_type>text</frontend_type>
                <sort_order>10000</sort_order>
                <show_in_default>1</show_in_default>
                <groups>
                    <order translate="label">
                        <label>Order</label>
                        <frontend_type>text</frontend_type>
                        <sort_order>2</sort_order>
                        <show_in_default>1</show_in_default>
                        <fields>
                             <cron_settings>
                                <label>How often do you want the cron to run?</label>
                                <frontend_type>text</frontend_type>
                                <sort_order>40</sort_order>
                                <comment>Use Crontab Format (Eg. "*/5 * * * *" for every 5 minutes)</comment>
                                <show_in_default>1</show_in_default>
                            </cron_settings>
                        </fields>
                    </order>
                </groups>
            </export>
        </sections>
    </config>
    
    0 讨论(0)
  • 2020-12-13 22:31

    A proof of concept. Modify to your needs:

    <?php
    
    /**
     * Model for Working with the backend cron configuration for export
     *
     * @author bryan
     */
    class Company_Export_Model_Config_Cron extends Mage_Core_Model_Config_Data
    {
    
        protected function _afterSave(){
    
            $groupId = $this->getGroupId();
    
            $cronStringPath = 'crontab/jobs/company_export_send_' . $groupId . '/schedule/cron_expr';
            $cronModelPath = 'crontab/jobs/company_export_send_' . $groupId . '/run/model';
    
            $value = $this->getData('groups/' . $groupId . '/fields/cron_setting/value');
    
            Mage::getModel('core/config_data')
            ->load($cronStringPath, 'path')
                ->setValue($value)
                ->setPath($cronStringPath)
                ->save();
            Mage::getModel('core/config_data')
                ->load($cronModelPath, 'path')
                ->setValue((string) Mage::getConfig()->getNode($cronModelPath))
                ->setPath($cronModelPath)
                ->save();           
    
        }
    }
    

    and the config.xml:

    <?xml version="1.0"?>
    
    <config>
        <modules>
            <Company_Export>
                <version>0.1.0</version>
            </Company_Export>
        </modules>
        <global>
            <models>
                <company_export>
                    <class>Company_Export_Model</class>
                </company_export>
            </models>
            <helpers>
                <export>
                    <class>Company_Export_Helper</class>
                </export>
            </helpers>
            <resources>
                <export_setup>
                    <setup>
                        <module>Company_Export</module>
                    </setup>
                    <connection>
                        <use>core_setup</use>
                    </connection>
                </export_setup>
                <export_write>
                    <connection>
                        <use>core_write</use>
                    </connection>
                </export_write>
                <export_read>
                    <connection>
                        <use>core_read</use>
                    </connection>
                </export_read>
            </resources>
        </global>
        <adminhtml> 
            <acl> 
                <resources> 
                    <admin> 
                        <children> 
                            <system> 
                                <children> 
                                    <config> 
                                        <children> 
                                            <export> 
                                                <title>Order Export Configuration</title> 
                                            </export> 
                                        </children> 
                                    </config> 
                                </children> 
                            </system> 
                        </children> 
                    </admin> 
                </resources> 
            </acl> 
        </adminhtml>
        <crontab>
            <jobs>                
                <company_export_send_order>
                    <run><model>company_export/observer::exportOrderData</model></run>
                </company_export_send_order>
            </jobs>
        </crontab>
    </config>
    

    and system.xml:

    <?xml version="1.0"?>
    
    <config>
        <tabs>
            <feedsconfig translate="label" module="export">
                <label>Feeds Configuration</label>
                <sort_order>99999</sort_order>
            </feedsconfig>
        </tabs>
        <sections>
            <export translate="label" module="export">
                <label>Export</label>
                <tab>feedsconfig</tab>
                <frontend_type>text</frontend_type>
                <sort_order>10000</sort_order>
                <show_in_default>1</show_in_default>
                <show_in_website>0</show_in_website>
                <show_in_store>0</show_in_store>
                <groups>
                    <order translate="label">
                        <label>Order</label>
                        <frontend_type>text</frontend_type>
                        <sort_order>2</sort_order>
                        <show_in_default>1</show_in_default>
                        <show_in_website>0</show_in_website>
                        <show_in_store>0</show_in_store>
                        <fields>
                             <cron_setting>
                                <label>How often do you want the cron to run?</label>
                                <frontend_type>text</frontend_type>
                                <backend_model>company_export/config_cron</backend_model>
                                <sort_order>40</sort_order>
                                <comment>Use Crontab Format (Eg. "*/5 * * * *" for every 5 minutes)</comment>
                                <show_in_default>1</show_in_default>
                                <show_in_website>0</show_in_website>
                                <show_in_store>0</show_in_store>
                            </cron_setting>
                        </fields>
                    </order>
                </groups>
            </export>
        </sections>
    </config>
    
    0 讨论(0)
提交回复
热议问题