バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 注文番号にプレフィックスをつける

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
osamuya
投稿日時: 2013/2/7 12:56
対応状況: −−−
常連
登録日: 2013/2/4
居住地: 東京
投稿: 65
注文番号にプレフィックスをつける
お世話になります。

注文番号がDBテーブルのオートインクリメントで自動的に割り振られていることから1からの連番になっているかと思います。この注文番号に関してたくさんの記事を読みましたが、1000からの連番を振ることは容易にできるかと思いますが、prefixをつけて(例えば、「ECCUBE-10000」のような…)連番を振るということはできないでしょうか?
そもそも、DBの機能で注文番号を生成しているので、できればMySQLで操作できる範囲が自分でもよいかと思っています。が、テーブルの性質上連番に対して文字列を付加するのは不可能でしょうか?
もし何らかのプレフィックスを使うとなると、PHPクラスの方で生成してDBに登録し直す…のような作業が必要でしょうか?

いろいろ探っているのですが、全くよいアイディアが浮かばず、またそれらを操作するファイルやソースを見つけられず…という感じです。

もし詳しい方いましたら、ご教授願いいます。
よろしくお願いいたします。
DELIGHT
投稿日時: 2013/2/7 13:20
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: 注文番号にプレフィックスをつける
prefixをどれくらいの範囲で使うのかによりますが、
一部の機能で使うだけでしたら、

$arrOrder['fixed_id'] = sprintf('ECCUBE-%d', $arrOrder['order_id']);
//ECCUBE-1
$arrOrder['fixed_id'] = sprintf('ECCUBE-%05d', $arrOrder['order_id']);
//ECCUBE-00001

のようにすれば、DBを変更することなくprefixが付けられます。

もしDBにデータを持たせたいとお考えでしたら、
order_idはINTEGERなので新しいTEXTフィールドを作成した上で、
これまでの注文に関してはSQLでサブクエリを利用してUPDATEし、
これからの注文に関してはSC_Helper_Purchase::registerOrder()内で処理する、
などはどうでしょう。


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

osamuya
投稿日時: 2013/2/7 15:03
対応状況: −−−
常連
登録日: 2013/2/4
居住地: 東京
投稿: 65
Re: 注文番号にプレフィックスをつける
DELIGHTさん、いつもありがとうございます。先日もお世話になりました。
専ら勉強中です。

できればDBにきちんとプレフィックスをもたせたいと考えていますが、今しがたSC_Helper_Purchase.phpの中身を確認しましたが、EC-CUBE初心者の私にはやや敷居が高い感じがしております。(わかるようになれば出来そうが気がするのですが。)

プレフィックスを抜いた注文番号の値がDBに登録されているというように、運用でルールを決めたおけば、一部の機能でも十分やってゆけるかな…と思っております。
ただ、私も注文番号自体がどの範囲でシステムとして動いているのかまだはっきりとわかっていないのですが、注文完了後のメールなどにプレフィックスが付加できればと思っています。(もしかしたら、その他の部分にも必要になってくるかもしれません。。。。)


書いていただいた、
$arrOrder['fixed_id'] = sprintf('ECCUBE-%d', $arrOrder['order_id']);
//ECCUBE-1
または
$arrOrder['fixed_id'] = sprintf('ECCUBE-%05d', $arrOrder['order_id']);
//ECCUBE-00001
は、ソース上のどのあたりに書けばよいでしょうか?
注文番号を扱っているファイルや関数がわかればよいのですが、如何せんどこなのかまだ探せないでいるところです。

トライ&エラーで少々おかしくなってもよいのでテストしてみたいと思っていますので、何かアドバイス頂けたらと思います。
よろしくお願いします。


ゲスト
投稿日時: 2013/2/7 15:58
対応状況: −−−
Re: 注文番号にプレフィックスをつける
下部、署名内のurlの中の「名古屋ユーザーグループ」内に、
プレゼン資料と、ファイル一覧とコードが置いて有ります。
参考になれば、、、と。
DELIGHT
投稿日時: 2013/2/7 17:06
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: 注文番号にプレフィックスをつける
SC_Helper_Purchase.php内のregisterOrder($order_id, $arrParams)は、
受注の挿入や更新で(多分)必ず実行されます。


function registerOrder($order_id, $arrParams) {
//省略
$arrValues = $objQuery->extractOnlyColsOf($table, $arrParams);
//省略
if($exists){
//省略
$objQuery->update($table, $arrValues, $where, array($order_id));
//省略
}
else{
//省略
$objQuery->insert($table, $arrValues);
//省略
}


登録されるデータは$arrValuesという配列に【フィールド名 => 値】
という形式で格納され、UPDATEやINSERTされます。

$objQuery->extractOnlyColsOf($table, $arrParams);は、
$arrParamsから、$tableテーブルに存在するフィールド名のキーのみ抽出する関数ですので、
DBにフィールドを追加した上で、
 
$arrParams['フィールド名'] = sprintf('ECCUBE-%05d', $arrOrder['order_id']);
$arrValues = $objQuery->extractOnlyColsOf($table, $arrParams);

としたら、登録はできるようになると思います。

但しEC-CUBEは登録したデータをページに出力するのに癖があります。
そこが分からなければRingo様の資料で勉強なさるといいと思います。


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

osamuya
投稿日時: 2013/2/19 10:38
対応状況: 解決済
常連
登録日: 2013/2/4
居住地: 東京
投稿: 65
Re: 注文番号にプレフィックスをつける
DELIGHTさん

ありがとうございます。他のEC-CUBEの注文番号(order_id)と重ならなければよいという要件で、注文番号を9000から始めることで一応対処はしたのですが、やはりここら辺りの勉強もしないと駄目だなぁと思っています。

注文番号の仕様を変更したことで、どれぐらいの影響範囲があるのかまだまだ把握しておらず、いろいろソースを見て回らないと駄目な感じです。

詳しい情報ありがとうございます。
引き続きよろしくお願いします。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,865名です
総投稿数は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.