バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 会員登録画面で追加した項目を、買い物時にdtb_orderへ格納させたい

フロント機能

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kanaryo
投稿日時: 2014/3/10 10:10
対応状況: 解決済
常連
登録日: 2011/10/18
居住地:
投稿: 66
Re: 会員登録画面で追加した項目を、買い物時にdtb_orderへ格納させたい
yuh様

返信が遅れてしまい、大変申し訳ございません。

いけました!出来ました!!

前回に続いて懇切・丁寧に最後までご対応下さり、
感動いたしております。
ファイルまで作成下さったとのこと、恐縮至極に存じます。

感謝の意を活字でしか表現出来なくて歯がゆいのですが、
本当にありがとうございました。

また機会がございましたら、
何卒宜しくお願い申し上げます。m(__)m


yuh
投稿日時: 2014/3/7 23:12
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 会員登録画面で追加した項目を、買い物時にdtb_orderへ格納させたい
すいません。
思いっきりバージョンが間違えてました。
2.11.4が無かったので2.11.5でためしに作ってみました。

家に帰ってきてためしに作ってみたので下記に変更部分記載します。

SC_Helper_PurchaseのcopyFromCustomerを下記に変更

    function copyFromCustomer(&$dest, &$objCustomer, $prefix = 'order',
                              $keys = array('name01', 'name02', 'kana01', 'kana02',
                                            'sex', 'zip01', 'zip02', 'pref',
                                            'addr01', 'addr02',
                                            'tel01', 'tel02', 'tel03', 'job',
                                            'birth', 'email')) {
        if ($objCustomer->isLoginSuccess(true)) {

            foreach ($keys as $key) {
                if (in_array($key, $keys)) {
                    $dest[$prefix . '_' . $key] = $objCustomer->getValue($key);
                }
            }

            if ((SC_Display_Ex::detectDevice() == DEVICE_TYPE_MOBILE)
                && in_array('email', $keys)
            ) {
                $email_mobile = $objCustomer->getValue('email_mobile');
                if (empty($email_mobile)) {
                    $dest[$prefix . '_email'] = $objCustomer->getValue('email');
                } else {
                    $dest[$prefix . '_email'] = $email_mobile;
                }
            }
            $dest['tuika'] = $objCustomer->getValue('tuika');
            $dest['tuika2'] = $objCustomer->getValue('tuika2');
            $dest['tuika3'] = $objCustomer->getValue('tuika3');
            $dest['customer_id'] = $objCustomer->getValue('customer_id');
            $dest['update_date'] = 'CURRENT_TIMESTAMP';
        }
    }

LC_Page_ShoppingのlfRegistDataを下記に変更

    function lfRegistData($uniqid, &$objPurchase, &$objCustomer, &$objFormParam,
                          $isMultiple = false) {
        $arrParams = $objFormParam->getHashArray();
        $arrValues = $objFormParam->getDbArray();
        // 登録データの作成
        $arrValues['order_birth'] = SC_Utils_Ex::sfGetTimestamp($arrParams['year'], $arrParams['month'], $arrParams['day']);
        $arrValues['update_date'] = 'CURRENT_TIMESTAMP';
        $arrValues['customer_id'] = '0';

        // お届け先を指定しない場合、
        if ($arrParams['deliv_check'] != '1') {
            // order_* を shipping_* へコピー
            $objPurchase->copyFromOrder($arrValues, $arrParams);
        }

        /*
         * order_* と shipping_* をそれぞれ $_SESSION['shipping'][$shipping_id]
         * に, shipping_* というキーで保存
         */
        foreach ($arrValues as $key => $val) {
            if (preg_match('/^order_/', $key)) {
                $arrOrder['shipping_' . str_replace('order_', '', $key)] = $val;
            } elseif (preg_match('/^shipping_/', $key)) {
                $arrShipping[$key] = $val;
            }
        }

        if ($isMultiple) {
            $objPurchase->saveShippingTemp($arrOrder, 0);
            if ($arrParams['deliv_check'] == '1') {
                $objPurchase->saveShippingTemp($arrShipping, 1);
            }
        } else {
            if ($arrParams['deliv_check'] == '1') {
                $objPurchase->saveShippingTemp($arrShipping, 0);
            } else {
                $objPurchase->saveShippingTemp($arrOrder, 0);
            }
        }
		$arrValues['tuika'] = $objFormParam->getValue('tuika');
		$arrValues['tuika2'] = $objFormParam->getValue('tuika2');
		$arrValues['tuika3'] = $objFormParam->getValue('tuika3');
        $objPurchase->saveOrderTemp($uniqid, $arrValues, $objCustomer);
    }
    
    

LC_Page_ShoppingのlfInitParamに下記を追加

    function lfInitParam(&$objFormParam) {
        $objFormParam->addParam("追加データ", "tuika", INT_LEN, 'n', array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
		$objFormParam->addParam("追加データ", "tuika2", INT_LEN, 'n', array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
		$objFormParam->addParam("追加データ", "tuika3", INT_LEN, 'n', array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));

上記3箇所とテンプレート周りの追加でできました。
思いっきりバージョンを勘違いして混乱させてすみません。

メールを送ってもらえればこちらで作ったファイルを送ります。
kanaryo
投稿日時: 2014/3/7 19:13
対応状況: −−−
常連
登録日: 2011/10/18
居住地:
投稿: 66
Re: 会員登録画面で追加した項目を、買い物時にdtb_orderへ格納させたい
yuh様

本当にお手数をおかけしてすみません。
試してみましたが、非ログイン時/ログイン時ともにシステムエラーとなり買い物が終了いたしません。

エラーログ?は非ログイン時、
エラーログ?はログイン時のもです。
検証願えますでしょうか・・・。

エラーログ?

USER_AGENT: Mozilla/5.0 (Windows NT 6.1; rv:27.0) Gecko/20100101 Firefox/27.0

SQL: SELECT sess_data FROM dtb_session WHERE sess_id = ?

MDB2 Error: connect failed

_doConnect: [Error message: unable to establish a connection]
[Native message: ]


/virtual/www/eccube/html/test/html/resize_image.php 25:require_once
/virtual/www/eccube/html/test/html/require.php 36:require_once
/virtual/www/eccube/html/test/data/require_base.php 48:SC_SessionFactory_UseCookie->initSession
/virtual/www/eccube/html/test/data/class/session/sessionfactory/SC_SessionFactory_UseCookie.php 55:session_start
:SC_Helper_Session->sfSessRead
/virtual/www/eccube/html/test/data/class/helper/SC_Helper_Session.php 68:SC_Query->select
/virtual/www/eccube/html/test/data/class/SC_Query.php 150:SC_Query->getAll
/virtual/www/eccube/html/test/data/class/SC_Query.php 262:SC_Query->prepare
/virtual/www/eccube/html/test/data/class/SC_Query.php 873:MDB2_Driver_pgsql->prepare
/virtual/www/eccube/html/test/data/module/MDB2/Driver/pgsql.php 956:MDB2_Driver_Common->getConnection
/virtual/www/eccube/html/test/data/module/MDB2.php 1792:MDB2_Driver_pgsql->connect
/virtual/www/eccube/html/test/data/module/MDB2/Driver/pgsql.php 484:MDB2_Driver_pgsql->_doConnect
/virtual/www/eccube/html/test/data/module/MDB2/Driver/pgsql.php 438:MDB2_Driver_Common->raiseError
/virtual/www/eccube/html/test/data/module/MDB2.php 1497:PEAR->raiseError
/virtual/www/eccube/html/test/data/module/PEAR.php 557:MDB2_Error->MDB2_Error
/virtual/www/eccube/html/test/data/module/MDB2.php 1009:PEAR_Error->PEAR_Error
from 219.102.213.207
2014/03/07 18:59:56 [/virtual/www/eccube/html/test/data/class/helper/SC_Helper_Purchase.php:318] FATAL Error: Call to a member function isLoginSuccess() on a non-object from 219.102.213.207

*****************************************************
エラーログ?

SERVER_ADDR: 203.137.26.35
REMOTE_ADDR: 219.102.213.207
USER_AGENT: Mozilla/5.0 (Windows NT 6.1; rv:27.0) Gecko/20100101 Firefox/27.0

SQL: SELECT sess_data FROM dtb_session WHERE sess_id = ?

MDB2 Error: connect failed

_doConnect: [Error message: unable to establish a connection]
[Native message: ]


/virtual/www/eccube/html/test/html/resize_image.php 25:require_once
/virtual/www/eccube/html/test/html/require.php 36:require_once
/virtual/www/eccube/html/test/data/require_base.php 48:SC_SessionFactory_UseCookie->initSession
/virtual/www/eccube/html/test/data/class/session/sessionfactory/SC_SessionFactory_UseCookie.php 55:session_start
:SC_Helper_Session->sfSessRead
/virtual/www/eccube/html/test/data/class/helper/SC_Helper_Session.php 68:SC_Query->select
/virtual/www/eccube/html/test/data/class/SC_Query.php 150:SC_Query->getAll
/virtual/www/eccube/html/test/data/class/SC_Query.php 262:SC_Query->prepare
/virtual/www/eccube/html/test/data/class/SC_Query.php 873:MDB2_Driver_pgsql->prepare
/virtual/www/eccube/html/test/data/module/MDB2/Driver/pgsql.php 956:MDB2_Driver_Common->getConnection
/virtual/www/eccube/html/test/data/module/MDB2.php 1792:MDB2_Driver_pgsql->connect
/virtual/www/eccube/html/test/data/module/MDB2/Driver/pgsql.php 484:MDB2_Driver_pgsql->_doConnect
/virtual/www/eccube/html/test/data/module/MDB2/Driver/pgsql.php 438:MDB2_Driver_Common->raiseError
/virtual/www/eccube/html/test/data/module/MDB2.php 1497:PEAR->raiseError
/virtual/www/eccube/html/test/data/module/PEAR.php 557:MDB2_Error->MDB2_Error
/virtual/www/eccube/html/test/data/module/MDB2.php 1009:PEAR_Error->PEAR_Error
from 219.102.213.207
2014/03/07 19:03:25 [/virtual/www/eccube/html/test/data/class/helper/SC_Helper_Purchase.php:318] FATAL Error: Call to a member function isLoginSuccess() on a non-object from 219.102.213.207

見たところ同じ内容のエラーの様に思えますが、もはや頭の中がチンプンカンプンです。
よろしくお願いいたします。
yuh
投稿日時: 2014/3/7 18:43
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 会員登録画面で追加した項目を、買い物時にdtb_orderへ格納させたい
ぱっとテストしてみました。
SC_Helper_PurchaseのsaveOrderTempを
    function saveOrderTemp($uniqId, $params, &$objCustomer = NULL) {
        if (SC_Utils_Ex::isBlank($uniqId)) {
            return;
        }

        $params['device_type_id'] = SC_Display_Ex::detectDevice();
        $objQuery =& SC_Query_Ex::getSingletonInstance();
        // 存在するカラムのみを対象とする
        $cols = $objQuery->listTableFields('dtb_order_temp');
        $sqlval = array();
        foreach ($params as $key => $val) {
            if (in_array($key, $cols)) {
                $sqlval[$key] = $val;
            }
        }
        $sqlval['session'] = serialize($_SESSION);
        if (!empty($objCustomer) AND $objCustomer->isLoginSuccess(true)) {
            // 注文者の情報を常に最新に保つ
            $this->copyFromCustomer($sqlval, $objCustomer);
        }
		
		if($objCustomer->isLoginSuccess(true)){
			$sqlval['tuika'] = $objCustomer->getValue('tuika');
			$sqlval['tuika2'] = $objCustomer->getValue('tuika2');
			$sqlval['tuika3'] = $objCustomer->getValue('tuika3');
		}else{
			if(!empty($params['tuika']) AND !empty($params['tuika2']) AND !empty($params['tuika3'])){
				$sqlval['tuika']  = $params['tuika'];
				$sqlval['tuika2'] = $params['tuika2'];
				$sqlval['tuika3'] = $params['tuika3'];
			}
		}
        $exists = $this->getOrderTemp($uniqId);
        if (SC_Utils_Ex::isBlank($exists)) {
            $sqlval['order_temp_id'] = $uniqId;
            $sqlval['create_date'] = 'CURRENT_TIMESTAMP';
            $objQuery->insert('dtb_order_temp', $sqlval);
        } else {
            $objQuery->update('dtb_order_temp', $sqlval, 'order_temp_id = ?', array($uniqId));
        }
		
    }


こんな感じに変更してみてください。
kanaryo
投稿日時: 2014/3/7 17:26
対応状況: −−−
常連
登録日: 2011/10/18
居住地:
投稿: 66
Re: 会員登録画面で追加した項目を、買い物時にdtb_orderへ格納させたい
yuh様

やはりログイン時は値が入るのですが、非ログイン時の値がdtb_orderへ格納されません。

ファイルの修正状況は以下です。
※3つの項目を追加しているので一部修正しています。

LC_Page_Shopping.phpのlfRegistDataの

$objPurchase->saveOrderTemp($uniqid, $arrValues, $objCustomer);
の部分を

$arrValues['tuika'] = $objFormParam->getValue('tuika');
$arrValues['tuika2'] = $objFormParam->getValue('tuika2');
$arrValues['tuika3'] = $objFormParam->getValue('tuika3');
$objPurchase->saveOrderTemp($uniqid, $arrValues, $objCustomer);

lfInitParamを
function lfInitParam(&$objFormParam) {
$objFormParam->addParam("赤", "tuika", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK"));
$objFormParam->addParam("赤2", "tuika2", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK"));
$objFormParam->addParam("赤3", "tuika3", INT_LEN, 'n', array("MAX_LENGTH_CHECK", "NUM_CHECK"));

***************************************************************
SC_Helper_Purchase.phpのsaveOrderTempの

$objQuery->update('dtb_order_temp', $sqlval, 'order_temp_id = ?', array($uniqId));
の部分を

if(!is_null($objCustomer) AND is_object($objCustomer)){
$sqlval['tuika'] = $objCustomer->getValue('tuika');
$sqlval['tuika2'] = $objCustomer->getValue('tuika2');
$sqlval['tuika3'] = $objCustomer->getValue('tuika3');
}
$objQuery->update('dtb_order_temp', $sqlval, 'order_temp_id = ?', array($uniqId));

としています。
これでdtb_orderのtuikaフィールドへ、
ログイン時は値が格納され、非ログイン時は格納されません。
どこがいけないのでしょうか(T_T)
yuh
投稿日時: 2014/3/7 16:52
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 会員登録画面で追加した項目を、買い物時にdtb_orderへ格納させたい
非ログイン状態は
LC_Page_Shopping.phpのlfRegistDataの



        $objPurchase->saveOrderTemp($uniqid, $arrValues, $objCustomer);

の部分を

$arrValues['tuika'] = $objFormParam->getValue('tuika');
        $objPurchase->saveOrderTemp($uniqid, $arrValues, $objCustomer);

このように追加して、


lfInitParamにtuikaを追加すればおそらくパラメータが通るはずです。
kanaryo
投稿日時: 2014/3/7 16:23
対応状況: −−−
常連
登録日: 2011/10/18
居住地:
投稿: 66
Re: 会員登録画面で追加した項目を、買い物時にdtb_orderへ格納させたい
yuh様

仮構築環境が無い中でアドバイス下さり、こちらこそ申し訳ありません。

早速試してみたところ、ログイン時の買い物においてシステムエラーは出なくなり買い物も完了。
dtb_orderのtuikaフィールドにも値が格納されるようになりました。

しかし、今度は非ログイン時が上手くいきません。。
エラーは出ずに買い物は完了するのですが、申し込みフォーム上で入力するtuikaの値がdtb_orderへ格納出来なくなりました。

この修正の前は非ログイン時は問題なく値が格納されていて、ログイン時がエラーだったのですが・・・。

環境が整ってからでも構いませんので、引き続きのご教示を宜しくお願いいたします。m(__)m
yuh
投稿日時: 2014/3/7 15:12
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 会員登録画面で追加した項目を、買い物時にdtb_orderへ格納させたい
copyFromCustomerに追加した部分を削除して、
SC_Helper_Purchase.phpのsaveOrderTempの
$objQuery->update('dtb_order_temp', $sqlval, 'order_temp_id = ?', array($uniqId));

の部分を

			if(!is_null($objCustomer) AND is_object($objCustomer)){
				$sqlval['tuika'] =  $objCustomer->getValue('tuika');
			}
            $objQuery->update('dtb_order_temp', $sqlval, 'order_temp_id = ?', array($uniqId));

に変更でどうでしょうか?

家に帰ったら仮で構築して作れるんですが、今の所は多分こんな感じでとしか答えられずすみません。
kanaryo
投稿日時: 2014/3/7 14:32
対応状況: −−−
常連
登録日: 2011/10/18
居住地:
投稿: 66
Re: 会員登録画面で追加した項目を、買い物時にdtb_orderへ格納させたい
yuh様

dtb_order、dtb_order_temp両方をtuikaフィールド名で統一し、
ログイン時に買い物を試みましたが、deliv.php画面から次の画面へ遷移する時点でシステムエラーになりました。

ログは先ほどと同じだと思いますが一応下記の通りです。
SQL: INSERT INTO dtb_order_temp(customer_id,update_date,device_type_id,session,order_name01,order_name02,order_kana01,order_kana02,order_sex,order_zip01,order_zip02,order_pref,order_addr01,order_addr02,order_tuika,order_tel01,order_tel02,order_tel03,order_job,order_birth,order_email,order_temp_id,create_date) VALUES (?,CURRENT_TIMESTAMP,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP)

MDB2 Error: no such field

prepare: [Error message: Unable to create prepared statement handle]
[Last executed query: SELECT email FROM dtb_customer WHERE customer_id = $1 ]
[Native message: ERROR: column "order_tuika" of relation "dtb_order_temp" does not exist
LINE 1: ...,order_zip02,order_pref,order_addr01,order_addr02,order_tuik...

※SC_Helper_Purchase.phpのcopyFromCustomerには 'tuika' を追記しています。

※deliv.tplには<!--{if $arrAddr[cnt].tuika == 1}-->赤<!--{/if}-->
で記述しているので、/@@@/deliv.php画面ではdtb_customerに値があれば表示されます。

お手数ですが、よろしくお願いいたします。
yuh
投稿日時: 2014/3/7 13:53
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 会員登録画面で追加した項目を、買い物時にdtb_orderへ格納させたい
多分
dtb_order,dtb_order_temp両方にtuikaフィールドを追加するか、
dtb_order,dtb_order_temp両方にorder_tuikaフィールドを追加するかのどちらかに合わせた方がいいと思います。

dtb_order,dtb_order_temp両方にtuikaフィールドを追加する場合、
ログイン時の配送先もしくは支払方法の部分に入力フィールドを追加して、会員情報からそのフィールドにデータを入れる感じで、

dtb_order,dtb_order_temp両方にorder_tuikaフィールドを追加する場合、tuikaという名前をorder_tuikaに変更して、パラメータをorder_tempに保存できるようにする感じです。

現状仕様がログイン時と非ログイン時で別れている為、どちらかに合わせた方がいいと思います。

手っ取り早いのは両方admin/order/edit.phpに表示させてしまうのが簡単と思いますが。


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


 



ログイン


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

統計情報

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

投稿数ランキング

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.