第3回 magento cafe plus モジュール開発入門

36
Magento-JP User Group 西 宏和 モジュール開発入門

Upload: hirokazu-nishi

Post on 19-Jun-2015

416 views

Category:

Technology


1 download

DESCRIPTION

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

TRANSCRIPT

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

Magento-JP User Group 西 宏和

モジュール開発入門

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

Agenda

• エクステンション開発の難易度

• あると便利なツール

• エクステンションの構成要素

• 簡単なエクステンションの作成

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

あると便利なツール

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

• PHPStorm / NetBeans / Eclipse / ZendStudio

• あるいは魔改造されたVimやEmacsなど

• MySQLWorkBench

• Xdebugなどのデバッガ

• VMWareやVirtualBoxのような仮想環境(Windowsの場合)

• Git / SVNのようなバージョン管理システム

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

デバッグに欠かせないツール

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

Mage::log() !

m9っ`Д́) ビシッ!!

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

エクステンション開発の難易度

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

1. 単にテンプレートの内容を出すもの

2. システム設定を使うもの

3. rewriteを使うもの

4. オリジナルテーブルのデータを扱うもの

5. 決済や物流、外部システムと連携するもの

6. コアの機能をまるごとリプレースするもの

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

エクステンションの構成要素

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

• グローバル設定ファイル

• エクステンション設定ファイル

• Block / Helper / Model / Controller

• テンプレート / レイアウトXML / ロケールCSV

• スキンファイル一式(CSS / JS / 画像など)

• PHPライブラリ / JSライブラリ

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

グローバル設定ファイル

• app/etc/ または app/etc/modulesに配置

• 基本はapp/etc/modulesに配置

• app/etc/ に配置するものは特殊用途

• フルページキャッシュとかVarnish連携とか・・・

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

例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>

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

エクステンション設定ファイル

• config.xml

• system.xml

• adminhtml.xml

• jstranslator.xml

• 他は次回以降

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

config.xml

• エクステンション開発時に必ず必要なファイル

• modules / global / frontend / admin / adminhtml / default / crontabセクションから構成

• modulesとglobal以外はなくても可

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

例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>

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

例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>

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

さらに続き<?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>

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

まだまだ続く<?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>

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

system.xml

• システム>設定 の中にあるフォームを定義するXML

• config.xmlに比べると、タグは決まっている

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

例3

<?xml version="1.0"?> <config> <tabs> <mymodule translate="label" module="mymodule"> <label>MyModule Configuration</label> <sort_order>401</sort_order> </mymodule> </tabs> </config>

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

例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>

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

adminhtml.xml

• 管理画面の権限リソースを定義するためのXML

• 実はconfig.xmlに書いても可

• ただし、分けておかないとごちゃごちゃして管理に困る

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

例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>

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

続き <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>

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

jstranslator.xml

• フロントエンドの入力フォームで使用

• JSによるバリデーションのメッセージ翻訳用

• 1.7以降で利用可能

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

例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>

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

Block/Model/Helper/Controller

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

Block/Model/Helper/Controller

• 以下のクラスをベースにして実装

• Mage_Core_Block_Abstract

• Mage_Core_Model_Abstract

• Mage_Core_Helper_Abstract

• Mage_Core_Controller_Front_Action

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

Blockの実装

• Mage_Core_Block_Abstractにはテンプレートを処理する機能がない

• Mage_Core_Block_Templateはテンプレートを処理できる

• テンプレートを使いたいならTemplate

• ダイレクトにHTMLパーツを出力したいならAbstract

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

Blockの派生系(一部)

用途 子要素の自動表示

Mage_Core_Block_Template 一般的なテンプレート用 ☓

Mage_Core_Block_Text_List 子要素のリスト表示用 ◯

Mage_Core_Block_Text_Tag タグ生成用 ☓

Mage_Core_Block_Text_Link リンクリスト生成用 (ログインナビとか) ☓

Mage_Core_Block_Text テキスト表示用 ☓

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

Modelの実装

• Modelには主にビジネスロジックを書く

• DBやファイルのデータを処理するならResourceを定義する

• 外部APIとのやりとりも基本はModelが担当

• Eavとオリジナルテーブルの場合で実装が異なるので注意

• 継承元のクラスも当然異なる

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

Helperの実装

• My_Module_Helper_Dataは必須

• Mage::helper(‘mymodule’)で暗黙的に呼ばれる

• ロケール変換やsystem.xml, config.xmlの処理でも使用する

• その他、Model/Block/Controllerで共用する処理を書く

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

Controllerの実装

• controllersディレクトリに配置

• Controllerを使う場合は、config.xmlの定義に注意

• クラス名は、My_Module_controllers_Indexではなく、 My_Module_IndexController

• レイアウトXMLが必要な場合は、loadLayout()やrenderLayout()の呼び出しが必須

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

簡単なエクステンションの作成

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

概要

• システム設定データを使うエクステンション

• Modelは使わず、HelperとBlockのみ

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

実演