Magento2でカスタムモジュールを作成する方法

公開: 2018-03-19

Magentoモジュールとは何ですか?

ご存知のように、モジュールは、特定のビジネス機能に関連するブロックコントローラーモデルヘルパーなどを含むディレクトリです。

最適なモジュール性へのMagentoの取り組みに沿って、モジュールは1つの機能をカプセル化し、他のモジュールへの依存を最小限に抑えます。

モジュールはサポートロジックを備えたビジネス機能を提供し、テーマはユーザーエクスペリエンスと店頭の外観に大きく影響します。

モジュールの目的

各モジュールの目的は、新しい機能を実装したり、他のモジュールの機能を拡張したりして、特定の製品機能を提供することです。 各モジュールは独立して機能するように設計されているため、特定のモジュールを含めたり除外したりしても、通常、他のモジュールの機能に影響はありません。

Magento 2では、モジュールはMagentoインストールのapp / codeディレクトリに、app / code / <Vendor>/<ModuleName>の形式で存在します。 次に、これらの手順に従って、Magento2で動作する簡単なモジュールを作成します。

Magento2モジュールを作成する

  1. モジュールフォルダを作成します。
  2. etc/module.xmlファイルを作成します。
  3. Registration.phpファイルを作成します。
  4. bin / magento setup:upgradeスクリプトを実行して、新しいモジュールをインストールします。
  5. モジュールが機能していることを確認します。

これらの各ステップを詳しく見ていきましょう。

ステップ1:モジュールフォルダーを作成する

  • Magentoのモジュールには2つの可能な場所があります:app/codeフォルダーとvendorフォルダー

Magento 2のインストール方法に応じて、コアモジュールはvendor / magento / magento- * folder(composerインストールの場合)またはapp / code / Magento /フォルダー(githubのクローン作成の場合)のいずれかに配置できます。

  • 新しいモジュールには、これらの場所のどれを選択する必要がありますか?

特定のプロジェクト用のモジュールをビルドする場合は、app / codeフォルダーを選択して、プロジェクトのリポジトリにコミットするのが最善です。

再利用する拡張機能を作成する場合は、composerを使用して拡張機能を作成し、モジュールをvendor / <YOUR_VENDOR>/module-somethingフォルダーに配置することをお勧めします。

Magento 2の各モジュール名は、ベンダーとモジュール自体の2つの部分で構成されているため、ベンダー名とモジュール名を定義する必要があります。 この例では、ベンダーに「Learning」、モジュールに「FirstUnit」という名前を付けましょう。

app / code / Learningフォルダーを作成し、このフォルダー内に別のフォルダーFirstUnitを配置します。 コマンドラインを使用している場合、コードは次のようになります。

  1. ルートフォルダにcd
  2. mkdir app / code / Learning
  3. mkdirapp / code / Learning / FirstUnit

インストールでファイルとフォルダーを作成する権限があることを確認してください。

ステップ2:etc/module.xmlファイルを作成します

このファイルはモジュールが存在するために必要であり、次の情報が含まれています。

  • モジュール名
  • モジュールバージョン
  • 依存関係

モジュール名は、作成したフォルダーによって定義されます。これは、Magento 2では、クラス名がフォルダー構造に従う必要があるためです。 Learning / FirstUnitフォルダーを作成したため、モジュール名はLearning_FirstUnitになり、このモジュールに属するすべてのクラスはLearning \ FirstUnitで始まります(例:Learning \ FirstUnit \ Observer \ Test)。

モジュールバージョンは、データベーススキーマとデータの現在のバージョンを示し、アップグレードに使用されます。 たとえば、モジュール内のテーブルのスキーマを変更することにしたとします。 コードがデプロイされているすべてのインスタンスでこの変更が発生することをどのように確認できますか? 直接SQLクエリによるデータベースの変更は機能しません。 代わりに、Magento 2にはすべてのモジュールにインストールスクリプトとアップグレードスクリプトがあります(オプション)。 これらのスクリプトには、データベーススキーマまたはデータを変更するコマンドが含まれています。 スクリプトを実行するかどうかを追跡するために、Magento2はモジュールバージョンを使用します。 新しいデータベースの変更を実装するたびに、新しいバージョンのモジュールを実装し、対応するmodule.xmlを変更します。 Magentoは現在のモジュールのバージョンをデータベースに保存し、データベースの値とmodule.xmlの値が一致しない場合、アップグレードコードを実行します。

依存関係。 あるモジュールが別のモジュールに依存している場合、module.xmlファイルには、現在のモジュールが依存しているモジュールのリストを定義する特別な宣言があります。 この例では、モジュールをMagento_Catalogに依存させます。

次のコマンドラインコードを使用して、 app / code / Learning / FirstUnit/etcフォルダーを作成します。

 mkdir app / code / Learning / FirstUnit / etc

次に、次の内容のXMLファイルを作成します。

 <?xml version = "1.0"?>
<config xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "urn:magento:framework:Module / etc / module.xsd">
    <module name = "Learning_FirstUnit" setup_version = "0.0.1">
        <シーケンス>
            <module name = "Magento_Catalog" />
        </ sequence>
    </ module>
</ config>

指定したXMLファイルで次の点に注意してください。

  • モジュール名:Learning_FirstUnit(作成したフォルダーに基づく)
  • バージョン:0.0.1(モジュールの初期バージョン)
  • 依存関係:Magento_Catalog。 複数の依存関係がある可能性があります。 この場合、シーケンスノードの下に<module name =” ..”/>ノードを配置します。

ステップ3:registration.phpファイルを作成する

各モジュールにはこのファイルが必要です。このファイルは、Magentoにモジュールの場所を指示します。 例を続けて、ファイルapp / code / Learning / FirstUnit/registration.phpを作成します。 次に、次のコンテンツをその中に入れます。

 <?php \ Magento \ Framework \ Component \ ComponentRegistrar :: register(\ Magento \ Framework \ Component \ ComponentRegistrar :: MODULE、'Learning_FirstUnit'、__DIR__);

Registration.phpは、すべてのモジュールで同じパターンに従う標準化されたファイルです。

異なるのはモジュール名だけです。この場合はLearning_FirstUnitです。

ステップ4:「setup:upgrade」コマンドを実行します

このコマンドを実行すると、新しいモジュールがアクティブになり、Magentoにその存在が通知されます。

 php bin / magento setup:upgrade

大量の出力をエコーする必要があり、そのうちの1行はLearning_FirstUnitである必要があります。 このコード行がそこにあることを確認します。

手順5:新しいモジュールがアクティブであることを確認します

これまでのところ、モジュールに有用なコードを追加していません。まだ空です(したがって表示されません)。 認識されたことを確認するには、ファイルapp / etc/config.phpを確認してください。 アクティブな自動生成モジュールのリストがあります。

このリストを手動で変更しないでください。

 cat app / etc / env.php | grep Learning_FirstUnit

これらの手順を使用すると、Magento2で新しいモジュールを正常に作成できます。


続きを読む:
Magento2で静的コンテンツをデプロイする方法