Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

第3回 Magento Cafe Plus モジュール開発入門

1,468 views

Published on

第3回 Magento Cafe Plus モジュール開発入門で使用した資料です。
Magentoのエクステンション開発の基礎的な内容を扱っています。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

第3回 Magento Cafe Plus モジュール開発入門

  1. 1. Magento-JP User Group 西 宏和 モジュール開発入門
  2. 2. Agenda • エクステンション開発の難易度 • あると便利なツール • エクステンションの構成要素 • 簡単なエクステンションの作成
  3. 3. あると便利なツール
  4. 4. • PHPStorm / NetBeans / Eclipse / ZendStudio • あるいは魔改造されたVimやEmacsなど • MySQLWorkBench • Xdebugなどのデバッガ • VMWareやVirtualBoxのような仮想環境(Windowsの場合) • Git / SVNのようなバージョン管理システム
  5. 5. デバッグに欠かせないツール
  6. 6. Mage::log() ! m9っ`Д́) ビシッ!!
  7. 7. エクステンション開発の難易度
  8. 8. 1. 単にテンプレートの内容を出すもの 2. システム設定を使うもの 3. rewriteを使うもの 4. オリジナルテーブルのデータを扱うもの 5. 決済や物流、外部システムと連携するもの 6. コアの機能をまるごとリプレースするもの
  9. 9. エクステンションの構成要素
  10. 10. • グローバル設定ファイル • エクステンション設定ファイル • Block / Helper / Model / Controller • テンプレート / レイアウトXML / ロケールCSV • スキンファイル一式(CSS / JS / 画像など) • PHPライブラリ / JSライブラリ
  11. 11. グローバル設定ファイル • app/etc/ または app/etc/modulesに配置 • 基本はapp/etc/modulesに配置 • app/etc/ に配置するものは特殊用途 • フルページキャッシュとかVarnish連携とか・・・
  12. 12. 例1 <?xml version=“1.0” ?> <config> <modules> <My_Module> <active>true | false</active> <codePool>core | community | local</codePool> <depends> <Mage_Sales/> <Mage_Customer/> </depends> </My_Module> </modules> </config>
  13. 13. エクステンション設定ファイル • config.xml • system.xml • adminhtml.xml • jstranslator.xml • 他は次回以降
  14. 14. config.xml • エクステンション開発時に必ず必要なファイル • modules / global / frontend / admin / adminhtml / default / crontab セクションから構成 • modulesとglobal以外はなくても可
  15. 15. 例2 <?xml version=“1.0” ?> <config> <modules> <My_Module> <version>1.0.0</version> </My_Module> </modules> <global> <models> <mymodule><class>My_Module_Model</class></mymodule> </models> <helpers> <mymodule><class>My_Module_Helper</class></mymodule> </helpers> <blocks> <mymodule><class>My_Module_Block</class></mymodule> </blocks> </global> </config>
  16. 16. 例2の続き <?xml version=“1.0” ?> <config> <global> <models> <mymodule> <class>My_Module_Model</class> <resourceModel>mymodule_resource</resourceModel> </mymodule> <mymodule_resource> <class>My_Module_Model_Resource</class> <depricatedNode>mymodule_resource_mysql4</depricatedNode> </mymodule_resource> </models> <resources> <mymodule_setup> <setup> <module>My_Module</module> <class>My_Module_Model_Resource_Setup</class> </setup> </mymodule_setup> </resources> </global> </config>
  17. 17. さらに続き <?xml version=“1.0” ?> <config> <adminhtml> <translate> <modules> <My_Module> <files> <default>My_Module.csv</default> </files> </My_Module> </modules> </translate> <layout> <updates> <mymodule> <file>my_module.xml</file> </mymodule> </updates> </layout> </adminhtml> </config>
  18. 18. まだまだ続く <?xml version=“1.0” ?> <config> <frontend> <routers> <mymodule> <use>standard</use> <args> <module>My_Module</module> <frontName>mymodule</frontName> </args> </mymodule> </routers> <layout> <updates> <mymodule> <file>my_module.xml</file> </mymodule> </updates> </layout> </frontend> </config>
  19. 19. system.xml • システム>設定 の中にあるフォームを定義するXML • config.xmlに比べると、タグは決まっている
  20. 20. 例3 <?xml version="1.0"?> <config> <tabs> <mymodule translate="label" module="mymodule"> <label>MyModule Configuration</label> <sort_order>401</sort_order> </mymodule> </tabs> </config>
  21. 21. 例3の続き <sections> <mymodule translate="label" module="mymodule"> <groups> <mymodule translate="label"> <label>MyModule Configuration</label> <frontend_type>text</frontend_type> <sort_order>10</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> <fields> <myparam translate="label"> <label>My Param config</label> <frontend_type>text</frontend_type> <sort_order>10</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </myparam> </fields> </mymodule> </groups> </mymodule> </sections>
  22. 22. adminhtml.xml • 管理画面の権限リソースを定義するためのXML • 実はconfig.xmlに書いても可 • ただし、分けておかないとごちゃごちゃして管理に困る
  23. 23. 例4 <?xml version="1.0" encoding="UTF-8"?> <config> <menu> <system> <children> <mymodule module="mymodule"> <title>Manage My Module</title> <sort_order>60</sort_order> <children> <mymodule> <title>My Module</title> <sort_order>10</sort_order> <action>adminhtml/mymodule</action> </mymodule> </children> </mymodule> </children> </system> </menu> </config>
  24. 24. 続き <acl> <resources> <all> <title>Allow Everything</title> </all> <admin> <children> <mymodule> <children> <mymodule><title>Manage My Module</title></mymodule> </children> </mymodule> </children> </admin> </resources> </acl>
  25. 25. jstranslator.xml • フロントエンドの入力フォームで使用 • JSによるバリデーションのメッセージ翻訳用 • 1.7以降で利用可能
  26. 26. 例5 <?xml version="1.0"?> ! <jstranslator> <validate-katakana translate="message" module="validator"> <message>Please use full width Katakana only in this field.</message> </validate-katakana> <validate-hiragana translate="message" module="validator"> <message>Please use Hiragana only in this field.</message> </validate-hiragana> <validate-post translate="message" module="validator"> <message>The length of Zip/Postalcode is %d digits and only numbers are allowed.</message> </validate-post> <validate-post2 translate="message" module="validator"> <message>The length of Zip/Postalcode is %d digits and only numbers and %s are allowed.</message> </validate-post2> </jstranslator>
  27. 27. Block/Model/Helper/ Controller
  28. 28. Block/Model/Helper/Controller • 以下のクラスをベースにして実装 • Mage_Core_Block_Abstract • Mage_Core_Model_Abstract • Mage_Core_Helper_Abstract • Mage_Core_Controller_Front_Action
  29. 29. Blockの実装 • Mage_Core_Block_Abstractにはテンプレートを処理する機能がない • Mage_Core_Block_Templateはテンプレートを処理できる • テンプレートを使いたいならTemplate • ダイレクトにHTMLパーツを出力したいならAbstract
  30. 30. Blockの派生系(一部) 用途子要素の自動表示 Mage_Core_Block_Template 一般的なテンプレート用☓ Mage_Core_Block_Text_List 子要素のリスト表示用◯ Mage_Core_Block_Text_Tag タグ生成用☓ Mage_Core_Block_Text_Link リンクリスト生成用 (ログインナビとか) ☓ Mage_Core_Block_Text テキスト表示用☓
  31. 31. Modelの実装 • Modelには主にビジネスロジックを書く • DBやファイルのデータを処理するならResourceを定義する • 外部APIとのやりとりも基本はModelが担当 • Eavとオリジナルテーブルの場合で実装が異なるので注意 • 継承元のクラスも当然異なる
  32. 32. Helperの実装 • My_Module_Helper_Dataは必須 • Mage::helper(‘mymodule’)で暗黙的に呼ばれる • ロケール変換やsystem.xml, config.xmlの処理でも使用する • その他、Model/Block/Controllerで共用する処理を書く
  33. 33. Controllerの実装 • controllersディレクトリに配置 • Controllerを使う場合は、config.xmlの定義に注意 • クラス名は、My_Module_controllers_Indexではなく、 My_Module_IndexController • レイアウトXMLが必要な場合は、loadLayout()やrenderLayout()の呼び出 しが必須
  34. 34. 簡単なエクステンションの作成
  35. 35. 概要 • システム設定データを使うエクステンション • Modelは使わず、HelperとBlockのみ
  36. 36. 実演

×