バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

バグ報告 > 管理機能 > 管理画面:受注情報編集の「商品の追加」で規格がコピーされない。

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
sumida
投稿日時: 2014/7/4 22:57
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
管理画面:受注情報編集の「商品の追加」で規格がコピーされない。
管理画面:受注情報編集において

複数のお届け先がある受注情報に、「商品の追加」を行うと、
お届け情報内の商品に、規格がコピーされない。

data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php

            //届け先に選択商品がない場合
            $objProduct = new SC_Product_Ex();
            $arrAddProductInfo = $objProduct->getDetailAndProductsClass($add_product_class_id);

            $arrShipmentProducts['shipment_product_class_id'][$select_shipping_id][] = $add_product_class_id;
            $arrShipmentProducts['shipment_product_code'][$select_shipping_id][]     = $arrAddProductInfo['product_code'];
            $arrShipmentProducts['shipment_product_name'][$select_shipping_id][]     = $arrAddProductInfo['name'];
// added
            $arrShipmentProducts['shipment_classcategory_name1'][$select_shipping_id][] = $arrAddProductInfo['classcategory_name1'];
            $arrShipmentProducts['shipment_classcategory_name2'][$select_shipping_id][] = $arrAddProductInfo['classcategory_name2'];
// added
            $arrShipmentProducts['shipment_price'][$select_shipping_id][]            = $arrAddProductInfo['price02'];
            $arrShipmentProducts['shipment_quantity'][$select_shipping_id][]         = 1;


追記:
お届け先が1口の場合、非表示項目になるため、画面上見えていません。
sumida
投稿日時: 2014/7/5 10:17
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 管理画面:受注情報編集の「商品の追加」で規格がコピーされない。
これだけでは、修正不十分なようです。

規格なしの商品があるお届け先に、規格ありの商品を追加すると、
$arrShipmentProducts['shipment_classcategory_name1'][$select_shipping_id][]
での挿入位置がずれるようです。

追記:
対策は不明ですが、
事前に登録された商品が、規格なしだけであった場合、規格ありの商品を追加すると、
規格の配列の先頭になり、規格の表示位置(お届け先情報内)がずれます。
例)
おなべ(規格なし)
おなべ2(規格なし)
ここで、アイスクリーム(規格あり)を追加する。
この規格が、おなべの規格として表示されます。
red
投稿日時: 2014/7/5 13:33
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1437
Re: 管理画面:受注情報編集の「商品の追加」で規格がコピーされない。
とりあえず登録しておきました
http://svn.ec-cube.net/open_trac/ticket/2589


----------------
EC-CUBEのカスタマイズ、トラブル解決承ります
お気軽にお問い合わせ下さい
https://www.ec-cube.net/integrate/partner/partner.php?partner_id=690

sumida
投稿日時: 2014/7/5 13:41
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 管理画面:受注情報編集の「商品の追加」で規格がコピーされない。
現象としては、
画面上のshipment_itemを関数getShipmentProducts(LC_Page_Admin_Order_Edit.php)で取得しています。

        $arrShipmentProducts['shipment_classcategory_name1'] = $objFormParam->getValue('shipment_classcategory_name1');
        $arrShipmentProducts['shipment_classcategory_name2'] = $objFormParam->getValue('shipment_classcategory_name2');

ここで、規格がない商品だけの場合、以下の値が空になります。
$arrShipmentProducts['shipment_classcategory_name1'] ['shipping_id']
$arrShipmentProducts['shipment_classcategory_name2'] ['shipping_id']
そのため、最初の投稿のコードだけでは、前詰めにされ1つめの商品に規格が入ってしまいます。
とりあえず、強引ですが、修正案です。

    public function getShipmentProducts(&$objFormParam)
    {
        $arrShipmentProducts['shipment_product_class_id']    = $objFormParam->getValue('shipment_product_class_id');
        $arrShipmentProducts['shipment_product_code']        = $objFormParam->getValue('shipment_product_code');
        $arrShipmentProducts['shipment_product_name']        = $objFormParam->getValue('shipment_product_name');
        $arrShipmentProducts['shipment_classcategory_name1'] = $objFormParam->getValue('shipment_classcategory_name1');
        $arrShipmentProducts['shipment_classcategory_name2'] = $objFormParam->getValue('shipment_classcategory_name2');
        $arrShipmentProducts['shipment_price']               = $objFormParam->getValue('shipment_price');
        $arrShipmentProducts['shipment_quantity']            = $objFormParam->getValue('shipment_quantity');

        foreach ($arrShipmentProducts as $key => $value) {
            if (!is_array($value)) {
                $arrShipmentProducts[$key] = array();
            }
        }
// added
        foreach ($arrShipmentProducts as $key => $value) {
            foreach ($value as $shipping_id => $shipping_value) {
                if (empty($shipping_value)) {
                    // 内容がない場合、空の配列を作る。
                    $shipping_item = count($arrShipmentProducts['shipment_product_class_id'][$shipping_id]);
                    $arrShipmentProducts[$key][$shipping_id] = array();
                    for ($i = 0; $i < $shipping_item; $i++) {
                        $arrShipmentProducts[$key][$shipping_id][] = '';
                    }
                    break;
                }
            }
        }
// added

        return $arrShipmentProducts;
    }


本来は、getValue関数側で対応するのが正解かな?
sumida
投稿日時: 2014/7/7 15:32
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 管理画面:受注情報編集の「商品の追加」で規格がコピーされない。
原因が判明しました。
やはり、SC_FormParam.php 関数getValueが原因でした。

        if (is_array($ret)) {
            foreach ($ret as $key => $value) {
                if (SC_Utils_Ex::isBlank($ret[$key])) {
                    $ret[$key] = $default;
                }
            }
        } else {

この部分で、お届け先の商品(規格1の場合)は、
shipment_classcategory_name1[お届け先順序番号][商品順序番号]
と二次元になっている。
つまり、
$ret:[お届け先順序番号][商品順序番号]
$ret[$key]:[商品順序番号]
となります。
そのため、shipment_classcategory_name1の場合、
if (is_array($ret[$key])) {
をもう1回判断する必要があります。

追記:
汎用性を追求すれば、再帰呼び出しの構造にすべきだと思いますが。
sumida
投稿日時: 2014/7/7 15:40
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 管理画面:受注情報編集の「商品の追加」で規格がコピーされない。
修正案です。
data/class/SC_FormParam.php

    public function getValue($keyname, $default = '')
    {
        $ret = null;
        foreach ($this->keyname as $key) {
            if ($key == $keyname) {
                $ret = isset($this->arrValue[$key]) ? $this->arrValue[$key] : $this->arrDefault[$key];
                break;
            }
        }

        if (is_array($ret)) {
            foreach ($ret as $key => $value) {
// added
              if (is_array($ret[$key])) {
                foreach ($ret[$key] as $key2 => $value2) {
                  if (SC_Utils_Ex::isBlank($ret[$key][$key2])) {
                      $ret[$key][$key2] = $default;
                  }
                }
              } else {
// added
                if (SC_Utils_Ex::isBlank($ret[$key])) {
                    $ret[$key] = $default;
                }
// added
              }
// added
            }
        } else {
            if (SC_Utils_Ex::isBlank($ret)) {
                $ret = $default;
            }
        }

        return $ret;
    }


data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php

            //届け先に選択商品がない場合
            $objProduct = new SC_Product_Ex();
            $arrAddProductInfo = $objProduct->getDetailAndProductsClass($add_product_class_id);

            $arrShipmentProducts['shipment_product_class_id'][$select_shipping_id][] = $add_product_class_id;
            $arrShipmentProducts['shipment_product_code'][$select_shipping_id][]     = $arrAddProductInfo['product_code'];
            $arrShipmentProducts['shipment_product_name'][$select_shipping_id][]     = $arrAddProductInfo['name'];
// added
            $arrShipmentProducts['shipment_classcategory_name1'][$select_shipping_id][] = $arrAddProductInfo['classcategory_name1'];
            $arrShipmentProducts['shipment_classcategory_name2'][$select_shipping_id][] = $arrAddProductInfo['classcategory_name2'];
// added
            $arrShipmentProducts['shipment_price'][$select_shipping_id][]            = $arrAddProductInfo['price02'];
            $arrShipmentProducts['shipment_quantity'][$select_shipping_id][]         = 1;
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は70,564名です
総投稿数は100,706件です

投稿数ランキング

1
seasoft
7333
2
468
2922
3
AMUAMU
2712
4
nanasess
2127
5
umebius
1935
6
yuh
1612
7
red
1437
8
h_tanaka
1076
9
tsuji
926
10
fukap
907
11
shutta
835
12
tao_s
793
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.