Magento Cafe Plus #6

Preview:

Citation preview

Veriteworks Inc. 西 宏和

Magento Cafe Plus #6

Agenda

• 最近のMagento

• 商品属性の管理とカスタマイズ

• マルチサイト運用のイロハ

最近のMagento

セキュリティパッチ

• パッチ番号SUPEE-5344で2月9日リリース済

• 管理画面の forwarded パラメータに関する脆弱性

• https://www.magentocommerce.com/products/downloads/magento/ からダウンロードして適用を

Magento2

• beta11がリリース(ほぼ毎週新バージョンが出る)

• インストール画面のデザイン変更

• とかく毎バージョン変更がてんこ盛り

新インストール画面

HHVMのアレな話

• エクステンション開発者の間ではHHVMでのテストがじわじわ進行中

• Magento2も意識はしている・・・らしい

• で、Magento1.xは?→ オフィシャルには非対応。一応動く

ところが

• https://github.com/magento/magento2/issues/966#issuecomment-78294346

正直、本番で使うのダメ

商品属性の管理とカスタマイズ

復習:商品属性の作り方 by 管理画面

管理画面から作るときのポイント

• 属性コードはシステム内でユニーク&半角英数字+アンダースコア (ただし、先頭文字に数字はNG)

• スコープは用途を考えて慎重に →後から変更できるが、できれば変えないほうが吉

• 入力形式は後で変更できない

• あとの設定はいつでも変えられるのであまり考えなくてもOK

商品属性の作り方 by セットアップスクリプト$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, ‘my_new_attr’, array( 'group' => 'General', 'type' => 'varchar', 'backend' => '', 'frontend' => '', 'label' => ‘My New Attribute', 'input' => 'select', 'class' => '', 'source' => 'catalog/product_attribute_source_boolean', 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_WEBSITE, 'visible' => true, 'required' => false, 'user_defined' => false, 'searchable' => false, 'filterable' => false, 'comparable' => false, 'visible_on_front' => false, 'unique' => false, 'apply_to' => 'simple,configurable,bundle,grouped', 'is_configurable' => false, ));

スクリプトで作るときのポイント

• $installerはMage_Catalog_Model_Resource_Setupを使う(Mage_Eav_Model_Entity_Setupの系列でも可)

• 管理画面から作る場合と異なり、あらゆるパラメータが指定可能

• 一括で複数の属性をつくることも当然可能(オプションを同時に登録する、なども可)

eav_attributeテーブル列名 説明

attribute_id 連番entity_type_id eav_entity_typeを参照attribute_code ユニーク値。半角英数字でattribute_model 未使用backend_model 入力値の管理画面用表示処理に使用backend_type DB側のデータ型。varcharやtext、intなどbackend_table 未使用frontend_model 入力値のフロント側表示処理に使用 frontend_input 入力形式frontend_label 管理画面に表示するラベルfronted_class jsバリデーションクラス名source_model 選択肢などの元データに使用is_required 必須フラグis_user_defined ユーザー定義フラグdefault_value デフォルト値is_unique ユニークフラグnote メモ

frontend_model例:eav/entity_attribute_frontend_datetime

backend_model例:eav/entity_attribute_backend_datetime

source_model例:eav/entity_attribute_source_boolean

実は顧客や住所属性でも 応用できます…

商品属性とエクステンション・テーマ

• エクステンションやテーマの中には、独自の属性を定義するものがある

• これらをインストールする際は問題なくとも、アンインストール時に問題が起きることがある→エクステンションやテーマを消しても属性は残る!

• 外部システムと連携する際に、これらの属性が障害になることもあるので、要注意

マルチサイト運用のイロハ

復習:Magentoのサイト構成

グローバル

admin サイトA サイトBストアA1

ストアA2

ストアB

日本語 英語

中国語

日本語 英語

フランス語 ドイツ語

スコープ

• Magento上の設定値を管理する単位

• グローバル・ウェブサイト・ストアビューの3階層

• 属性や設定値によって、利用できるスコープが異なる

• 管理画面は1ウェブサイト・1ストアビュー

グローバル

• Magento上で最上位にある設定スコープ

• 管理画面のスコープとほぼ同義

• シングルサイト運営の場合はこのスコープだけ見ていれば基本OK

ウェブサイト

• 2階層目のスコープ

• 顧客・商品・価格などの情報を保持する

• 基本通貨を変えたい場合はこのレベルで設定する

• 客層を切り分けたい場合もこのレベル

• システム上でユニークなコードを持つ

ストア

• カテゴリと複数のストアビューを管理するスコープ

• このレベルで設定パラメータを保持することはできない

• システム内部では「ストアグループ」という扱いになっている

ストアビュー

• 最下層のスコープ

• 商品・カテゴリのロケール別データを保持する

• 設定データも設定可能なものは保持できるようになっている

• システム上でユニークなストアコードを持つ

Webサーバーの設定とindex.php

• index.phpには2つの環境変数がある

• MAGE_RUN_CODE(ストアビューコードまたはウェブサイトコード)

• MAGE_RUN_TYPE(storeまたはwebsiteを指定)

• ApacheやNginxのVHOST設定で指定する

1index.phpで複数サイト

• それぞれのVHOST設定で・・・

• MAGE_RUN_CODEにウェブサイトコードを指定

• MAGE_RUN_TYPEにwebsiteを指定

• これで1つのindex.phpを使って複数サイト運営ができる(ストアビュー切り替えはしない)

ディレクトリを作って複数サイト

• ドキュメントルートに適当な名前でディレクトリを作成する

• index.phpとApacheの場合は.htaccessもコピーする

• index.phpの52行目のパスを変える

• MAGE_RUN_TYPEとMAGE_RUN_CODEをハードコードする

• Magentoの管理画面で対応するウェブサイトまたはストアビューのベースURLにディレクトリを追加する

SSL用ドメインを共用してマルチサイト

• あんまりやりたくないテクニック

• カード加盟店契約が1FQDN単位であることに対する逃げ道

• セキュアベースURLのドメイン名を共用しつつ、ディレクトリでindex.phpを分けて、サイト別のSSLページ・データスコープを作る

マルチサイト運用とAccept Language

• Accept Languageを用いて言語振り分けをするというニーズ

• 難関はストアビューコードはシステム上、ユニークであること

• つまり、ja_JPをjpというストアビューへの振り分けは1ウェブサイトの時しかできない

• マルチウェブサイトの場合は、ハードコードするか、なにか手を考える必要がある

• いずれにしてもVHOST設定の追加は必要なので、非技術者にはハードルが高い

おわり