質問 > 管理機能 > 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様
ご回答ありがとうございます。 プラグインとせず、カスタマイズにより実装の場合 引用:
この場合は、 src\Eccube\Service\ShoppingService.php の234行目のnewOrderに実装させればよいのでしょうか? 引用:
こちらは自分があまり理解できておらず不安なため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 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |