バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

機能要望 > その他 > EC-CUBE3:商品詳細に追加したフォームをカートに表示したい

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
fresh
投稿日時: 2017/2/5 15:30
対応状況: −−−
半人前
登録日: 2016/11/29
居住地:
投稿: 24
EC-CUBE3:商品詳細に追加したフォームをカートに表示したい
------------------------------------------------------
[EC-CUBE] 3.0.10
[レンタルサーバ] さくら
------------------------------------------------------

初めて投稿します。
いろいろ試してみたのですが、どうしてもわからないので質問させてください。

何がしたいかというと、商品詳細ページに利用目的のセレクトボックス追加しました。

AddCartType.php何に

->add('mokuteki', 'choice', array(
'choices' => array('__unselected' => '選択してください', '1' => '自分用', '2' => '家族', '3' => 'プレゼント', '4' => 'その他'),
))

と、追加し /Product/detail.twig 内に

{{ form_widget(form.mokuteki) }}
{{ form_errors(form.mokuteki) }}

といれて、セレクターを表示させるまではできたのですが、
そのあとの/cartや/shoppingのにも表示させ、注文確認メールでも記載されるようにしたいのですが、いろいろ試してもさっぱりで。。
単純に{{ form_widget(form.mokuteki) }}で表示されるとおもっていのですが、無反応で。。


プラグインは予算的に厳しいので最終手段にして、勉強のためにももうちょっとチャレンジしたのですが、ヒントだけでもどなかた教えてくれませんでしょうか。。


まずいじるファイルは下記くらいなのかとおもっているのですが他にもあるのでしょうか?
・AddCartType.php
・/Product/detail.twig
・/Cart/index.twig
・/Shopping/index.twig
・/Mail/order.twig

基本からしっかり学ぶSymfony2入門とか買ってみたのですが、やはりちんぷんかんぷんで。。
すみませんがよろしくお願いいたします。
umebius
投稿日時: 2017/2/5 15:53
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: EC-CUBE3:商品詳細に追加したフォームをカートに表示したい
とりあえずカートに利用目的を入れるまでの行程になりますが、下記の修正が必要です。

まず、/src/Eccube/Entity/CartItem.phpに各商品の利用目的を保存するためのプロパティが必要です。$mokutekiというプロパティとセッターゲッターを書いてください。

次に、/src/Eccube/Service/CartService.phpのaddProductメソッド、setProductQuantityメソッドを修正して、CartItemに「利用目的」情報をセットしてください。

AddCartTypeのフォームのデータをCartServiceに渡して保存するのは/src/Eccube/Controller/ProductController.phpの役割です。
おそらく下記のような記述があると思いますので、利用目的($addCartData['mokuteki'])も同時にCartServiceへ渡すように修正してください。

$app['eccube.service.cart']->addProduct($addCartData['product_class_id'], $addCartData['quantity'])->save();


以上はカートに利用目的を入れるまでですが、その後Shopping関連はOrderDetail、ShipmentItem、ShoppingServiceなど様々な修正が必要です。データベースの項目追加、定義ファイルの修正も必要です。
メールはMail/order.twigを修正することになるかと思います。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

fresh
投稿日時: 2017/2/5 16:08
対応状況: −−−
半人前
登録日: 2016/11/29
居住地:
投稿: 24
Re: EC-CUBE3:商品詳細に追加したフォームをカートに表示したい
umebius 様

umebiusさんの時間を割いてのご回答ありがとうございます。
感謝します!

いろいろやったなかでCartItem.phpにセッターゲッターを書くものやってました!
が、CartService.phpやProductController.phpにはたどり着いてませんでした。。

いじるファイルがわかっただけでかなりありがたいです。
早速、トライしてみようとおもいます!

また結果報告させていただきます。
umebius
投稿日時: 2017/2/5 17:42
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: EC-CUBE3:商品詳細に追加したフォームをカートに表示したい
はい、CartItemの__sleep()メソッドにmokuteki追加も必要ですね。
忘れておりました。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

fresh
投稿日時: 2017/2/5 18:55
対応状況: −−−
半人前
登録日: 2016/11/29
居住地:
投稿: 24
Re: EC-CUBE3:商品詳細に追加したフォームをカートに表示したい
下記のようにやってみたのですが、カートにいれるボタンをおすと500エラーになってしましました。

/src/Eccube/Entity/CartItem.php

 
   /**
     * @param  string  $mokuteki
     * @return CartItem
     */
    public function setMokuteki($mokuteki)
    {
        $this->mokuteki = $mokuteki;

        return $this;
    }

    /**
     * @return string
     */
    public function getMokuteki()
    {
        return $this-> mokuteki;
    }



/src/Eccube/Service/CartService.php
 
    /**
     *
     * @param  string $productClassId
     * @param  string $mokuteki
     * @return \Eccube\Service\CartService
     */
    public function addProduct($productClassId, $mokuteki)
    {
        $mokuteki += $this->getProductMokuteki($productClassId);
        $this->setProductMokuteki($productClassId, $mokuteki);

        return $this;
    }
    /**
     * @param  string $productClassId
     * @return integer
     */
    public function getProductMokuteki($productClassId)
    {
        $CartItem = $this->cart->getCartItemByIdentifier('Eccube\Entity\ProductClass', (string) $productClassId);
        if ($CartItem) {
            return $CartItem->getMokuteki();
        } else {
            return 0;
        }
    }
    /**
     * @param  \Eccube\Entity\ProductClass|integer $ProductClass
     * @param  string $mokuteki
     * @return \Eccube\Service\CartService
     * @throws CartException
     */
    public function setProductMokuteki($ProductClass, $mokuteki)
    {
        if (!$ProductClass instanceof ProductClass) {
            $ProductClass = $this->entityManager
                ->getRepository('Eccube\Entity\ProductClass')
                ->find($ProductClass);
            if (!$ProductClass) {
                throw new CartException('cart.product.delete');
            }
        }
        if ($ProductClass->getProduct()->getStatus()->getId() !== Disp::DISPLAY_SHOW) {
            $this->removeProduct($ProductClass->getId());
            throw new CartException('cart.product.not.status');
        }

        $productName = $ProductClass->getProduct()->getName();
        if ($ProductClass->hasClassCategory1()) {
            $productName .= " - ".$ProductClass->getClassCategory1()->getName();
        }
        if ($ProductClass->hasClassCategory2()) {
            $productName .= " - ".$ProductClass->getClassCategory2()->getName();
        }

        $CartItem = new CartItem();
        $CartItem
            ->setClassName('Eccube\Entity\ProductClass')
            ->setClassId((string) $ProductClass->getId())
            ->setMokuteki($mokuteki);

        $this->cart->setCartItem($CartItem);

        return $this;
    }



/src/Eccube/Controller/ProductController.php (2箇所ありました)


$app['eccube.service.cart']->addProduct($addCartData['product_class_id'], $addCartData['quantity'], $addCartData['mokuteki'])->save();




をやってみましたが、、
特にCartService.phpのところが、ぜんぜん違うことやっているような気がしてなりません。。
あまりにわかってなさすぎて、コードさらすのも恥ずかしいのですが。。
もう少しヒントをいただけますでしょうか。。。すみません。。。
fresh
投稿日時: 2017/2/5 18:56
対応状況: 確認中
半人前
登録日: 2016/11/29
居住地:
投稿: 24
Re: EC-CUBE3:商品詳細に追加したフォームをカートに表示したい
ありがとうございます。
こちらもいれてみます!
umebius
投稿日時: 2017/2/5 20:48
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: EC-CUBE3:商品詳細に追加したフォームをカートに表示したい
エラーの原因は
$app['eccube.service.cart']->addProduct($addCartData['product_class_id'], $addCartData['quantity'], $addCartData['mokuteki'])->save();
でaddProductに3つ変数を渡しているのに、
実際のaddProductは2つしか引数がないからではないでしょうか。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

umebius
投稿日時: 2017/2/5 20:53
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: EC-CUBE3:商品詳細に追加したフォームをカートに表示したい
なお、既にカートに同じ商品が入っているが入力された目的が違うという場合にどう処理したいかでCartServiceの書き方は異なってきます。

カートへの追加を禁止するのか、目的を上書きして個数をプラスするのか、同一商品目的違いを共存させるのか、等。

基本的にはaddProductは下記のようになると思います。



    /**
     *
     * @param  string $productClassId
     * @param  integer $quantity
     * @param  string $mokuteki
     * @return \Eccube\Service\CartService
     */
    public function addProduct($productClassId, $quantity = 1, $mokuteki = '')
    {
        $quantity += $this->getProductQuantity($productClassId, $mokuteki);
        $this->setProductQuantity($productClassId, $quantity, $mokuteki);

        return $this;
    }


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

fresh
投稿日時: 2017/2/5 21:57
対応状況: −−−
半人前
登録日: 2016/11/29
居住地:
投稿: 24
Re: EC-CUBE3:商品詳細に追加したフォームをカートに表示したい
umebius様

/cart/index.twigに ↓
{{ form_widget(form.mokuteki) }}
をいれてみたらページ自体は表示されますが、この部分はなにも表示されずダメだったので

{{ CartItem.mokuteki) }}にしてみたところ
またエラー500ではないですが
「システムエラーが発生しました。」
になってしまいました。 


>なお、既にカートに同じ商品が入っているが入力された目的が違うという場合にどう処理したいかでCartServiceの書き方は異なってきます。

ただ、何に使うのか知りたいだけで、とくにそれによって何か処理をするという目的ではないです。

他にも商品の規格で代用できないかと思ったのですが、規格関係なく購入制限を1にしたかったのですが、規格ごとに制限が1になってしまったので諦めました。
(ec-cube2だとググったらいろいろ出てきたのですが3は本当に情報が少ないですね・・)

あぁ。。本当にECCUBE3難しいです。。。
せっかくたくさんのヒントをくださっているのに、最初に質問してからずっとトライしてもまったくできそうもないです。

とりあえず、1商品しかなく制限数も1なので、購入時に会員登録するので、そこの職業のマスターデータを利用目的に変更して、入れておきました ^^;

諦めたくないですが、もうちょっと基本的なプログラムの知識がないとこのカスタマイズは厳しそうですね。。
ちょっと心が折れてきてしまいましたが、またリフレッシュして、トライしてみます。

仮にですが、umebius様のところで、今回のカスタマイズをお願いしたらいくらくらいになりますか?
よろしければPMででもお返事いただけると助かります。m(_ _)m
umebius
投稿日時: 2017/2/6 15:35
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: EC-CUBE3:商品詳細に追加したフォームをカートに表示したい
引用:
またエラー500ではないですが
「システムエラーが発生しました。」
になってしまいました。


ローカルで開発されているのでしたら、
http://xxx.com/index_dev.php/cartという形でアクセスすればエラー詳細表示されると思います。
ローカルでなければ、index_dev.phpに許可IPの設定が必要です。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
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.