magento передает переменную в config.xml из внешнего интерфейса

Я создал собственный модуль и собственное задание 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_expr) для запуска задания cron. т. е. «cron_expr» будет устанавливаться динамически. Любая помощь приветствуется.


person Krishna    schedule 23.07.2013    source источник


Ответы (2)


<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 в конфигурации серверной части

person rbaker86    schedule 23.07.2013
comment
Но разве то, что вы сказали, не добавит текстовое поле на существующую страницу конфигурации системы по умолчанию?? У меня есть собственный файл module.phtml, который содержит форму. В форме у меня есть текстовое поле, которое будет принимать значение cron_expr от пользователя, а затем я хочу, чтобы это cron_expr было установлено в моем config.xml. Есть какой-либо способ сделать это? - person Krishna; 23.07.2013

Я понял... Вот что я сделал.

  1. Прокомментировал следующее из config.xml

         <schedule>
            <cron_expr>*/1 * * * *</cron_expr><!-- will be configurable from custom admin frontend-->
        </schedule>
    
  2. Я создал блочный файл для своего пользовательского adminmodule.phtml. Этот файл содержит форму, в которой пользователь указывает различные параметры, а затем отправляет форму на той же странице.

  3. Я создал функцию setCron($cronData). Эта функция вызывается из phtml:

    $this->setCron($_POST)
    
  4. Функция выглядит следующим образом

    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.

person Community    schedule 24.07.2013