Magento рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореЗрд▓ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдирд╛ (рднрд╛рдЧ 2)

рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛


  1. Magento (рднрд╛рдЧ 1) рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореЗрд▓ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдПрдБ , рдЬрд╣рд╛рдБ рд╣рдо Magento рдореЗрдВ рдПрдХ рдирдИ рдбрд┐рд▓реАрд╡рд░реА рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ
  2. рд╣рдо Magento (рднрд╛рдЧ 2) рдХреЗ рд▓рд┐рдП "рдирдпрд╛ рдореЗрд▓" рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╣рдо Magento рдХреЛ рдирдП рдореЗрд▓ рдХреЗ рд╕рд╛рде рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдФрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВред


рдПрдХ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓реЙрдиреНрдЪ рд╕реЗ рдЬреБрдбрд╝реЗ рдмреНрд░реЗрдХ рдХреЗ рдмрд╛рдж, рдореИрдВ рд╡рд╣реА рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдореИрдВрдиреЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛ред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рд╕рднреА рд╕реНрд░реЛрддреЛрдВ рдХреЛ GitHub: github.com/alexkuk/Ak_NovaPoshta рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╡реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдкреВрд░рдХ рд╣реИрдВред

рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдирдП рдореЗрд▓ рд╕реЗ Magento рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЧреЛрджрд╛рдореЛрдВ рдФрд░ рд╢рд╣рд░реЛрдВ рдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдРрд╕реА рддрд╛рд▓рд┐рдХрд╛ рдорд┐рд▓рддреА рд╣реИ:


рдирдИ рдореЗрд▓ рдПрдкреАрдЖрдИ


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдиреНрдпреВ рдореЗрд▓ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдХреЛ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдЫрд┐рдкрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдордВрдЪреЛрдВ рд╕реЗ рдЗрд╕рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдЬрд╛рдирд╛ред

рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд╣ рд╣реИ рдиреНрдпреВ рдкреЛрд╕реНрдЯ рдСрдлрд┐рд╕ рдореЗрдВ рд╡рдлрд╛рджрд╛рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рдирд╛ред рдирддреАрдЬрддрди, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЦрд╛рддреЗ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдЗрд╕ рдХрд╛рд░реНрдпрд╛рд▓рдп рдХреЗ рдкреГрд╖реНрда рдореЗрдВ API рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЕрдЪреНрдЫреЗ рд▓реЛрдЧ рдирд┐рдореНрди рдкрддреЗ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ: рдСрд░реНрдбрд░ . novaposhta.ua/api.php?todo=api_form ред

рд╣реБрд░реНрд░реЗ! рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдиреБрд░реЛрдз рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдкрддреНрд░ рднреА рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдПрдХ рдХреБрдВрдЬреА рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдлрд┐рд░ рд╕реЗ, рдЕрдЪреНрдЫреЗ рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХреА рдЬрд░реВрд░рдд рдереА - рдЖрдкрдХреА рдЪрд╛рдмреА рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕ рдкрддреЗ рдкрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдСрд░реНрдбрд░ . novaposhta.ua/api.php?todo=api_get_key_ajax ред

рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪ рдореИрдЧреЗрдВрдЯреЛ рдХреЗ рд▓рд┐рдП рд╣реИред

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВ


рдЪрд▓реЛ URL рдФрд░ API рдХреБрдВрдЬреА рдХреЛ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рд▓реЙрдЧ рдХреЛ рд▓рд┐рдЦрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

System.xml рдореЗрдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

<api_url translate="label"> <label>API URL</label> <frontend_type>text</frontend_type> <sort_order>120</sort_order> <show_in_default>1</show_in_default> <show_in_website>0</show_in_website> <show_in_store>0</show_in_store> </api_url> <api_key translate="label"> <label>API key</label> <frontend_type>text</frontend_type> <sort_order>130</sort_order> <show_in_default>1</show_in_default> <show_in_website>0</show_in_website> <show_in_store>0</show_in_store> </api_key> <enable_log translate="label"> <label>Enable log</label> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_yesno</source_model> <sort_order>140</sort_order> <show_in_default>1</show_in_default> <show_in_website>0</show_in_website> <show_in_store>0</show_in_store> </enable_log> 


Config.xml рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдЬреЛрдбрд╝реЗрдВ:
 <config> ... <default> <carriers> <novaposhta> ... <api_url>http://orders.novaposhta.ua/xml.php</api_url> <enable_log>0</enable_log> </novaposhta> </carriers> </default> ... </config> 


рд╕рд╣рд╛рдпрдХ рдореЗрдВ, рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рди рдФрд░ рд▓реЙрдЧрд┐рдВрдЧ рд╡рд┐рдзрд┐ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рднрд╛рдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдРрд╕реА рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд╣рд╛рдпрдХ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдЖрдкрдХреЛ рдпрд╣ рднреА рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ Mage :: рд╕рд╣рд╛рдпрдХ ('novaposhta') рд╣рдорд╛рд░реЗ рд╕рд╣рд╛рдпрдХ рдХрд╛ рд╕рд┐рдВрдЧрд▓рдЯрди рд▓реМрдЯрд╛рддрд╛ рд╣реИред
 class Ak_NovaPoshta_Helper_Data extends Mage_Core_Helper_Abstract { protected $_logFile = 'novaposhta.log'; /** * @param $string * * @return Ak_NovaPoshta_Helper_Data */ public function log($string) { if ($this->getStoreConfig('enable_log')) { Mage::log($string, null, $this->_logFile); } return $this; } /** * @param string $key * @param null $storeId * * @return mixed */ public function getStoreConfig($key, $storeId = null) { return Mage::getStoreConfig("carriers/novaposhta/$key", $storeId); } } 


рд╣рдо рдПрдХ DB рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ


рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЕрдкрдиреА рддрд╛рд▓рд┐рдХрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Magento рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдЕрджреНрдпрддрди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреЛрдбрдореЗрдЧреЗрдВрдЯреЛ.рдХреЙрдо/2011/02/altering-the-database-through-setup-scripts рджреЗрдЦреЗрдВ)ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ config.xml рдореЗрдВ novaposhta_setup рд╕рдВрд╕рд╛рдзрди рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
 ... <global> <models> <novaposhta> <class>Ak_NovaPoshta_Model</class> <resourceModel>novaposhta_resource</resourceModel> </novaposhta> <novaposhta_resource> <class>Ak_NovaPoshta_Model_Resource</class> <entities> <city> <table>novaposhta_city</table> </city> <warehouse> <table>novaposhta_warehouse</table> </warehouse> </entities> <novaposhta_resource> </models> ... <resources> <novaposhta_setup> <setup> <module>Ak_NovaPoshta</module> </setup> </novaposhta_setup> </resources> </global> ... 


рдЕрдкрдЧреНрд░реЗрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдРрдк / рдХреЛрдб / рд╕рдореБрджрд╛рдп / Ak / NovaPoshta / sql / novaposhta_setup / mysql4-upgrade-1.0.0-1.0.1.php рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдореЗрдВ рдЙрди рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
 /* @var $installer Mage_Core_Model_Resource_Setup */ $installer = $this; $installer->startSetup(); $installer->run(" CREATE TABLE {$this->getTable('novaposhta_city')} ( `id` int(10) unsigned NOT NULL, `name_ru` varchar(100), `name_ua` varchar(100), `updated_at` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`id`), INDEX `name_ru` (`name_ru`), INDEX `name_ua` (`name_ua`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE {$this->getTable('novaposhta_warehouse')} ( `id` int(10) unsigned NOT NULL, `city_id` int(10) unsigned NOT NULL, `address_ru` varchar(200), `address_ua` varchar(200), `phone` varchar(100), `weekday_work_hours` varchar(20), `weekday_reseiving_hours` varchar(20), `weekday_delivery_hours` varchar(20), `saturday_work_hours` varchar(20), `saturday_reseiving_hours` varchar(20), `saturday_delivery_hours` varchar(20), `max_weight_allowed` int(4), `longitude` float(10,6), `latitude` float(10,6), `number_in_city` int(3) unsigned NOT NULL, `updated_at` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`id`), CONSTRAINT FOREIGN KEY (`city_id`) REFERENCES `{$this->getTable('novaposhta_city')}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; "); $installer->endSetup(); 


рдпрд╣ рд╣рдорд╛рд░реЗ config.xml рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ 1.0.1 рддрдХ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдХреИрд╢ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддрд╛ рд╣реИ, Magento рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдЬрд╛рдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдмрдирд╛рдпрд╛ рдЧрдпрд╛, рдЖрдЧреЗ рдмрдврд╝реЗрдВред

рдореЙрдбрд▓, рд╕рдВрд╕рд╛рдзрди рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдПрдБ


рд╣рдо рд╢рд╣рд░ рдФрд░ рдЧреЛрджрд╛рдо рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдореЙрдбрд▓ Ak_NovaPoshta_Model_City рдФрд░ Ak_NovaPoshta_Model_Warehouse рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо Ak_NovaPoshta_Model_Resource_City рдФрд░ Ak_NovaPoshta_Model_Resource_Warehouse рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдПрдВрдЧреЗред рдЫрджреНрдо-рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рдореЙрдбрд▓ рд╡рд░реНрдЧ рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, _init () рд╡рд┐рдзрд┐ рдХреЛ рд╕рдВрд╕рд╛рдзрди рд╡рд░реНрдЧ рдХреЗ рдЙрдкрдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░реЗрдВ:
 class Ak_NovaPoshta_Model_City extends Mage_Core_Model_Abstract { public function _construct() { $this->_init('novaposhta/city'); } тАж } 


рд╕рдВрд╕рд╛рдзрди рдореЗрдВ, рд╕рдВрд╕рд╛рдзрди рдкрд░ _init () рдХреЙрд▓ рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЙрдкрдирд╛рдо рдФрд░ рдкреНрд░рд╛рдердорд┐рдХ рдкреНрд░рд╛рдердорд┐рдХ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВред
 class Ak_NovaPoshta_Model_Resource_City extends Mage_Core_Model_Resource_Db_Abstract { public function _construct() { $this->_init('novaposhta/city', 'id'); } } 


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ Ak_NovaPoshta_Model_Resource_City_Collection рдФрд░ Ak_NovaPoshta_Model_Resource_Warehouse_Collection рд╕рдВрдЧреНрд░рд╣ рдЬреЛрдбрд╝реЗрдВред _Init () рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдореЗрдВ, рд╣рдо рдореЙрдбрд▓ рдЙрд░реНрдл тАЛтАЛрдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг Ak_NovaPoshta_Model_Resource_City_Collection:
 class Ak_NovaPoshta_Model_Resource_City_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract { public function _construct() { $this->_init('novaposhta/city'); } } 


рдПрдкреАрдЖрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЙрдбрд▓


рдЖрдЗрдП Ak_NovaPoshta_Model_Api_Client рдореЙрдбрд▓ рдмрдирд╛рдПрдВ, рдЬреЛ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реНрдХ рдХреЛ рдЫрд┐рдкрд╛рдПрдЧрд╛ред рдЧреНрд░рд╛рд╣рдХ рдХреЛрдб: github.com/alexkuk/Ak_NovaPoshta/blob/master/app/code/community/Ak/NovaPoshta/Model/Api/Client.php
рд╣рдорд╛рд░реЗ рдирдП рдмрдиреЗ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдкрд╛рд╕ рджреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЗ рд╣реИрдВ: getCityWarehouses () рдЙрди рд╢рд╣рд░реЛрдВ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдиреНрдпреВ рдореЗрд▓ рдХреЗ рдХрд╛рд░реНрдпрд╛рд▓рдп рд╣реИрдВ, getWarehouses () рдкреВрд░реЗ рдпреВрдХреНрд░реЗрди рдореЗрдВ рдЧреЛрджрд╛рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред рдбреЗрдЯрд╛ рдХреЛ SimpleXMLElement рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдпрд╛рдд


Ak_NovaPoshta_Model_Import рдореЙрдбрд▓ рдЬреЛрдбрд╝реЗрдВ: github.com/alexkuk/Ak_NovaPoshta/blob/master/app/code/community/Ak/NovaPoshta/Model/Import.php ред рдЖрдпрд╛рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред

рдореИрдВрдиреЗ рджреЛ рд╕рд░рдгрд┐рдпреЛрдВ $ _dataMapCity рдФрд░ $ _dataMapWarehouse рдХреЛ рдЬреЛрдбрд╝рд╛, рдЬреЛ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде API рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдПрдкреАрдЖрдИ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЙрд╕ рдлрд╝реЙрд░реНрдо рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓рд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ _applyMap () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
 $cities = $this->_applyMap($cities, $this->_dataMapCity); 


рдЖрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рд┐рдЯреА рдФрд░ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╕реАрдзреЗ SQL рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ core_write рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:

  /** * @return Varien_Db_Adapter_Interface */ protected function _getConnection() { return Mage::getSingleton('core/resource')->getConnection('core_write'); } 


рдЖрдпрд╛рдд рдореЙрдбрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ Magento рдХреА рдЬрдбрд╝ рдореЗрдВ test.php рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЧрд┐рд░рд╛ рджрд┐рдпрд╛ред рдЗрд╕рдореЗрдВ, рд╣рдо Mage :: app () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ Magento рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЖрдк Mage factory рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 require 'app/Mage.php'; Mage::app('default'); Mage::getModel('novaposhta/import')->runWarehouseAndCityMassImport(); 


CRON рджреНрд╡рд╛рд░рд╛ рдЖрдпрд╛рдд рд╢реБрд░реВ рдХрд░реЗрдВ


рдЖрдпрд╛рдд рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рдбреАрдмрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдм рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рд╕рдордп-рд╕рдордп рдкрд░ CRON рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПред Magento рдХрд╛ рдЕрдкрдирд╛ CRON рд╕рдмрд╕рд┐рд╕реНрдЯрдо рд╣реИред рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ : www.magentocommerce.com/wiki/1_-_installation_and_configuration/how_to_setup_a_cron_job ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдкрд░рд┐рдЪрд┐рдд рдпреВрдирд┐рдХреНрд╕ рдХреНрд░реЛрди рдореЗрдВ, рдХреНрд░реЙрди рдЬреЙрдм рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рдХреНрд░реЛрди.рдПрдлрд╝рдкреА рдпрд╛ рдХреНрд░реЛрди.рд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдЧрд╛, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдХреНрд░реЛрди рдореИрдЧреЗрдВрдЯреЛ рд╕рдмрд╕рд┐рд╕реНрдЯрдо рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдХреЙрд▓ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, config.xml рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реЗ рдЧрдП рд╕рднреА рдХрд╛рд░реНрдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рддреЛ, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЛ config.xml рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
  <crontab> <jobs> <novaposhta_import_city_and_warehouse> <schedule> <cron_expr>1 2 * * *</cron_expr> </schedule> <run> <model>ak_novaposhta/import::runWarehouseAndCityMassImport</model> </run> </novaposhta_import_city_and_warehouse> </jobs> </crontab> 


рдЧреЛрджрд╛рдо рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ


рдКрдкрд░ рдХреА рддрд╕реНрд╡реАрд░ рдХреА рддрд░рд╣ рдПрдХ рдЧреНрд░рд┐рдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдмреНрд▓реЙрдХ рдХреЗ рджреЛ рд╡рд░реНрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЧреНрд░рд┐рдб рдХреЗ рдХрдВрдЯреЗрдирд░ рдХрд╛ рд╡рд░реНрдЧ рдФрд░ рдЧреНрд░рд┐рдб рдХрд╛ рд╡рд░реНрдЧред Mage_Adminhtml_Block_Widget_Grid_Container рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдмрдЯрди рдХрд╛ рд╕реНрд╡рд░реВрдк рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ Mage_Adminhtml_Block_Widget_Grid рдЧреНрд░рд┐рдб рдХреЛ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЕрд░реЗ рд╣рд╛рдБ, рдЖрдкрдХреЛ рдЕрднреА рднреА рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ :)

рдЕрддрдГ Ak_NovaPoshta_Block_Adminhtml_Warehouses:
 class Ak_NovaPoshta_Block_Adminhtml_Warehouses extends Mage_Adminhtml_Block_Widget_Grid_Container { public function __construct() { // $this->_blockGroup  $this->_controller   ,   _prepareLayout()     (novaposhta/adminhtml_warehouses).      _prepareLayout(). $this->_blockGroup = 'novaposhta'; $this->_controller = 'adminhtml_warehouses'; this->_headerText = $this->__('Manage warehouses'); parent::__construct(); //   add,    ,         $this->_removeButton('add'); //   ,     $this->_addButton('synchronize', array( 'label' => $this->__('Synchronize with API'), 'onclick' => 'setLocation(\'' . $this->getUrl('*/*/synchronize') .'\')' )); } } 


рдЧреНрд░рд┐рдб рд╡рд░реНрдЧ:
 class Ak_NovaPoshta_Block_Adminhtml_Warehouses_Grid extends Mage_Adminhtml_Block_Widget_Grid { public function __construct() { parent::__construct(); $this->setDefaultSort('city_id'); $this->setId('warehousesGrid'); $this->setDefaultDir('asc'); $this->setSaveParametersInSession(true); } protected function _prepareCollection() { /** @var $collection Ak_NovaPoshta_Model_Resource_Warehouse_Collection */ $collection = Mage::getModel('novaposhta/warehouse') ->getCollection(); $this->setCollection($collection); return parent::_prepareCollection(); } protected function _prepareColumns() { //    $this->addColumn('id', array( 'header' => $this->__('ID'), 'align' =>'right', 'width' => '50px', 'index' => 'id' ) ); $this->addColumn('address_ru', array( 'header' => $this->__('Address (ru)'), 'index' => 'address_ru' ) ); $this->addColumn('city_id', array( 'header' => $this->__('City'), 'index' => 'city_id', 'type' => 'options', //      City      тАЬтАЭ  'options' => Mage::getModel('novaposhta/city')->getOptionArray() ) ); $this->addColumn('phone', array( 'header' => $this->__('Phone'), 'index' => 'phone' ) ); $this->addColumn('max_weight_allowed', array( 'header' => $this->__('Max weight'), 'index' => 'max_weight_allowed' ) ); return parent::_prepareColumns(); } //  false -         public function getRowUrl($row) { return false; } } 


рдЕрдм рдирд┐рдпрдВрддреНрд░рдХред рдЪреВрдВрдХрд┐ рдирд┐рдпрдВрддреНрд░рдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ Mage_Adminhtml_Controller_Action рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред
 class Ak_NovaPoshta_WarehousesController extends Mage_Adminhtml_Controller_Action { /** *        */ public function indexAction() { $this->_title($this->__('Sales'))->_title($this->__('Nova Poshta Warehouses')); $this->_initAction() ->_addContent($this->getLayout()->createBlock('novaposhta/adminhtml_warehouses')) ->renderLayout(); return $this; } /** *    */ public function synchronizeAction() { try { Mage::getModel('novaposhta/import')->runWarehouseAndCityMassImport(); // ,  success message    $this->_getSession()->addSuccess($this->__('City and Warehouse API synchronization finished')); } catch (Exception $e) { // ,  error message    $this->_getSession()->addError($this->__('Error during synchronization: %s', $e->getMessage())); } //       $this->_redirect('*/*/index'); return $this; } /** * Initialize action * * @return Ak_NovaPoshta_WarehousesController */ protected function _initAction() { $this->loadLayout() ->_setActiveMenu('sales/novaposhta/warehouses') ->_addBreadcrumb($this->__('Sales'), $this->__('Sales')) ->_addBreadcrumb($this->__('Nova Poshta Warehouses'), $this->__('Nova Poshta Warehouses')) ; return $this; } } 


рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ config.xml рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рд░реНрдЧ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ Magento рд╣рдорд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдвреВрдВрдв рд╕рдХреЗред
 <config> ... <admin> <routers> <novaposhta> <use>admin</use> <args> <module>Ak_NovaPoshta</module> <frontName>novaposhta</frontName> </args> </novaposhta> </routers> </admin> ... </config> 


рджреВрд╕рд░реЗ, рд╣рдореЗрдВ рдПрдХ рдЖрдЗрдЯрдо рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдореЗрдиреВ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдЗрд╕реЗ рдПрд╕реАрдПрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдпрд╣ рд╕рдм adminhtml.xml рдореЗрдВ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ:
 <?xml version="1.0"?> <config> <menu> <sales> <children> <novaposhta translate="title" module="novaposhta"> <sort_order>200</sort_order> <title>Nova Poshta</title> <children> <warehouses translate="title" module="novaposhta"> <sort_order>10</sort_order> <title>Warehouses</title> <action>novaposhta/warehouses/</action> </warehouses> </children> </novaposhta> </children> </sales> </menu> <acl> <resources> <admin> <children> <sales> <children> <novaposhta translate="title" module="novaposhta"> <title>Nova Poshta</title> <sort_order>200</sort_order> <children> <warehouses translate="title" module="novaposhta"> <sort_order>10</sort_order> <title>Warehouses</title> </warehouses> </children> </novaposhta> </children> </sales> </children> </admin> </resources> </acl> </config> 


рд╣реЛ рдЧрдпрд╛


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╣реИ рдФрд░ рдЧреЛрджрд╛рдореЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдЕрдЧрд▓рд╛ рдХрд╛рд░реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╢рд╣рд░ рдореЗрдВ рдХреЗрд╡рд▓ рдбрд┐рдкреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдСрд░реНрдбрд░ рджреЗрдиреЗ рдХреЗ рд╢рд┐рдкрд┐рдВрдЧ рд╡рд┐рдзрд┐ рдЪрд░рдг рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рдореЗрдВ рдиреНрдпреВ рдореЗрд▓ рдбрд┐рдкреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИред

рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ, рдкреНрд░рд╢реНрдиреЛрдВ, рд╕реБрдЭрд╛рд╡реЛрдВ рдкрд░ рдЦреБрд╢реА рд╣реЛрдЧреА :)

PS рдПрдХ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдХреЛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд╡реАрдиреАрдХрд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ Varien_Db_Ddl_Table рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдореИрдВ рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛ рдФрд░ рдЧрд░реНрдо рдкрдХрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ :) SQL рдХреНрд╡реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдореБрдЭреЗ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд▓рдЧрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдореВрд░реНрддрддрд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

Source: https://habr.com/ru/post/In162313/


All Articles