バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > EC-CUBE3での注文番号カスタマイズ

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
投稿日時: 2016/6/6 13:18
対応状況: 確認中
EC-CUBE3での注文番号カスタマイズ
以前質問させていただきましたが、返答が得られなかったため
内容の部分書き直しまして、再度質問させていただきます。

【EC-CUBE】3.0.10
【DBサーバ】MySQL 10.1.13-MariaDB (phpMyAdminを使用しています)
【WEBサーバ】Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.6.21
【PHP】5.6.21

現在、EC-CUBEでの開発を始めたところであり
最新バージョンの3.0.10をインストールしました。
今はローカルでのテスト環境で作成およびカスタマイズの練習をしている段階ではあるのですが
やはり、注文番号の部分で1からの連番(AUTO_INCREMENTを使用し、任意の値から始めたとしても結局連番となり勘のいい方だと気づくかと思われます)
そこで、ランダムであったり法則性の持たない数値を代入させることでその部分は回避できるのではないかと考えています。
しかし、PHPまたEC-CUBEを初めて触ったことによりどこで処理を行っているのかが不明です。
今、ファイルを1つずつ確認してはいるのですが…

注文番号(受注IDとなるのかもしれませんが)をカスタマイズしたいと考えています。
それぞれ、どのファイルのどの付近で設定されているか
わかる方がいましたら教えていただければ幸いです。

よろしくお願いいたします。
nanasess
投稿日時: 2016/6/7 16:36
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: EC-CUBE3での注文番号カスタマイズ
注文番号の auto_inclement の定義は src/Eccube/Resource/doctrine/Eccube.Entity.Order.dcm.yml です。

http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/basic-mapping.html#identifier-generation-strategies

上記を参考にすれば、UUID 等に変更できますが、プラグイン等の連携を考えると、あまり現実的ではないのかなぁと思います。

表示用の注文番号として、別のカラムを作成することをおすすめします。
ゲスト
投稿日時: 2016/6/7 17:02
対応状況: −−−
Re: EC-CUBE3での注文番号カスタマイズ
引用:
表示用の注文番号として、別のカラムを作成することをおすすめします。


dtb_orderに別カラムとして注文番号(order_number等の命名で)のカラムを作成し、メールの注文番号を載せている部分や管理画面の受注管理画面での注文番号等をそちらのカラムで読むようにすることをお勧めされているという認識でよいでしょうか?
nanasess
投稿日時: 2016/6/7 17:29
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: EC-CUBE3での注文番号カスタマイズ
はい、ご認識の通りです。
ゲスト
投稿日時: 2016/6/7 17:43
対応状況: −−−
Re: EC-CUBE3での注文番号カスタマイズ
ありがとうございます。

何度も聞いてしまい申し訳ないのは重々承知なのですが
新しくカラムの作成はしたのですが、ここに自分の作りたい方法で値を設定させるにはどのソースに書けばよいのでしょうか?
(従来の方法で設定している部分がどこなのかよくわかっておらず…)

もし、おわかりでしたら
ご教授いただければ幸いです。
nanasess
投稿日時: 2016/6/8 15:28
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: EC-CUBE3での注文番号カスタマイズ
標準では Doctrine が自動生成しています(EC-CUBE本体側では何もしていません)

以下の2パターンになるのではないかなと思います

1. Doctrine の機能を使用する
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=17569&forum=13&post_id=76337#forumpost76337

2. 独自に実装する
\Eccube\Entity\Order のコンストラクタか、
\Eccube\Controller\ShoppingService::newOrder() に独自の機能を実装する

# こういうのをプラグインでやろうとするのは、かなり辛いですね...
shhirose
投稿日時: 2016/6/9 10:23
対応状況: −−−
一人前
登録日: 2014/4/24
居住地:
投稿: 94
Re: EC-CUBE3での注文番号カスタマイズ
ゲスト
投稿日時: 2016/6/9 15:05
対応状況: 開発中
Re: EC-CUBE3での注文番号カスタマイズ
shhirose様、nanasess様

ご回答ありがとうございます。

プラグインとせず、カスタマイズにより実装の場合
引用:

2. 独自に実装する
\Eccube\Entity\Order のコンストラクタか、
\Eccube\Controller\ShoppingService::newOrder() に独自の機能を実装する


この場合は、
src\Eccube\Service\ShoppingService.php
の234行目のnewOrderに実装させればよいのでしょうか?

引用:

1. Doctrine の機能を使用する

こちらは自分があまり理解できておらず不安なため2のやり方にしようかと考えてもいるのですが…
ゲスト
投稿日時: 2016/6/10 10:56
対応状況: 確認中
Re: EC-CUBE3での注文番号カスタマイズ
src/Eccube/Service/ShoppingService.php 154行目
からのregisterPreOrder内
src/Eccube/Service/ShoppingService.php 210行目
で注文番号を確定しているというご教示をいただきました。

同ファイル154行目からのregisterPreOrderメソッドにて、160行目で同ファイル221行目のgetNewOrderを呼び出し
223行目で234行目のnewOrderを呼び出しているのかなという部分までは理解できましたが
newOrder内
src/Eccube/Service/ShoppingService.php 236行目
は何を処理しているのでしょうか?

ご教示いただける方がいますと非常に幸いです。
よろしくお願いいたします。
ゲスト
投稿日時: 2016/6/10 14:46
対応状況: 開発中
Re: EC-CUBE3での注文番号カスタマイズ
注文番号カスタマイズで仕様としては、日付(yymmddの6桁)+連番(4桁0埋め)+チェックディジット(1桁)にしようと考えています。(段階でやっているので現時点では連番に0埋めとしています)

dtb_orderテーブルにorder_numberという別カラムを作成し、そこにカスタマイズした注文番号を格納し表示やメールに転載しようと考えています。

今、注文番号を直で与えてDBに登録され表示やメールに乗るところまでは確認できました。

そこでチェックディジットの処理を組み込み食わせようとしたのですがエラーとなってしまいうまくいきません。

////以下、作成したチェックディジットの処理////
src\Eccube\Service\ShoppingService.php
registerPreOrderメソッド内から
〜〜〜〜〜〜〜〜〜〜上記、略〜〜〜〜〜〜〜〜〜〜
// 注文番号のカスタマイズ
$cd = $this->editOrderNumber($Order); //ここで、チェックデジットを求めるメソッドを呼ぶ。
$editOrderNum = $Order->getId().$cd; //計算したチェックデジットと注文番号を結合する。
$Order->setOrderNumber(editOrderNum); //カスタマイズした注文番号を設定する。

// 合計金額の計算
$this->calculatePrice($Order);

$this->em->flush();

return $Order;

}

/**
* 注文番号に付与するチェックデジットの値を取得する。
*
*
*/
public function editOrderNumber(Order $Order)
{
$orderId = $Order->getId();

if (strlen($orderId) < 10)
{
$orderNum = str_pad($orderId, 10, "0", STR_PAD_LEFT);
} else
{
$orderNum = $orderId;
}

$cd = $this->checkOrderNum($orderNum);

return $cd;
}

/**
* 連番で設定されていた注文番号のチェックデジットを算出する。
* @param $orderNumber 注文番号(連番)
* @return $cd チェックデジット
*/
function checkOrderNum ($orderNum)
{
// 連番で設定されていた本来の注文番号を逆順にし、1文字ずつ配列に設定する。
$arr = arr_reverse(str_split($orderNum));

// $arrの数分ループを回す
for ($i = 0; $i < count($arr); $i++)
{
$num += ( ($i+1) % 2) == 0 ? intval($arr[$i]) : intval($arr[$i])*3;
}
$cd = 10 - intval(substr($num, strlen($num)-1, 1));

// チェックデジットを返却する。
return $cd > 0 ?10 - $cd : 0;
}

チェックデジットの処理を組み込んだ部分は、調べながらなのでそこも間違っている部分があるかもしれません。

xamppのエラーログの内容を以下に書きます
[Fri Jun 10 14:34:24.987381 2016] [:error] [pid 8628:tid 1848] [client ::1:60783] PHP Fatal error: Call to undefined function Eccube\\Service\\arr_reverse() in C:\\xampp\\htdocs\\eccube-3.0.10\\src\\Eccube\\Service\\ShoppingService.php on line 251, referer: http://localhost/eccube-3.0.10/html/cart


ほかに情報があったほうが良い場合は、提供いたします。
よろしくお願いいたします。
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

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
1294
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.