バージョン選択

フォーラム

メニュー

オンライン状況

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

PR

デザインテンプレート EC-CUBE3.0版が登場!
広告掲載について

サイト内検索

質問 > フロント機能 > 拡張したカート情報がセッションに保存されない

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2017/3/14 17:03
対応状況: 解決済
長老
登録日: 2016/7/22
居住地: 愛媛県
投稿: 189
拡張したカート情報がセッションに保存されない
[EC-CUBE] EC-CUBE3.0.13
[レンタルサーバ] localhost
[OS] macOS Sierra 10.12.3
[PHP] PHP5.6.10
[データベース] MySQL5.5.42
[WEBサーバ] MAMP3.5
[ブラウザ] GoogleChrome 56.0.2924.87 (64-bit)
[カスタマイズ] ハードコーディング
[現象]
独自にカート情報を拡張したのですが、セッションに保存されません。
セッションに保存するためになにか特別な処理が必要なのでしょうか?

src/Eccube/Service/CartService.php
function setProductQuantity() にて$this->cartに情報を追加しました。

商品をカートに入れた直後の処理でセッションに保存されていることを確認しました。
src/Eccube/Controller/ProductController.php

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


リダイレクト後のカートページにてセッション内のカートに拡張情報が保存されておらずnullになっていることを確認しました。
src/Eccube/Controller/CartController.php

$Cart = $app['eccube.service.cart']->getCart();
var_dump($Cart);
die;
umebius
投稿日時: 2017/3/14 17:06
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: Tokyo
投稿: 670
Re: 拡張したカート情報がセッションに保存されない
どのように拡張されたのでしょうか?
CartServiceやCartItemなどをきちんとカスタマイズすれば保存されますよ。


----------------
//////////////////////////////
(株)U-Mebius EC-CUBE3 カスタマイズ・高速化 ・バグ修正
EC-CUBE関連技術者の採用もお問い合わせください。


h_tanaka
投稿日時: 2017/3/14 17:45
対応状況: −−−
長老
登録日: 2016/7/22
居住地: 愛媛県
投稿: 189
Re: 拡張したカート情報がセッションに保存されない
umebius様、ご返信ありがとうございます。
全部書き出すと長文になりますので、省略して書きます。

カート追加フォーム
src/Eccube/Form/Type/AddCartType.php
            $builder->add('item0', 'choice', array(
                'label' => '拡張',
                'required' => true,
                'choices' => array('__unselected' => '選択してください') + ['1', '2'],
            ));


カートコントローラー:カートに追加
src/Eccube/Controller/ProductController.php
             $app['eccube.service.cart']->addProduct($addCartData['product_class_id'], $addCartData['quantity'],  $addCartData['item0'])->save();


カートサービス
src/Eccube/Service/CartService.php
    addProduct()内
        $this->setProductQuantity($productClassId, $quantity, $Choice);

    setProductQuantity()内
        if (!is_null($Choice)) {
            $CartItem->setChoice($Choice);
        }


カートアイテムエンティティ
src/Eccube/Entity/CartItem.php
    private $Choice;
    public function setChoice($Choice)
    {
        $this->Choice = $Choice;
        return $this;
    }


カートコントローラー:表示
src/Eccube/Controller/CartController.php
        $Cart = $app['eccube.service.cart']->getCart();


カート表示
src/Eccube/Resource/template/default/Cart/index.twig
         {% set Choice = CartItem.Choice %}
aoki.u
投稿日時: 2017/3/14 17:56
対応状況: −−−
常連
登録日: 2017/2/19
居住地:
投稿: 52
Re: 拡張したカート情報がセッションに保存されない
想像するに、CartItemの__sleepメソッドで追加情報を保持していないのでは?


----------------
ECCUBE3系のインテグレートパートナーとして
カスタマイズやプラグイン開発に専念しています。
ぜひご相談ください。

h_tanaka
投稿日時: 2017/3/14 18:09
対応状況: −−−
長老
登録日: 2016/7/22
居住地: 愛媛県
投稿: 189
Re: 拡張したカート情報がセッションに保存されない
aoki.u様

まさにそのとおりでした!
CartItemの__sleep()に追加することで解決しました。

この__sleep()ってなにものなんでしょうか...?
aoki.u
投稿日時: 2017/3/14 18:14
対応状況: −−−
常連
登録日: 2017/2/19
居住地:
投稿: 52
Re: 拡張したカート情報がセッションに保存されない

CartItemはシリアライズされてセッションに保存されますので。

http://ir2.php.net/manual/ja/oop4.magic-functions.php


----------------
ECCUBE3系のインテグレートパートナーとして
カスタマイズやプラグイン開発に専念しています。
ぜひご相談ください。

h_tanaka
投稿日時: 2017/3/14 18:21
対応状況: −−−
長老
登録日: 2016/7/22
居住地: 愛媛県
投稿: 189
Re: 拡張したカート情報がセッションに保存されない
うーん、、まったく理解できないです。
決まり文句と思って実装します。
ありがとうございました!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

 



ログイン


EC-CUBEガイドブック

統計情報

総メンバー数は19,366名です
総投稿数は81,313件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1619
4
yuh
1326
5
red
1049
6
fukap
907
7
shutta
827
8 ramrun 789
9
tsuji
778
10
umebius
670
11
tao_s
646
12 sumida 637
13
homan
633
14 karin 609
15 DELIGHT 571
16
468
536
17
patapata
502
18
flealog
483
19 tonton 436
20
ecbg
387


ネットショップの壺

EC-CUBEガイドブック
Copyright© LOCKON CO.,LTD. All Rights Reserved.