OctoberCMSでECサイトを作る (Shopaholic編１：インストール)

OctoberCMS用のネットショップ作成プラグインはいくつかあるが、拡張機能が充実している[Shopaholic][Shopaholic]を使ってみる。

[Shopaholic]: https://octobercms.com/plugin/lovata-shopaholic

プラグイン自体は良さそうだがドキュメントがあまりに不十分で、使い方を把握するのにソースコードを紐解く必要があった、のでメモ。

今回はプラグインのインストールまで。

## 使用するプラグイン
Shopaholicは更に機能拡張するためのプラグインを多数（有料含む）用意しているが、下記プラグイン（無料）だけで基本的にECサイトは作ることができる（はず）。

1. [Orders Shopaholic][OrdersShopaholic] - Shopaholicにカートや注文登録機能を追加する拡張プラグイン
2. [Shopaholic][Shopaholic] - Shopaholicの基礎プラグイン。主に製品情報を管理＆提供する
3. [ToolBox][ToolBox] - 上記プラグインで使用している主にライブラリ

[OrdersShopaholic]: https://octobercms.com/plugin/lovata-ordersshopaholic
[ToolBox]: https://octobercms.com/plugin/lovata-toolbox

## Shopaholicのインストール
管理画面でインストールする場合は非常に簡単なので、ここではcomposerでインストールする説明をする。

残念ながらShopaholic関連プラグインはpackagistに登録もされてなければ、composer.jsonファイルもソースコードに含んでいないものが多い。なので、自分のcomposer.jsonにこれらのパッケージの定義を記述してやる必要がある。

結論から書くと、下記の例の様にすればよい。

```json
{
    ...
    "require": {
        ...
        "lovata/oc-ordersshopaholic-plugin": "~1.10"
    },
    ...
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "lovata/oc-ordersshopaholic-plugin",
                "type": "october-plugin",
                "version": "1.10.2",
                "source": {
                    "url": "https://github.com/lovata/oc-orders-shopaholic-plugin",
                    "type": "git",
                    "reference": "1.10.2"
                },
                "require": {
                    "lovata/oc-toolbox-plugin": "~1.14",
                    "lovata/oc-shopaholic-plugin": "~1.12"
                }
            }
        },
        {
            "type": "package",
            "package": {
                "name": "lovata/oc-shopaholic-plugin",
                "type": "october-plugin",
                "version": "1.12.0",
                "source": {
                    "url": "https://github.com/lovata/oc-shopaholic-plugin",
                    "type": "git",
                    "reference": "1.12.0"
                },
                "require": {
                    "lovata/oc-toolbox-plugin": "~1.14"
                }
            }
        },
        {
            "type": "package",
            "package": {
                "name": "lovata/oc-toolbox-plugin",
                "type": "october-plugin",
                "version": "1.14.1",
                "source": {
                    "url": "https://github.com/lovata/oc-toolbox-plugin",
                    "type": "git",
                    "reference": "1.14.1"
                },
                "require": {
                    "kharanenka/php-result-store": "2.*",
                    "kharanenka/laravel-scope-active": "1.0.*",
                    "kharanenka/oc-pagination": "1.0.*",
                    "kharanenka/laravel-cache-helper": "1.0.*",
                    "kharanenka/laravel-scope-category-belongs-to": "1.0.*",
                    "kharanenka/laravel-scope-code": "1.0.*",
                    "kharanenka/laravel-scope-date": "1.0.*",
                    "kharanenka/laravel-scope-external-id": "1.0.*",
                    "kharanenka/laravel-scope-name": "1.0.*",
                    "kharanenka/laravel-scope-slug": "1.0.*",
                    "kharanenka/laravel-scope-user-belongs-to": "1.0.*",
                    "kharanenka/oc-data-file-model": "1.*",
                    "kharanenka/laravel-scope-moderation": "1.0.*"
                }
            }
        }
    ]
}
```

書き方は「[OctoberCMSにComposerで非Composer対応プラグインをインストールする](https://qiita.com/pikanji/items/223c1b80575019404196)」で紹介したとおりだ。
ここでは上で紹介した３つのプラグインのpackage情報を定義している。

それぞれ、GitHubリポジトリで最新のタグを確認して、そのタグを`reference`に設定し、同じバージョン名で`version`を設定している。

そして、`lovata/oc-ordersshopaholic-plugin`を`require`に追加している。こいつを入れれば他の２つもこいつの`require`をたどってインストールされる。

また`lovata/oc-toolbox-plugin`の`require`はこいつのcomposer.jsonからのコピーだ。

これで、下記を実行すればインストールは完了する。

```shell
$ composer update
$ php artisan october:up
```

マイグレーションも正常に完了したら、管理画面で製品やカテゴリの登録ができるようになる。
![shopaholic.jpg](https://qiita-image-store.s3.amazonaws.com/0/138322/35297a6b-bb6d-9ce7-0136-fcf37bf5321c.jpeg)

次回は製品を登録して表示するまでを説明する。コンポーネントの一般的な使い方なので説明の必要はなさそうだが、一連の流れとして書く。