Linuxなどのメモ書き

Magento2 エクステンションの作成 その1


1. 概要

Magento2 エクステンションのサンプルのサンプルをベースに基本的なエクステンションの作成方法を説明していく。

完成形は https://github.com/kztomita/magento-module-topic を参照。

対象Magentoのバージョンは2.2系。

2. 空のエクステンションを作成

まずは、空のエクステンションを作成しMagentoに登録をする。

モジュール名はBitHive_Topicなので、app/code/以下にBitHive/Topicディレクトリを作成し、Topicディレクトリ配下にregistration.phpファイルとetc/module.xmlを作成する。

registration.php

<?php

\Magento\Framework\Component\ComponentRegistrar::register(
        \Magento\Framework\Component\ComponentRegistrar::MODULE,
        'BitHive_Topic',
        __DIR__
);

registration.phpで登録するモジュール名を'BitHive_Topic'を指定する。

 

etc/module.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="BitHive_Topic" setup_version="1.0.0">
    </module>
</config>

module.xmlではモジュール名とバージョン番号を指定する。

現時点でTopic配下は以下のようになっている。

./registration.php
./etc/module.xml

この状態で以下のコマンドを実行し、モジュールを登録する。

# cd (Magentoのトップディレクトリ)
# ./bin/magento module:enable BitHive_Topic
# ./bin/magento setup:upgrade

正常に登録できていれば、module:statusでモジュール名が表示される。

# ./bin/magento module:status | grep Topic
BitHive_Topic

 

3. テーブルの作成

次にDBにテーブルを作成する。このエクステンションでは、bithive_topic_postテーブルを一つだけ作成する。bithive_topic_postのテーブルの構造は以下のとおり。

bithive_topic_postのテーブルの構造

+----------+------------------+------+-----+---------------------+-------------------------------+
| Field    | Type             | Null | Key | Default             | Extra                         |
+----------+------------------+------+-----+---------------------+-------------------------------+
| post_id  | int(10) unsigned | NO   | PRI | NULL                | auto_increment                |
| message  | varchar(255)     | YES  |     | NULL                |                               |
| date     | timestamp        | YES  | MUL | NULL                |                               |
| created  | timestamp        | NO   |     | current_timestamp() |                               |
| modified | timestamp        | NO   |     | current_timestamp() | on update current_timestamp() |
+----------+------------------+------+-----+---------------------+-------------------------------+

 

テーブルを作成するにはSetup/InstallSchema.phpファイルを作成する。bitive_topic_postテーブルを作成するInstallSchema.phpは次のとおり。このインストール処理は./bin/magento setup:upgrade実行時に実行される。

Setup/InstallSchema.php

<?php
namespace BitHive\Topic\Setup;

class InstallSchema implements \Magento\Framework\Setup\InstallSchemaInterface
{
    public function install(\Magento\Framework\Setup\SchemaSetupInterface $setup, \Magento\Framework\Setup\ModuleContextInterface $context)
	{
		$installer = $setup;
        $installer->startSetup();
        if (!$installer->tableExists('bithive_topic_post')) {
            $table = $installer->getConnection()->newTable(
                $installer->getTable('bithive_topic_post')
            )
                   ->addColumn(
                       'post_id',
                       \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
                       null,
                       [
                           'identity' => true,
                           'nullable' => false,
                           'primary'  => true,
                           'unsigned' => true,
                       ],
                       'Post ID'
                   )
                   ->addColumn(
                       'message',
                       \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                       255,
                       ['nullable => false'],
                       'Post Message'
                   )
                   ->addColumn(
                       'date',
                       \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
                       null,
                       ['nullable => false'],
                       'Date'
                   )
                   ->addColumn(
                       'created',
                       \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
                       null,
                       ['nullable' => false, 'default' => \Magento\Framework\DB\Ddl\Table::TIMESTAMP_INIT],
                       'Created Time'
                   )
                   ->addColumn(
                       'modified',
                       \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
                       null,
                       ['nullable' => false, 'default' => \Magento\Framework\DB\Ddl\Table::TIMESTAMP_INIT_UPDATE],
                       'Modified Time'
                   )
                   ->addIndex(
                       $installer->getIdxName('bithive_topic_post', ['date']),
                       ['date']
                   )
                   ->setComment('News Table');
			$installer->getConnection()->createTable($table);
		}
		$installer->endSetup();
	}
}

 

現時点でTopic配下は以下のようになっている。

./registration.php
./Setup/InstallSchema.php
./etc/module.xml

 

通常、モジュールをインストールする時は./bin/magento setup:upgradeを実行すればテーブルも作成されるが、ここでは、既に./bin/magento setup:upgradeを実行してモジュールをver.1.0.0で登録してしまっているため、setup:upgradeを実行してもテーブルは作成されない。このため、DBからモジュールの登録を削除してsetup:upgradeを実行することで、テーブルの作成処理を実行させる。

テーブルの作成

MySQLに接続して、一旦モジュールを削除
MariaDB [magento]> DELETE FROM setup_module WHERE module ='BitHive_Topic';

# ./bin/magento setup:upgrade

これでテーブルが作成される
MariaDB [magento]> show tables LIKE 'bithive_%';
+-------------------------------+
| Tables_in_magento (bithive_%) |
+-------------------------------+
| bithive_topic_post            |
+-------------------------------+

開発中はテーブルの内容を変更したくなる時があるが、その場合、わざわざバージョン番号を上げていくのは無駄なので、上記のようにすればテーブルを再作成することができる。

 

とりあえずはここまで。次回はルートの作成。Magento2 エクステンションの作成 その2に続きます。

 

 


最終更新 2018/11/27 14:50:26 - kztomita
(2018/11/09 15:56:08 作成)


リンク

その他のWiki
Linuxメモ
Xnuメモ

会社
(有)ビットハイブ
受託開発やってます。

よくやる仕事

・Webシステム開発(LAMP環境)
・Linuxサーバー設定関連
サーバー移転作業代行

開発事例にデジタルカタログ/マンガビューワーを追加しました。

draggable.jsのスマホ対応版デモページを追加しました。説明はこちら

検索

Adsense
最近のコメント