• 2018.10.22
  • EC-cube

【EC-cube3】プラグイン開発に向けて初心者がいろいろやってみる(2):新規ページの作成

【EC-cube3】プラグイン開発に向けて初心者がいろいろやってみる(2):新規ページの作成のイメージ画像

取りあえず、各ファイルの役割を理解するために、なるべくシンプル(’ミニマムな構成?)なものを作ろうと思いましたので、今回は「新規ページの作成」をやってみて記事にしたいと思います。

  • 〇プラグインコード「TestPlugin」
  • 〇管理画面内、「http://[EC-CUBEインストール先]/admin/test」というURLで新規ページを表示する。

ファイル構成

どんなファイル構成になるかは、プラグインに求める機能によると思いますが、最低限必要なファイルは下記の2つのようです。

・config.yml
コンフィグファイル。
プラグインの設定を記述するファイル。このファイルがないとインストールすらさせてもらえない必須ファイル。
・PluginManager.php
プラグイン全体を制御するファイル。
プラグインのインストーラー。必須ファイル。

上記2ファイルは準備されていることを前提として、今回は「新規ページ作成」に必要な作業を進めていきます。
必須ファイルの設定についてはこちら。

新規ページ作成に必要な手順

  1. 1.Controllerの作成
  2. 2.ServiceProviderでルーティングを定義
  3. 3.config.ymlにServiceProviderを追記
  4. 4.(twigテンプレートの作成)

1.Controllerの作成

「app/Plugin/TestPlugin/Controller」配下に、Controllerを作成します。

今回は管理画面内にページを作成しようと思いますので、app/Plugin/TestPlugin/Controller/Admin ファイル名を「TestPluginController.php」

<?php

namespace Plugin\TestPlugin\Controller\Admin;

use Eccube\Application;
use Symfony\Component\HttpFoundation\Request;

/**
 * Class TestPluginController admin.
 */
class TestPluginController
{
    public function index(Application $app, Request $request)
    {
        return 'This is a Test';
    }
}

2.ServiceProviderでルーティングを定義

app/Plugin/TestPlugin/ServiceProvider/TestPluginServiceProviderに、ルーティングを定義します。 registerメソッド内に、以下のように記述をしてください。

<?php

namespace Plugin\TestPlugin\ServiceProvider;

use Eccube\Application;
use Silex\Application as BaseApplication;
use Silex\ServiceProviderInterface;

class TestPluginServiceProvider implements ServiceProviderInterface
{
    public function register(BaseApplication $app)
    {
        $app->match(
            '/'.$app['config']['admin_route'].'/test',
            'Plugin\TestPlugin\Controller\Admin\TestPluginController::index'
        )->bind('test');
    }

    public function boot(BaseApplication $app)
    {
    }
}

3.config.ymlにServiceProviderを追記

config.ymlにServiceProviderを追記(4行目~5行目)します。

name: テストプラグイン
code: TestPlugin
version: 1.0.0
service:
    - TestPluginServiceProvider

取りあえず、ここまでで新規ページを表示させることはできます。

「http://[EC-CUBEインストール先]/admin/test」へアクセスすると、「This is aTest」と表示されると思います。

4.(twigテンプレートの作成)

次は、テンプレートを使用したページを作成してみます。

今回は管理画面内のページなので、app/Plugin/TestPlugin/Resource/template/admin配下に、twigテンプレートを作成します。
ファイル名は、test.twigとしてください。

例えばこんな感じです。

{% extends 'default_frame.twig' %}

{% block main %}
    <div class="row">
        <div class="col-md-12">
            <p class="text-danger">こんにちわ</p>
        </div>
    </div>
{% endblock %}

twigファイルと他のファイルを繋げてあげる必要があるのでコントローラーを編集します。

twigテンプレートを使用する場合のController

<?php

namespace Plugin\TestPlugin\Controller\Admin;

use Eccube\Application;
use Symfony\Component\HttpFoundation\Request;

/**
 * Class TestPluginController admin.
 */
class TestPluginController
{
    public function index(Application $app, Request $request)
    {
        //return 'This is a Test';
        return $app->render('TestPlugin/Resource/template/admin/test.twig', array());
    }
}

必須ファイルの設定について

config.yml

プラグインを動作させるのに、最低限必要な内容は下記の3つです。

name: [プラグイン名]
code: [プラグインコード]
version: x.x.x

PluginManager.php

「インストール」「アンインストール」「有効」「無効」「アップデート」のタイミングに行っておきたい処理があれば、下記の該当箇所に記載します。
特になければ下記のまま(プラグインコードは編集してください)で大丈夫です。

<?php
namespace Plugin[プラグインコード];

use EccubeApplication;
use EccubePluginAbstractPluginManager;

class PluginManager extends AbstractPluginManager
{

    /**
     * プラグインインストール時の処理
     *
     * @param $config
     * @param Application $app
     * @throws Exception
     */
    public function install($config, Application $app)
    {
    }

    /**
     * プラグイン削除時の処理
     *
     * @param $config
     * @param Application $app
     */
    public function uninstall($config, Application $app)
    {
    }

    /**
     * プラグイン有効時の処理
     *
     * @param $config
     * @param Application $app
     * @throws Exception
     */
    public function enable($config, Application $app)
    {
    }

    /**
     * プラグイン無効時の処理
     *
     * @param $config
     * @param Application $app
     * @throws Exception
     */
    public function disable($config, Application $app)
    {
    }

    /**
     * プラグイン更新時の処理
     *
     * @param $config
     * @param Application $app
     * @throws Exception
     */
    public function update($config, Application $app)
    {
    }

}