バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

プラグイン > バグ報告・利用に関する質問 > 配送伝票番号プラグイン(3.0系)の競合について

バグ報告・利用に関する質問

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
moge1203
投稿日時: 2018/4/20 13:09
対応状況: −−−
一人前
登録日: 2018/3/15
居住地:
投稿: 113
配送伝票番号プラグイン(3.0系)の競合について
▼テンプレート
[EC-CUBE] 3.0.15 , 新規インストール
[レンタルサーバ] heteml
[OS] macOS High Sierra ver10.13.3
[PHP] 7,0
[ブラウザ] Google Chrome
[カスタマイズの有無] 独自のhtmlファイルから組み込み

▼質問内容

皆様いつもお世話になっております。
配送伝票番号プラグイン(3.0系)のことで質問がありますので、
どなかたご教授お願いします。

配送伝票番号プラグイン(3.0系)を導入しているのですが、ポイントプラグインと競合してしまい、配送伝票番号の更新ができない状況です。

Pointプラグインと配送伝票番号プラグインの競合について
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=flat&order=ASC&topic_id=18946&forum=11

上記のフォーラムが同様の記事のようですが、
3.0.15の環境では記載のコードに変更を行うとエラーが発生してしまいます。
そもそも変更内容が間違っているのでしょうか。

どなたかご教授いただけないでしょうか?

念のため、変更後のソースを掲載させていただきます。

【変更前】

    public function registerShipNumber(FilterResponseEvent $event)
    {
      $app = $this->app;

      if ('POST' === $app['request']->getMethod()) {

        switch ($app['request']->get('mode')) {
            case 'register':

            $id = $app['request']->attributes->get('id');

            $TargetOrder = null;
            $OriginOrder = null;

            if (is_null($id)) {
                // 空のエンティティを作成.
                $TargetOrder = $this->newOrder();
            } else {
                $TargetOrder = $app['eccube.repository.order']->find($id);
                if (is_null($TargetOrder)) {
                    throw new NotFoundHttpException();
                }
            }

            // 編集前の受注情報を保持
            $OriginOrder = clone $TargetOrder;
            $OriginalOrderDetails = new ArrayCollection();

            foreach ($TargetOrder->getOrderDetails() as $OrderDetail) {
                $OriginalOrderDetails->add($OrderDetail);
            }

            $form = $app['form.factory']
                ->createBuilder('order', $TargetOrder)
                ->getForm();

            $form->handleRequest($app['request']);

            if ($form->isValid()) {

              $ship_number = $form->get('content')->getData();

              $order_id = $app['request']->attributes->get('id');

              $OrderContent = $app['eccube.plugin.repository.ship_number']->find($order_id);

              if (is_null($OrderContent)) {
                  $OrderContent = new \Plugin\ShipNumber\Entity\ShipNumber();
              }

              $Order = $app['eccube.repository.order']->find($order_id);

              $OrderContent
                  ->setShipNumber($ship_number)
                  ->setOrder($Order)
                  ->setOrderId($Order->getId());

              $app['orm.em']->persist($OrderContent);
              $app['orm.em']->flush();
            }
          
          default:
            break;
        }
      }
    }



【変更後】

    public function registerShipNumber(FilterResponseEvent $event)
    {
      $app = $this->app;

      if ('POST' === $app['request']->getMethod()) {

        switch ($app['request']->get('mode')) {
            case 'register':

            $id = $app['request']->attributes->get('id');

            $TargetOrder = null;
            $OriginOrder = null;

            if (is_null($id)) {
                // 空のエンティティを作成.
                $TargetOrder = $this->newOrder();
            } else {
                $TargetOrder = $app['eccube.repository.order']->find($id);
                if (is_null($TargetOrder)) {
                    throw new NotFoundHttpException();
                }
            }

            // 編集前の受注情報を保持
            $OriginOrder = clone $TargetOrder;
            $OriginalOrderDetails = new ArrayCollection();

            foreach ($TargetOrder->getOrderDetails() as $OrderDetail) {
                $OriginalOrderDetails->add($OrderDetail);
            }

//変更箇所はここから
use Symfony\Component\Validator\Constraints as Assert;

    ・・・

    $builder = $app['form.factory']->createBuilder('order', $TargetOrder);
    $builder = $this->buildFormForPointPlg($builder);
    $form = $builder->getForm();

    ・・・

    private function buildFormForPoint($builder) {
        $builder->add(
            'use_point',
            'integer',
            array(
                'label' => '利用ポイント',
                'required' => false,
                'mapped' => false,
                'attr' => array(
                    'class' => 'form-control',
                ),
                'constraints' => array(
                    new Assert\GreaterThanOrEqual(array('value' => 0)),
                    new Assert\Length(
                        array(
                            'max' => $this->app['config']['int_len'],
                        )
                    ),
                ),
            )
        )->add(
            'add_point',
            'integer',
            array(
                'label' => '加算ポイント',
                'required' => false,
                'mapped' => false,
                'attr' => array(
                    'class' => 'form-control',
                ),
                'constraints' => array(
                    new Assert\GreaterThanOrEqual(array('value' => 0)),
                    new Assert\Length(
                        array(
                            'max' => $this->app['config']['int_len'],
                        )
                    ),
                ),
            )
        );

        return $builder;
    }
//変更箇所はここまで

            $form->handleRequest($app['request']);

            if ($form->isValid()) {

              $ship_number = $form->get('content')->getData();

              $order_id = $app['request']->attributes->get('id');

              $OrderContent = $app['eccube.plugin.repository.ship_number']->find($order_id);

              if (is_null($OrderContent)) {
                  $OrderContent = new \Plugin\ShipNumber\Entity\ShipNumber();
              }

              $Order = $app['eccube.repository.order']->find($order_id);

              $OrderContent
                  ->setShipNumber($ship_number)
                  ->setOrder($Order)
                  ->setOrderId($Order->getId());

              $app['orm.em']->persist($OrderContent);
              $app['orm.em']->flush();
            }
          
          default:
            break;
        }
      }
    }
468
投稿日時: 2018/4/20 17:51
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 配送伝票番号プラグイン(3.0系)の競合について
/app/Plugin/ShipNumber/ShipNumberEvent.php の変更箇所の記述方法が誤っています。
エラーの原因は、文法ミス(functionの中でfunctionを記述している)かと思います。


use Symfony\Component\Validator\Constraints as Assert;
は、ShipNumberEvent.phpの先頭にuseを記述している所があると思いますので、その下の行に追加します。

95行目付近の以下の箇所を3行ほど置換します。

$form = $app['form.factory']
->createBuilder('order', $TargetOrder)
->getForm();


$builder = $app['form.factory']->createBuilder('order', $TargetOrder);
$builder = $this->buildFormForPointPlg($builder);
$form = $builder->getForm();

private function buildFormForPoint($builder) { } は、
public function registerShipNumber(FilterResponseEvent $event){ }の外側に記述します。

多分、これでリンク先で提示されている修正と同じ状態になるのではないかと思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

moge1203
投稿日時: 2018/4/20 18:12
対応状況: 解決済
一人前
登録日: 2018/3/15
居住地:
投稿: 113
Re: 配送伝票番号プラグイン(3.0系)の競合について
468様

いつもお世話になっております。
とても丁寧なご回答感謝しております。

ご教授いただいた通りに修正したところ、無事干渉することなく稼働しました。

蛇足かもしれませんが、



$builder = $this->buildFormForPointPlg($builder);


と記述してある箇所を


$builder = $this->buildFormForPoint($builder);


に変更する必要がありましたので、ご共有させていただきます。

誠にありがとうございました。
またよろしくお願いします。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

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.