SlideShare a Scribd company logo
1 of 38
Magento Cafe Plus #12
最近のMagento
Magento 2サンプルデータ
Magento2 Docker
翻訳プロジェクト
デザインカスタマイズのレシピ
レイアウトXML再入門
レイアウトXMLで使えるタグ
タグ名 親要素 子要素
layout なし ハンドルタグ
ハンドルタグ layout block
reference
remove
block ハンドルタグ
block
block
action
action block パラメータタグ
reference ハンドルタグ
block
block
action
remove ハンドルタグ
update ハンドルタグ
パラメータタグ action
パラメータタグ
パラメータタグ
タグで使える属性
タグ名 属性名
ハンドルタグ translate
module
block name
type
template
output
as
before / after
action method
ifconfig
module
translate
reference name
remove name
パラメータタグ helper
update handle
nameとasの違い
• as属性の値はテンプレート上で呼び出すときにの
み使用。レイアウトXMLでas属性の値を指定しても
無駄。
• name属性はas属性がないときはas属性の代わりを
する。レイアウトXML上で要素を指定する場合は常
にname属性の値を指定する。
パラメータタグのhelper属性
• helper属性を与えることで、Helperクラスのメソッド
に処理を委譲することができる
– 翻訳させたり、変数によるテンプレートやURL切り替えな
どができる
• パラメータタグの子要素で更にパラメータタグを定
義することで、Helperのメソッドに与えるパラメータ
を定義できる
例1
<reference name="customer_account_navigation">
<action method="addLink" translate="label" module="myext"
ifconfig="myext/mygroup/myparam">
<name helper="myext/label/getLinkLabel"/>
<path>myext/page</path>
<label helper="myext/label/getLinkLabel"/>
</action>
</reference>
例2
<customer_account_login>
<reference name="head">
<action method="setKeywords">
<keywords helper="core/data/__">
<value>Some keywords</value>
</keywords>
</action>
</reference>
</customer_account_login>
CSS/JSの削除
• あるページのCSSやJSが邪魔なんだけど・・・
• あるページに付けたいjQueryのプラグインがバー
ジョンあわなくて(ry
• なんてときに便利な技
例
<reference name="head">
<action
method="removeItem"><type>skin_css</type><nam
e>css/styles.css</name><params/></action>
<action
method="addItem"><type>skin_css</type><name>c
ss/custom.css</name></action>
</reference>
テーマの継承関係
• 1.9まで
– 現在テーマ → 現在テーマのdefault → base/default
• 1.9から
– 現在テーマ → 親テーマ → base/default
– etc/theme.xmlをうまく使うこと
facade
• Mage_Core_Block_Template_Facade
• appendで既に定義されている別ブロックを自分の
子ブロックとして定義できる
• 商品ページで多用
– 他のページではつかってない・・・
テンプレートとブロックのあれこれ
jsをフッターに持ってきたい
• page/html_headを使う
– 別のnameで定義して、テンプレートも別指定にする
• Mage_Page_Block_Html_HeadにはJS/CSSタグを生
成する機能がある
• ただし、全部をフッターに持ってこれないので注意
– Translatorとかは無理だった気が・・・
テンプレートがなくても出力したい
• Mage_Core_Block_Text_Listや
Mage_Core_Block_Text_Tagを使う
• あるいは独自でなにか実装してしまう
特定のページだけテーマを変えたい
• CMS/カテゴリ/商品であれば、設定で対処可能
• ではそれ以外のページの場合はどうする?
フォールバックをうまく使う
• マークアップをできるだけ共通化する
– CSSとJSだけで出来るだけ見た目を調整する
• レイアウトXMLを使って、部分的にテンプレートや
CSS/JSを入れ替える
• つまりは変更点を局所化し、メンテしやすくする
静的ブロックの埋め込み
• 方法は2通り
– レイアウトXMLであらかじめ定義しておく
– PHPコードをテンプレート上で直接書く
• 静的ブロックを1個処理するのに最低でも2〜3本の
SQLが「アクセスごとに走る」点に注意
– 便利だからと闇雲に埋めるのはNG
– ブロックキャッシュをうまく使わないとサイトが遅くなる
– またはフルページキャッシュの導入
商用テーマの功罪
• 商用テーマは便利な機能がワンパッケージになっ
ている
– 素早くサイトを立ち上げたい時には大変便利
– ある程度カスタマイズしてあるので、要件に合うときは
すごく楽
• 反面、テーマ乗り換えの時が大変
– テーマ同士に含まれる機能の競合
– 機能の移植・統合・再実装・・・などなど
ユニットテスト〜M1とM2〜
Magentoとユニットテスト
• そもそもMagento1の開発段階ではユニットテスト
の概念がなかった
(phpunitなどは既にあったのだが・・・)
• サードパーティ実装のEcomDev_PHPUnitや公式の
Test Automation Framework(TAF)を使ってユニット
テストをやるケースが続いていた。
(ただし、TAFは対応が遅かった)
1.9.2.0での追加
• 公式のMTF(Magento Testing Framework)の同梱
– ただし、1.9.2.0だけの話
• とはいえ公式にユニットテストのフレームワークが
付属することは喜ばしい
Magento2では?
• そもそもの前提としてユニットテストだけでなく、パ
フォーマンステストやマイグレーションテストまで付
属
• テストコードを付属させるのが「当然」の流れに
• Magento Connectに公開するためには、テストコー
ドを付属させることが絶対条件
ユニットテストの実際
EcomDev_PHPUnitの場合
• EcomDev_PHPUnitをまずインストールする
– PHPunitももちろん必要
• エクステンションのconfig.xmlに追記する
• ドキュメントを読みながらテストコードをコツコツ書く
– Modelだけじゃなく、BlockやControllerのテストもできる
ので、色々試すとGood
config.xml
<phpunit>
<suite>
<modules>
<My_Extension />
</modules>
</suite>
</phpunit>
テストケース
• app/code/コードプール/My/Extension/Test
に配置する
• テストする単位でファイルを分ける
• もっと詳しく知りたい場合は、
http://www.ecomdev.org/wp-
content/uploads/2011/05/EcomDev_PHPUnit-
0.2.0-Manual.pdf を
テストケースの例
class My_Exension_Test_Model_Customer extends
EcomDev_PHPUnit_Test_Case
{
public function setUp(){}
public function tearDown(){}
public function testSomething(){}
}
Magento2の場合
• そもそもユニットテスト機能はフレームワークに統
合されている
• もちろんベースはPHPUnitなので、PHPUnitの経験
がある人の知識は無駄にならない
• テストケースは、Myextension/Test/Unit に置く
• もちろんMTFも利用可能
作り方
• app/code/My/Extension/Test/Unit以下にコードを
置く
• namespaceを定義し、
PHPUnit_Framework_TestCaseを継承する
• あとはPHPUnitのお作法通り書いていく
Magento Testing Frameworkの場合
• 1.9.2なら標準でついてくる
– https://github.com/magento/mtf
• 基本的に、Test Automation Frameworkの改良版
• Seleniumと連携してテストを行う、と言うもの
• 正直、フロントエンドのテストは辛い。主にバックエ
ンドのテスト向け
フロントエンドのテストが難しい理由
• マークアップに差がありすぎる
– デフォルトのマークアップで調整しきれればよいが、通
常何かしらマークアップに変更が入っている
• テストケースの変更が多い
– Webサイトなのだからこれは当たりまえ
• 決済系のテストをどうするか、はそれなりに課題
そもそも論
• ユニットテストの担当範囲をどこまでにするか?
– Model/Block/Helperレベル?
– Controllerまでやるべき?
• Magento2的解釈では、
– Model/Block/HelperとControllerの一部
→ ユニットテスト
– それ以外
→MTF, api-functional, integration, performanceなどの
専用テストツールを用いる

More Related Content

What's hot

jQuery Mobile 1.2 最新情報 & Tips
jQuery Mobile 1.2 最新情報 & TipsjQuery Mobile 1.2 最新情報 & Tips
jQuery Mobile 1.2 最新情報 & Tipsyoshikawa_t
 
コードビュー中心で開発するDreamweaverテンプレート
コードビュー中心で開発するDreamweaverテンプレートコードビュー中心で開発するDreamweaverテンプレート
コードビュー中心で開発するDreamweaverテンプレートAkira Maruyama
 
Django 1.5 における効果的な MTV 設計 & ネイティブApp
Django 1.5 における効果的な MTV 設計 & ネイティブAppDjango 1.5 における効果的な MTV 設計 & ネイティブApp
Django 1.5 における効果的な MTV 設計 & ネイティブAppYikei Lu
 
Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Mikiya Okuno
 
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm patternRIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm patternMami Shiino
 
eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜ericsagnes
 
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法Mitsuru Katoh
 
eZ Publish 2012年8月勉強会 - テンプレートオーバーライド
eZ Publish 2012年8月勉強会 - テンプレートオーバーライドeZ Publish 2012年8月勉強会 - テンプレートオーバーライド
eZ Publish 2012年8月勉強会 - テンプレートオーバーライドericsagnes
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugY Watanabe
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義ria1201
 
WordPressのテストとデバッグ方法
WordPressのテストとデバッグ方法WordPressのテストとデバッグ方法
WordPressのテストとデバッグ方法Tsuyoshi.
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015Mikiya Okuno
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~normalian
 
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX  - SwingからJavaFXへのマイグレーションガイドFrom Swing to JavaFX  - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイドYuichi Sakuraba
 

What's hot (19)

SaCSS vol. 24
SaCSS vol. 24SaCSS vol. 24
SaCSS vol. 24
 
jQuery Mobile 1.2 最新情報 & Tips
jQuery Mobile 1.2 最新情報 & TipsjQuery Mobile 1.2 最新情報 & Tips
jQuery Mobile 1.2 最新情報 & Tips
 
コードビュー中心で開発するDreamweaverテンプレート
コードビュー中心で開発するDreamweaverテンプレートコードビュー中心で開発するDreamweaverテンプレート
コードビュー中心で開発するDreamweaverテンプレート
 
Django 1.5 における効果的な MTV 設計 & ネイティブApp
Django 1.5 における効果的な MTV 設計 & ネイティブAppDjango 1.5 における効果的な MTV 設計 & ネイティブApp
Django 1.5 における効果的な MTV 設計 & ネイティブApp
 
Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2
 
Form libraries
Form librariesForm libraries
Form libraries
 
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm patternRIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
 
eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜
 
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
 
eZ Publish 2012年8月勉強会 - テンプレートオーバーライド
eZ Publish 2012年8月勉強会 - テンプレートオーバーライドeZ Publish 2012年8月勉強会 - テンプレートオーバーライド
eZ Publish 2012年8月勉強会 - テンプレートオーバーライド
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
 
Scene BuilderでFXML
Scene BuilderでFXMLScene BuilderでFXML
Scene BuilderでFXML
 
WordPressのテストとデバッグ方法
WordPressのテストとデバッグ方法WordPressのテストとデバッグ方法
WordPressのテストとデバッグ方法
 
G * magazine 1
G * magazine 1G * magazine 1
G * magazine 1
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
 
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX  - SwingからJavaFXへのマイグレーションガイドFrom Swing to JavaFX  - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
 
Pyramid入門
Pyramid入門Pyramid入門
Pyramid入門
 

Viewers also liked

How to implement payment gateway integration for non-credit card on Magento2
How to implement payment gateway integration for non-credit card on Magento2How to implement payment gateway integration for non-credit card on Magento2
How to implement payment gateway integration for non-credit card on Magento2Hirokazu Nishi
 
最新・Magentoを日本語で使うイロハ
最新・Magentoを日本語で使うイロハ最新・Magentoを日本語で使うイロハ
最新・Magentoを日本語で使うイロハHirokazu Nishi
 
第9回 Magento Cafe Plus
第9回 Magento Cafe Plus第9回 Magento Cafe Plus
第9回 Magento Cafe PlusHirokazu Nishi
 
第7回 Magento Cafe Plus
第7回 Magento Cafe Plus第7回 Magento Cafe Plus
第7回 Magento Cafe PlusHirokazu Nishi
 
第8回 Magento cafe plus
第8回 Magento cafe plus第8回 Magento cafe plus
第8回 Magento cafe plusHirokazu Nishi
 
【Draft】サービス説明資料2017.03.01
【Draft】サービス説明資料2017.03.01【Draft】サービス説明資料2017.03.01
【Draft】サービス説明資料2017.03.01Kohta Wada
 

Viewers also liked (7)

How to implement payment gateway integration for non-credit card on Magento2
How to implement payment gateway integration for non-credit card on Magento2How to implement payment gateway integration for non-credit card on Magento2
How to implement payment gateway integration for non-credit card on Magento2
 
Magento2 Overview
Magento2 OverviewMagento2 Overview
Magento2 Overview
 
最新・Magentoを日本語で使うイロハ
最新・Magentoを日本語で使うイロハ最新・Magentoを日本語で使うイロハ
最新・Magentoを日本語で使うイロハ
 
第9回 Magento Cafe Plus
第9回 Magento Cafe Plus第9回 Magento Cafe Plus
第9回 Magento Cafe Plus
 
第7回 Magento Cafe Plus
第7回 Magento Cafe Plus第7回 Magento Cafe Plus
第7回 Magento Cafe Plus
 
第8回 Magento cafe plus
第8回 Magento cafe plus第8回 Magento cafe plus
第8回 Magento cafe plus
 
【Draft】サービス説明資料2017.03.01
【Draft】サービス説明資料2017.03.01【Draft】サービス説明資料2017.03.01
【Draft】サービス説明資料2017.03.01
 

More from Hirokazu Nishi

Magento Meetup Tokyo 14 〜メンテナンス画面を極める
Magento Meetup Tokyo 14 〜メンテナンス画面を極めるMagento Meetup Tokyo 14 〜メンテナンス画面を極める
Magento Meetup Tokyo 14 〜メンテナンス画面を極めるHirokazu Nishi
 
JP_Stripes Vol3 発表資料
JP_Stripes Vol3 発表資料JP_Stripes Vol3 発表資料
JP_Stripes Vol3 発表資料Hirokazu Nishi
 
20170626 さくらインターネット Stripe Magento
20170626 さくらインターネット Stripe Magento20170626 さくらインターネット Stripe Magento
20170626 さくらインターネット Stripe MagentoHirokazu Nishi
 
第4回Magento Cafe Plus〜最近のMagento
第4回Magento Cafe Plus〜最近のMagento第4回Magento Cafe Plus〜最近のMagento
第4回Magento Cafe Plus〜最近のMagentoHirokazu Nishi
 
Magento cafe tokyo2~デザイナー向けMagentoの歩き方
Magento cafe tokyo2~デザイナー向けMagentoの歩き方Magento cafe tokyo2~デザイナー向けMagentoの歩き方
Magento cafe tokyo2~デザイナー向けMagentoの歩き方Hirokazu Nishi
 
加速していくMagento 〜MDP2011参加レポート〜
加速していくMagento 〜MDP2011参加レポート〜加速していくMagento 〜MDP2011参加レポート〜
加速していくMagento 〜MDP2011参加レポート〜Hirokazu Nishi
 

More from Hirokazu Nishi (12)

Magento Meetup Tokyo 14 〜メンテナンス画面を極める
Magento Meetup Tokyo 14 〜メンテナンス画面を極めるMagento Meetup Tokyo 14 〜メンテナンス画面を極める
Magento Meetup Tokyo 14 〜メンテナンス画面を極める
 
JP_Stripes Vol3 発表資料
JP_Stripes Vol3 発表資料JP_Stripes Vol3 発表資料
JP_Stripes Vol3 発表資料
 
20170626 さくらインターネット Stripe Magento
20170626 さくらインターネット Stripe Magento20170626 さくらインターネット Stripe Magento
20170626 さくらインターネット Stripe Magento
 
Magento Cafe Plus #6
Magento Cafe Plus #6Magento Cafe Plus #6
Magento Cafe Plus #6
 
第4回Magento Cafe Plus〜最近のMagento
第4回Magento Cafe Plus〜最近のMagento第4回Magento Cafe Plus〜最近のMagento
第4回Magento Cafe Plus〜最近のMagento
 
Akeneo PIM Overview
Akeneo PIM OverviewAkeneo PIM Overview
Akeneo PIM Overview
 
Magento cafe tokyo2~デザイナー向けMagentoの歩き方
Magento cafe tokyo2~デザイナー向けMagentoの歩き方Magento cafe tokyo2~デザイナー向けMagentoの歩き方
Magento cafe tokyo2~デザイナー向けMagentoの歩き方
 
加速していくMagento 〜MDP2011参加レポート〜
加速していくMagento 〜MDP2011参加レポート〜加速していくMagento 〜MDP2011参加レポート〜
加速していくMagento 〜MDP2011参加レポート〜
 
Magento20100807
Magento20100807Magento20100807
Magento20100807
 
Magento20100709
Magento20100709Magento20100709
Magento20100709
 
Magento20100313
Magento20100313Magento20100313
Magento20100313
 
Magento20100226
Magento20100226Magento20100226
Magento20100226
 

Magento cafe plus #12