CGI-BBS > SO−HO > ショッピングバスケット > ショッピングバスケットプロ.5.21のdk5・doneファイルの改造


カレッヂ
カレッヂ


質問者 まりここ  投稿日 5/31(木) 16:53:13
先日は.dk5ファイルを.doneファイルに書き換えて保存できるやり方を教えていただいたものです。
再び質問なのですが、.doneファイルの中身は下記のようになっていますが、
990671519・CODE・GNAME・TANKA・KAZU・消費税率・REM1・REM2・REM3・REM4
最初の数字は何を表したものでしょうか。固有の番号になっているなら個々の注文番号主キーとして活用できるのではと考えておりますが、固有の番号と考えていいのでしょうか。

この.doneファイルに自動的に商品ごとに発注番号(20010525・・・)をつけたして
20010525100308・990671519・CODE・GNAME・TANKA・KAZU・消費税率・REM1・REM2・REM3・REM4という具合にならないでしょうか。
上記のデータができれば、発注番号を主キーにして自動的に顧客情報と商品情報を合体させ、発注の完全なデータベースができるので、とても助かるのですが。
よろしく、お願いいたします。
回答者 しあわせのツボ  [削除]  投稿日 5/31(木) 19:09:05
最初の数字列はバスケットが作られた時刻(基準時刻からの秒数)が入っています。つまり、お客さんが最初の商品をカゴに入れる操作を行った時刻です。
特定の1秒間のうちに複数のバスケットが作られる可能性は(よほど人気のあるサイトでない限り)低いでしょうから、主キーとして利用できるのではないでしょうか。
現にcargo.cgi中ではこれを主キーとしていますし、発注番号もこれを人間が読める形に直しただけのようですね。

記録フォーマットを変更するのは面倒なので、数字列を発注番号と同じにしてしまいましょう。
cargo.cgi line 418
print FILE "$time\t$in{'CODE'}\t$in{'GNAME'}\t$in{'TANKA'}\t$in{'KAZU'}\t$in{'TAXRATE'}\t$in{'REM1'}\t$in{'REM2'}\t$in{'REM3'}\t$in{'REM4'}\t$enzan1\t$CALS1\t$enzan2\t$CALS2\n";

print FILE "$in{'_order'}\t$in{'CODE'}\t$in{'GNAME'}\t$in{'TANKA'}\t$in{'KAZU'}\t$in{'TAXRATE'}\t$in{'REM1'}\t$in{'REM2'}\t$in{'REM3'}\t$in{'REM4'}\t$enzan1\t$CALS1\t$enzan2\t$CALS2\n";
にしてみて下さい。
※スクリプトの動作前提を変更してしまうため、不具合が起きるかもしれません。your own riskでお願いします。
質問者 まりここ  [削除]  投稿日 6/1(金) 13:50:08
しあわせのツボ様
本当にありがとうございます。こんなに早く回答をいただけて感謝感激です。
早速、お教えいただいた通り書き換えたところバッチリうまく行きました。
ただ
print FILE "$in{'_order'}\t$in{'CODE'}\t$in{'GNAME'}\t$in{'TANKA'}\t$in{'KAZU'}\t$in{'TAXRATE'}\t$in{'REM1'}\t$in{'REM2'}\t$in{'REM3'}\t$in{'REM4'}\t$enzan1\t$CALS1\t$enzan2\t$CALS2\n";
だと、
$time\t(最初の商品をカゴに入れる操作を行った時刻)が記録されないのではと思いますが、問題ないですか。
print FILE "$in{'_order'}\t$time\t$in{'CODE'}\t$in{'GNAME'}\t$in{'TANKA'}\t$in{'KAZU'}\t$in{'TAXRATE'}\t$in{'REM1'}\t$in{'REM2'}\t$in{'REM3'}\t$in{'REM4'}\t$enzan1\t$CALS1\t$enzan2\t$CALS2\n";
にしないでいいんですよね。確認させていただければ、ありがたいです。よろしくお願いいたします。
回答者 しあわせのツボ  [削除]  投稿日 6/1(金) 15:51:43
後者のようにすると動作がおかしくなると思います。記録フォーマットが変わってしまうので。
フォーマットを変えずにおくため、$timeは記録しないよう改造してみました。
スクリプト中で$timeを時刻として再利用している場所が見当たらなかったので、ただの主キーであればその振り方を変わっても大丈夫だろう、という考えです。

どうしても$timeを残したいのであれば、スクリプト中の
($TIME,$CODE[$i],$GNAME[$i],$TANKA[$i],$KAZU[$i],$TAXRATE[$i],$REM1[$i],$REM2[$i],$REM3[$i],$REM4[$i],$ENZAN1[$i],$CALS1[$i],$ENZAN2[$i],$CALS2[$i]) = split(/\t/,$BASE[$i],14);
という行(同じものが4ヶ所あります)を
($ORDERNUM,$TIME,$CODE[$i],$GNAME[$i],$TANKA[$i],$KAZU[$i],$TAXRATE[$i],$REM1[$i],$REM2[$i],$REM3[$i],$REM4[$i],$ENZAN1[$i],$CALS1[$i],$ENZAN2[$i],$CALS2[$i]) = split(/\t/,$BASE[$i],15);
のように変更すればよいでしょう。
記録フォーマットを変更したければ、書き込み部と読み込み部の両方を変更する必要があります。
フォーマットを変更しなければ1ヶ所の改造で済むものが、変更すると5ヶ所になってしまうため、より簡単な(≒間違いの起きにくい)方法を先に提案させていただきました。
質問者 まりここ  [削除]  投稿日 6/1(金) 16:16:02
詳しく教えていただき、本当にありがとうございます。
記録フォーマットが変わってしまうのでというのは、そういう意味だったのですね。
どうしても$timeを残したいと考えているわけではないので、間違いのしにくい最初に教えていただいた方法で行きたいと思います。
とっても快適に動いていて、自動的に顧客データと受注データをインポートできるようになりましたので、本当に助かりました。ありがとうございました。

このページは終了したので返信(回答)は書きこめません

Web裏技