TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7

2,086
-1

Published on

TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,086
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
243
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7

  1. 1. TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7 Tài liệu kỹ thuật 06/2012
  2. 2. Lịch sử chỉnh sửaNgày tháng Version Mô tả Người viết06/2012 1.7 DVMS Trang 2 /16
  3. 3. MỤC LỤC Trang 3 /16
  4. 4. 1. Tạo module: Một module sẽ bao gồm một trong các thành phần sau :  Settings  Database schemas  Rendering objects  Utility helpers  Data models  Action controllers Các module có thể được xác định là ON hay OFF thông qua file XML configuration tại thư mục app/etc/modules/ directory. Mỗi module có file config cuar riêng nó tại thư mục etc/ Cài đặt Module creator extension: Vào link sau để download Module creator về: http://www.magentocommerce.com/wiki/_media/modulecreator0.0.9.1.zip => Giải nén vào thu mục chứa source Magento ta được thư mục "moduleCreator". => Tiếp đến mở trình duyệt lên và chạy link: http://www.your_site.com/moduleCreator/index.php sẽ thấy giao diện giống như bên dưới: Trang 4 /16
  5. 5. => nhập các thông tin về module của bạnVà trong folder code sẽ sinh ra thư mục[root]/moduleCreatorChú ý: phần "Magento Root Directory" nếu không nhập gì -> thì code sẽ được tạo trong[root]/moduleCreator/new.Dựa vào giao diện này sẽ điền thông tin để tạo ra module News (điền thông tin Namespace: Packt,Module: News , Design: default, Design: default - phần này code design sẽ nằm trong folderdefault/default) => nhấn Create để tạo. Lúc này một loạt folder được sinh ra giống như hình bên dưới:=> Sau khi tạo xong bạn vào copy toàn bộ source mới tạo ra trong thư mục: “new/app “ vào thưmục app của Magento.Khi đó trong giao diện admin ta sẽ thấy có một menu mới => click vào menu này ta sẽ có giao diệncơ bản như sau: Trang 5 /16
  6. 6. => Bây giờ giải quyết trọng tâm chính là Controller. Controller giữ vai trò trọng tâm ở đây, nó cónhiệm vụ chính là map một URL với function xử lý logic cho nó. Vào folder "app/code/local/ tênNamespace mới tạo/tên module mới tạo/controllers" edit file IndexController.php" để thay đổi logicbusiness của nó.Ví dụ: module tôi tạo có Namespace là: “NguyenLinh” và tên module là: “Example” thì tôi vào sửafile: app/code/local/NguyenLinh/Example/controllers/IndexController.phpNếu bạn muốn tạo module bằng tay mà không dùng module Creator thì có thể tham khảo cách làmtại link sau:http://www.webspeaks.in/2010/08/create-your-first-adminbackend-module.htmlhttp://www.webspeaks.in/2010/07/create-your-first-magento-module.html2. Tạo thêm webservice:- Cấu trúc cơ bản của một module API như sau:app/code/ |- community/ or local/ or core/ | |- COMPANYNAME/ | |- MODULENAME/ | |- etc/ | |- api.xml | |- config.xml | |- Helper/ Trang 6 /16
  7. 7. | |- Data.php | |- Model/ | |- OBJECT1/ | |- Api.php | |- Object2/ | |- Api.php |- etc/modules/ |- COMPANYNAME_MODULE.xml- ví dụ tôi tạo API danh sách các sản phẩm bán chạy, cấu trúc module của tôi như sau: app/ |- code/community/ | |- GrelaDesign/ | |- Tutorial/ | |- etc/ | |- api.xml | |- config.xml | |- Helper/ | |- Data.php | |- Model/ | |- Core/ | |- Api.php | |- DashBoard/ | |- Api.php |- etc/modules/ |- GrelaDesign_Tutorial.xml- GrelaDesign_Tutorial.xml: Tập tin này chỉ thị cho Magento tìm thấy API<!-- GrelaDesign_Tutorial.xml --><config> <modules> <GrelaDesign_Tutorial> <active>true</active> <codePool>community</codePool><!-- this could be also local --> <depends> <Mage_Api /> </depends> </GrelaDesign_Tutorial> </modules></config>- config.xml: tập tin cấu hình module:<!-- config.xml --> Trang 7 /16
  8. 8. <config> <modules> <GrelaDesign_Tutorial><!-- COMPANYNAME_MODULE --> <version>0.0.0.1</version> </GrelaDesign_Tutorial> </modules> <global> <models> <tutorial><!-- MODULE, just first letter is lowercased, i.e. moduleCustomAPI would be placed here as customAPI --> <class>GrelaDesign_Tutorial_Model</class> </tutorial> </models> <helpers> <tutorial> <class>GrelaDesign_Tutorial_Helper</class> </tutorial> </helpers> </global></config>Trong hướng dẫn này, sẽ tạo ra ba phương thức cho API. Đầu tiên sẽ là getVersion trong Core, thứ hai sẽ làgetBestsellers và getTotals thứ ba cũng có trong DashBoard.Trong ví dụ này sẽ có 2 nhóm truy cập: "allaccess" và "owneracess".<!-- api.xml --><config> <api> <resources> <tutorial_core translate="title" module="tutorial"> <title>GrelaDesign tutorial Core API calls</title> Trang 8 /16
  9. 9. <model>tutorial/core_api</model> <acl>greladesign/tutorial</acl> <methods> <getVersion translate="title" module="tutorial"> <title>Returns version of this API</title> <acl>greladesign/tutorial/allaccess</acl> </getVersion> </methods> </tutorial_core> <tutorial_dashboard translate="title" module="tutorial"> <title>GrelaDesign tutorial DashBoard app API calls</title> <model>tutorial/dashBoard_api</model> <acl>greladesign/tutorial</acl> <methods> <getSalesTotals translate="title" module="tutorial"> <title>Get sales totals</title> <method>getTotals</method><!-- here we specify themethod name if we have a conflict with built in method or we want to change the name i.e. becauseit is lengthy --> <acl>greladesign/tutorial/owneraccess</acl> </getSalesTotals> <getBestsellers translate="title" module="tutorial"> <title>Get best selling product list</title> <acl>greladesign/tutorial/allaccess</acl> </getBestsellers> </methods> </tutorial_dashboard> </resources> Trang 9 /16
  10. 10. <resources_alias><!-- here we can put aliases, shortened calls for our api resource, Ihavent checked how alias behaves when it collides with different resource... --> <dashboard>tutorial_dashboard</dashboard> <core>tutorial_core</core> </resources_alias> <acl><!-- Access Control List to our resources, this tree structure is displayed in"Resource Roles" panel when you open role to edit --> <resources> <greladesign translate="title" module="tutorial"> <title>GrelaDesign</title> <sort_order>100</sort_order> <tutorial translate="title" module="tutorial"> <title>Tutorial</title> <sort_order>100</sort_order> <allaccess translate="title" module="tutorial"> <title>Core functionality required by allusers.</title> <sort_order>10</sort_order> </allaccess> <owneraccess translate="title" module="tutorial"> <title>Functions accessible only forowner.</title> <sort_order>50</sort_order> </owneraccess> </tutorial> </greladesign> </resources> </acl> </api> Trang 10 /16
  11. 11. </config><!-- app/code/community/GrelaDesign/Tutorial/Model/Core/Api.php --><?phpclass GrelaDesign_Tutorial_Model_Core_Api{ /** * Returns version of the installed magento * @return String */ public function getVersion() { return Mage::getVersion(); }}?><!-- app/code/community/GrelaDesign/Tutorial/Model/Core/Api.php --><?phpclass GrelaDesign_Tutorial_Model_Core_Api{ /** * Returns version of the installed magento * @return String */ public function getVersion() { return Mage::getVersion(); Trang 11 /16
  12. 12. }}?><!-- app/code/community/GrelaDesign/Tutorial/Model/DashBoard/Api.php --><?phpclass GrelaDesign_Tutorial_Model_DashBoard_Api{ /** * Returns list of best selling products, returned list is limited to the number items specifiedin argument. * @param int $limit */ public function getBestsellers($limit=5) { //filter $visibility = array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG ); $_arrayOfBestsellers = Mage::getResourceModel(reports/product_collection) ->addAttributeToSelect(*) ->addOrderedQty() ->addAttributeToFilter(visibility, $visibility) ->setOrder(ordered_qty, desc) ->getSelect()->limit($limit)->query(); $bestProducts = array(); $details = Mage::getModel(catalog/product); foreach ($_arrayOfBestsellers as $product) { $details->load($product[entity_id]); $bestProduct[] = array( "qty" => $product["ordered_qty"] , "price" => $details->getPrice() , "name" => $details->getName() ); } return $bestProduct; } Trang 12 /16
  13. 13. /** * Get sales totals * Returns totals for : Revenue, Tax, Shipping and Quantity for given time range, default islast 24 hours. * @param String $period - default 24h, possible values are: 24h, ,1y, 2y */ public function getTotals($period=24h) { $collection = Mage::getResourceModel(reports/order_collection) ->addCreateAtPeriodFilter($period) //->getSelectCountSql() ->calculateTotals(1) ; /* $collection->addFieldToFilter(store_id, array(eq => Mage::app()->getStore(Mage_Core_Model_Store::ADMIN_CODE)->getId()) ); */ $collection->load(); $totals = $collection->getFirstItem(); return array( Revenue => $totals->getRevenue() , Tax => $totals->getTax() , Shipping => $totals->getShipping() , Quantity => $totals->getQuantity() * 1 ); }}?><!-- app/code/community/GrelaDesign/Tutorial/Helper/Data.php --><?phpclass GrelaDesign_Tutorial_Helper_Data extends Mage_Core_Helper_Abstract{}?>- giờ ta vào admin của website và tạo ra các user để test thử API Trang 13 /16
  14. 14. rule: “owner”user: adminpass: 1adminrule: “client”user: johndoepass: j0hn- Tạo ra tập tin test có nội dung như sau:<?php/*Create a file called, test.php in the root of your Magento development environment.Copy the code below into your test.php file.Browse to http://yourstore/test.php.*/// Tell this file to use the Mage libraries$mageFilename = app/Mage.php;require_once $mageFilename;umask(0);// Note we are using the app directive not the run directive here// Also note the store is named default by, well, default. But as Zeke pointed out if your store is// en then you would need to edit the following line to say Mage::app(en)// Lets go with default for simplicity ...Mage::app(default);// Your test code goes here echo "<pre>";$client = new Zend_XmlRpc_Client(http://127.0.0.1/magento/api/xmlrpc/); Trang 14 /16
  15. 15. // If some stuff requires api authentication,// we should get session token//login $session = $client->call(login, array(admin, 1admin)); echo var_dump($client->call(call, array($session, tutorial_dashboard.getBestsellers))), "n"; echo var_dump($client->call(call, array($session, dashboard.getBestsellers))), "n"; echo var_dump($client->call(call, array($session, tutorial_dashboard.getSalesTotals))), "n"; echo var_dump($client->call(call, array($session, dashboard.getSalesTotals))), "n"; echo var_dump($client->call(call, array($session, tutorial_core.getVersion))), "n"; echo var_dump($client->call(call, array($session, core.getVersion))), "n";//logout echo $client->call(endSession, array($session)), "n";//login $session = $client->call(login, array(johndoe, j0hn)); echo var_dump($client->call(call, array($session, tutorial_dashboard.getBestsellers))), "n"; echo var_dump($client->call(call, array($session, dashboard.getBestsellers))), "n"; try { //this will throw an exception ("access denied") echo var_dump($client->call(call, array($session, tutorial_dashboard.getSalesTotals))),"n"; echo var_dump($client->call(call, array($session, dashboard.getSalesTotals))), "n"; } catch (Exception $e) { echo $e->getMessage(), "n"; } Trang 15 /16
  16. 16. echo var_dump($client->call(call, array($session, tutorial_core.getVersion))), "n"; echo var_dump($client->call(call, array($session, core.getVersion))), "n";//logout echo $client->call(endSession, array($session)), "n"; echo "</pre>";?>Tài liệu tham khảo:http://www.magentocommerce.com/api/soap/introduction.html CHÚC THÀNH CÔNG! THÔNG TIN LIÊN HỆ HỖ TRỢ DVMS (08) 360 289 37 info@dvms.vn www.DVMS.vn Trang 16 /16

×