バージョン選択

フォーラム

メニュー

オンライン状況

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

PR

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

サイト内検索

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

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2017/3/14 17:03
対応状況: 解決済
一人前
登録日: 2016/7/22
居住地: 愛媛県
投稿: 102
拡張したカート情報がセッションに保存されない
[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
投稿: 452
Re: 拡張したカート情報がセッションに保存されない
どのように拡張されたのでしょうか?
CartServiceやCartItemなどをきちんとカスタマイズすれば保存されますよ。


----------------
//////////////////////////////
(株)U-Mebius EC-CUBE3 カスタマイズ・高速化 ・バグ修正
気軽にお問い合わせください。

h_tanaka
投稿日時: 2017/3/14 17:45
対応状況: −−−
一人前
登録日: 2016/7/22
居住地: 愛媛県
投稿: 102
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
居住地:
投稿: 44
Re: 拡張したカート情報がセッションに保存されない
想像するに、CartItemの__sleepメソッドで追加情報を保持していないのでは?


----------------
エンジニアです!
ECCUBEのカスタマイズやプラグイン開発に専念しています。ご相談ください。

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

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

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

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

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


----------------
エンジニアです!
ECCUBEのカスタマイズやプラグイン開発に専念しています。ご相談ください。

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

 

ログイン


EC-CUBEペイメント

統計情報

総メンバー数は19,144名です
総投稿数は79,982件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1618
4
yuh
1313
5
red
1030
6
fukap
907
7
shutta
827
8 ramrun 789
9
tsuji
778
10
tao_s
646


ネットショップの壺

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