2011-06-22 24 views
11

Vì vậy, tôi biết làm thế nào để thiết lập một cron sử dụng các công cụ config.xml crontab:Magento cron trong cấu hình backend

<crontab> 
    <jobs> 
     <millena_export_send_all> 
      <schedule><cron_expr>* * * * *</cron_expr></schedule> 
      <run><model>millena_export/observer::exportOrderData</model></run> 
     </millena_export_send_all> 
    </jobs> 
</crontab> 

Nhưng những gì tôi đang bối rối về là làm thế nào để làm cho điều đó cron_expr một thiết lập trong các phụ trợ mà có thể được thay đổi (cứ sau 5 phút, cứ 10 phút một lần, vv). Tôi nghĩ rằng tôi có thể sử dụng backend_model và sau đó trong một phương thức after_save tôi có thể làm setStoreConfig ('path/to/schedule/cron_expr', '*/5 * * * *') hoặc một cái gì đó để sắp xếp và nó sẽ lưu trong bộ nhớ cache. Suy nghĩ của tôi có đúng không? Có cách nào tốt hơn để làm điều này?

Trả lời

24

Một giải pháp tốt hơn mà không liên quan đến mô hình tùy chỉnh phụ trợ.

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> 
+2

Và, đối với bất cứ ai nghĩ rằng đây phải là một cú pháp mới, nó đã được theo cách này kể từ 1.1.1 (khoảng năm 2009) –

+4

Tại sao trên trái đất này không thực sự được tài liệu bất cứ nơi nào chính thức !? – ScottSB

+0

Tuyệt vời tìm thấy, cảm ơn bạn Lee! – Jongosi

1

Nếu tôi đang tiếp cận vấn đề này, tôi có thể chạy cronjob ở bất kỳ khoảng thời gian tối đa nào hữu ích với tôi, và sau đó sử dụng chính bản thân cronjob để tính toán cài đặt hệ thống. Tôi không chắc liệu giải pháp bạn đã đăng có hiệu quả hay không, nhưng nếu nó đến thì hãy cho chúng tôi biết, vì đó là một cách tiếp cận khá thông minh khác :)

+0

công trình như mong đợi .. Đã cho tôi một chút để tìm ra cách để tải và lưu các giá trị nhưng nó tốt để đi –

1

Bằng chứng khái niệm. Sửa yêu cầu của bạn:

<?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();   

    } 
} 

và 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> 

và 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

Liệu này công việc? Tôi sẽ không nghĩ rằng có thể thiết lập các giá trị XML tùy ý thông qua bảng cơ sở dữ liệu, 'core_config_data' – clockworkgeek

+0

hoạt động hoàn hảo –

+1

Trong khi công trình này (từ giao diện của nó) tôi đã đăng một giải pháp tốt hơn nhiều được hỗ trợ trong mã lõi kể từ 1.1 .1 –

Các vấn đề liên quan