バージョン選択

フォーラム

メニュー

オンライン状況

68 人のユーザが現在オンラインです。 (57 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 67
tonybrown もっと...

サイト内検索

プラグイン > 開発について > 4系プラグインのPluginManagerの書き方

開発について

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
h_tanaka
投稿日時: 2019/3/6 10:04
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1638
Re: 4系プラグインのPluginManagerの書き方
umebius さん
ありがとうございます!

js、cssなどは自動でコピーされるのですね!
コピーされるようにしておくよう、特定のパスに配置する必要があるなどの条件はありますか?

プラグイン有効時に行いたいのは、次のとおりです。
これらの方法を4系のときにどう実装すればよいかがわかりません。
・リソースのコピー →自動で行われる?
・WYSIWYGでアップロードされる画像の保存先パスの指定
・ブロックのコピー

参考に、3系プラグインの時のソースを記載しておきます。

    // プラグイン有効時
    public function enable($config, $app)
    {
        // リソースのコピー
        $file = new Filesystem();
        $file->mkdir($app['config']['plugin_html_realdir'] . '/samplepage/save_image', 0775);
        $to_path = $app['config']['plugin_html_realdir'] . '/samplepage/assets';
        $file->mirror(__DIR__.'/Resource/assets', $to_path);

        // jbimagesの画像保存先パスを置換
        $file_path = $to_path . '/js/vendor/tinymce/plugins/jbimages/config.php';
        $configs = file_get_contents($file_path);
        $search = '$config[\'img_path\'] = \'/plugin/samplepage/save_image\';';
        $replace = '$config[\'img_path\'] = \'' . $app['config']['plugin_urlpath'] . '/samplepage/save_image\';';
        $configs = str_replace($search, $replace, $configs);
        file_put_contents($file_path, $configs);

        // ブロックのコピー
        $this->copyBlock($app);
    }

    /**
     * ブロックファイルをブロックディレクトリにコピーしてDBに登録
     *
     * @param $app
     * @throws \Exception
     */
    private function copyBlock($app)
    {
        $file = new Filesystem();
        if (!$file->exists(sprintf("%s/%s.twig", $app['config']['block_realdir'], self::BLOCKFILENAME))) {
            $file->copy($this->Block, sprintf("%s/%s.twig", $app['config']['block_realdir'], self::BLOCKFILENAME));
            $app['orm.em']->getConnection()->beginTransaction();
            try {
                // ブロックの登録
                $Block = $this->registerBlock($app);
                // BlockPositionの登録
                $this->registerBlockPosition($app, $Block);
                $app['orm.em']->getConnection()->commit();
            } catch (\Exception $e) {
                $app['orm.em']->getConnection()->rollback();
                throw $e;
            }
        }
    }

    /**
     * ブロックの登録
     *
     * @return \Eccube\Entity\Block
     */
    private function registerBlock($app)
    {
        $DeviceType = $app['eccube.repository.master.device_type']->find(DeviceType::DEVICE_TYPE_PC);
        /** @var \Eccube\Entity\Block $Block */
        $Block = $app['eccube.repository.block']->findOrCreate(null, $DeviceType);
        $Block->setName(self::BLOCKNAME);
        $Block->setFileName(self::BLOCKFILENAME);
        $Block->setDeletableFlg(Constant::DISABLED);
        $Block->setLogicFlg(1);
        $app['orm.em']->persist($Block);
        $app['orm.em']->flush($Block);
        return $Block;
    }

    /**
     * BlockPositionの登録
     *
     * @param $Block
     */
    private function registerBlockPosition($app, $Block)
    {
        $blockPos = $app['orm.em']->getRepository('Eccube\Entity\BlockPosition')->findOneBy(
            array('page_id' => 1, 'target_id' => PageLayout::TARGET_ID_UNUSED),
            array('block_row' => 'DESC'));
        $BlockPosition = new BlockPosition();
        // ブロックの順序を変更
        if ($blockPos) {
            $blockRow = $blockPos->getBlockRow() + 1;
            $BlockPosition->setBlockRow($blockRow);
        } else {
            // 1番目にセット
            $BlockPosition->setBlockRow(1);
        }
        $PageLayout = $app['eccube.repository.page_layout']->find(1);
        $BlockPosition->setPageLayout($PageLayout);
        $BlockPosition->setPageId($PageLayout->getId());
        $BlockPosition->setTargetId(PageLayout::TARGET_ID_UNUSED);
        $BlockPosition->setBlock($Block);
        $BlockPosition->setBlockId($Block->getId());
        $BlockPosition->setAnywhere(Constant::DISABLED);
        $app['orm.em']->persist($BlockPosition);
        $app['orm.em']->flush($BlockPosition);
    }


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
   4系プラグインのPluginManagerの書き方 h_tanaka 2019/3/5 18:50
     Re: 4系プラグインのPluginManagerの書き方 umebius 2019/3/5 19:02
     » Re: 4系プラグインのPluginManagerの書き方 h_tanaka 2019/3/6 10:04
         Re: 4系プラグインのPluginManagerの書き方 h_tanaka 2019/3/6 16:56
           Re: 4系プラグインのPluginManagerの書き方 umebius 2019/3/6 18:01
             Re: 4系プラグインのPluginManagerの書き方 h_tanaka 2019/3/7 12:40
               Re: 4系プラグインのPluginManagerの書き方 h_tanaka 2019/3/7 15:48
                 Re: 4系プラグインのPluginManagerの書き方 h_tanaka 2019/3/7 16:39
                   Re: 4系プラグインのPluginManagerの書き方 h_tanaka 2019/3/8 11:09

 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,713名です
総投稿数は109,949件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1285
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.