バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > GET でカゴに商品を追加したい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
mirageSE
投稿日時: 2009/1/29 19:02
対応状況: −−−
新米
登録日: 2009/1/29
居住地: 大阪
投稿: 3
GET でカゴに商品を追加したい
初めまして。mirageSEです。
EC CUBE 2.0 系についての質問です。

GET を用いてカゴに商品を追加出来るようにしたいと考えています。

商品 ID と数量を含んだ URL にアクセスするだけで、
買い物カゴに、その情報で商品が入るようにしたいです。

(実現したい動き : 例)
http://www.example.com/cart/index.php?product_id=10&quantity=5

この URL にアクセスすると、買い物カゴに
商品 ID が 10 の商品が 5 個投入される。


通常の購入遷移では、
商品詳細ページから「カゴに入れる」を押すと、
product_id、quantity、mode がPOSTで送信されるようです。

しかし、GET でこれらの値を送り、
なおかつ、LC_Page_Products_Detail_Ex において
全ての $_POST を $_REQUEST に変えた状態にしても
カートに商品が投入されません。

(「※ 現在カート内に商品はございません。」というエラーになります。)


ただ、一度通常の方法(商品詳細ページからのPOST)で
商品をカゴに一つでも投入した後であれば、
http://www.example.com/cart/index.php?product_id=10&quantity=5
にアクセスすることで商品が投入されました。


一昨日から考えているのですが、
どうしても詰まってしまい、
何かヒントになればと思い書き込みさせて頂きました。

ご教授いただければ幸いです。
宜しくお願いします。
homan
投稿日時: 2009/1/29 20:23
対応状況: −−−
仙人
登録日: 2007/7/2
居住地: 宮崎県宮崎市
投稿: 633
Re: GET でカゴに商品を追加したい
詳細ページのソースを追っかければわかりますが、かごに入れる際は詳細ページの"cart"というmodeでswitch文を通過し、セッションに登録されてからカートの中のページへ移動しているようです。
(つまり、カートの中の商品は購入完了までセッションで管理されている)

カート側に同じ仕組みをGETで受け取れるようにカスタマイズしてやれば、なんだか出来そうな気がします。


----------------
このコミュニティでの投稿はボランティアの範囲に留めさせていただいています。個別の相談やカスタマイズは有償にて承っておりますのでご相談下さい。

[url=http://www.eccube-school.jp/]EC-CUBE

seasoft
投稿日時: 2009/1/29 22:18
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: GET でカゴに商品を追加したい
引用:

http://www.example.com/cart/index.php?product_id=10&quantity=5

この URL にアクセスすると、買い物カゴに
商品 ID が 10 の商品が 5 個投入される。


通常の購入遷移では、
商品詳細ページから「カゴに入れる」を押すと、
product_id、quantity、mode がPOSTで送信されるようです。


URL に mode を付加していないのが原因とか?


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

mirageSE
投稿日時: 2009/1/30 10:58
対応状況: −−−
新米
登録日: 2009/1/29
居住地: 大阪
投稿: 3
Re: GET でカゴに商品を追加したい
すみません、説明不足でした…。

商品詳細ページが商品詳細ページにPOSTしているものと
同じパラメータを送信しているつもりなのですが、
うまくカートに商品が入らないのです。

少しソースを載せてみます。

==============================================
=== LC_Page_Cart_Ex.php
==============================================

  function process() {
    
// parent::process();
    
global $objCampaignSess;

    
$objView = new SC_SiteView(false);
    
$objCartSess = new SC_CartSession("", false);
    
$objSiteSess = new SC_SiteSession();
    
$objCampaignSess = new SC_CampaignSession();
    
$objSiteInfo = $objView->objSiteInfo;
    
$objCustomer = new SC_Customer();
    
$db = new SC_Helper_DB_Ex();
    
$objQuery = new SC_Query();

    
// 基本情報の取得
    
$arrInfo = $objSiteInfo->data;

    
// 商品購入中にカート内容が変更された。
    
if($objCartSess->getCancelPurchase()) {
      
$this->tpl_message = "商品購入中にカート内容が変更されましたので、お手数ですが購入手続きをやり直して下さい。";
    }

    if (!empty(
$_REQUEST['product_id']) && empty($_REQUEST['mode'])) {
      
$query = array();
      
$query['product_id'] = $_REQUEST['product_id'];  // 商品 ID
      $query['quantity'] = 1;   // 個数
      
$query['mode'] = 'cart';  // カートモードで送信
      
header("Location: " . SITE_URL . "products/detail.php?" . http_build_query($query));
      return
0;
    }

    
// (後略)




==============================================
=== LC_Products_Detail_Ex.php
==============================================

  function process() {
    // parent::process();

    // (中略)

    
switch($_REQUEST['mode']) {
      case
'cart':
        
$objCartSess = new SC_CartSession("");

        
// 入力値の変換
        
$this->objFormParam->convParam();
        
$this->arrErr = $this->lfCheckError();

    
// (中略)

        
$objCartSess->addProduct(array($_REQUEST['product_id'], $classcategory_id1, $classcategory_id2), $this->objFormParam->getValue('quantity'));
        
$this->sendRedirect($this->getLocation(URL_CART_TOP));
        break;
    }

    
// (後略)

  




products/detail.php からカートにリダイレクトする部分、
$this->sendRedirect($this->getLocation(URL_CART_TOP));

の行の手前で $_SESSION の中身を出力してみると、
以下のようになっていました。

Array
(
  [cart] => Array
    (
      [1] => Array
        (
          [id] => Array
            (
              [0] => 10
              [1] => 1
              [2] => 0
            )
          [quantity] => 1
          [cart_no] => 1
        )
    )
)


しかしその後 sendRedirect でカート(cart/index.php) にリダイレクトすると、
「※ 現在カート内に商品はございません。」という
エラーメッセージが表示されてしまいます。

なぜじゃ…orz

mirageSE
投稿日時: 2009/2/2 12:04
対応状況: −−−
新米
登録日: 2009/1/29
居住地: 大阪
投稿: 3
Re: GET でカゴに商品を追加したい
sendRedirect すると セッションIDが変わるとか、
そういうことってありますか?

あと、普通に商品を購入しようとした場合は、
SC_SiteSession で作られるような
[site] キーもセッションに保存されるはずなのですが、
なぜか、ここには保存されていないのです…。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,873名です
総投稿数は110,000件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1295
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.