2

OC バージョン 1.5.5.1 を使用しています

問題は、VQMod を介して注文の確認メールに追加情報を追加したいということです。私はこのスクリプトを持っています (VQMod ファイル全体の一部):

<file name="/catalog/view/theme/kadobos/template/checkout/checkout.tpl">
    <operation>
        <search position="after">
            <![CDATA[<script type="text/javascript"><!--]]>
        </search>
        <add>
            <![CDATA[
            // ORDER INFO CODE!!!
            $('#button-confirm').live('click', function() {
                waardes = [];
                $('input[class=order_info_radio]:checked').each(function(index) {
                    waardes[$(this).attr("name").replace("order_info_answer_", "")] = $(this).attr("value");

                });
                $('input[class=order_info_input]').each(function(index) {
                    waardes[$(this).attr("name").replace("order_info_answer_", "")] = $(this).attr("value");

                });
                $('textarea[class=order_info_textarea]').each(function(index) {
                    waardes[$(this).attr("name").replace("order_info_answer_", "")] = $(this).attr("value");

                });

                $.ajax({
                    type: "POST",
                    data: {waardes:waardes},
                    url: "index.php?route=module/order_info",
                    success: function(msg){
                        // console.log(msg);
                    }
                });
            });
            // END OF ORDER INFO CODE!!!
            ]]>
        </add>
    </operation>
</file>
    <!-- Factuur die wordt verstuurd -->
    <file name="/catalog/model/checkout/order.php">
        <operation>
            <search position="before">
                <![CDATA[if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/mail/order.tpl')) {]]>
            </search>
            <add>
                <![CDATA[
                // ORDER INFO CODE!!!
                $this -> load -> model('module/order_info');
                global $log;
                $template -> data['order_info_waardes'] = $this -> model_module_order_info -> getAnswers($order_id);
                $log->write(print_r($template -> data['order_info_waardes'], true));
                $log->write("Order ID: " . $order_id);
                // END OF ORDER INFO CODE!!!
                ]]>
            </add>
        </operation>
    </file>
    <file name="/catalog/view/theme/kadobos/template/mail/order.tpl">
        <operation>
            <search position="replace">
                <![CDATA[<span id="order_info_holder"></span>]]>
            </search>
            <add>
                <![CDATA[
                <!-- ORDER INFO CODE!!! -->
                <div id="tab-extra-info" >
                <table class="form">
                    <tbody>
                        <?php
                         foreach($order_info_waardes as $order_info_waardes_key => $order_info_waardes_value){ ?>
                            <tr>
                                <td><?php echo $order_info_waardes_value['title']; ?></td>
                                <td><?php echo $order_info_waardes_value['value']; ?></td>
                            </tr>
                         <?php } ?>
                    </tbody>
                </table>
            </div>
                <!-- END OF ORDER INFO CODE!!! -->
                ]]>
            </add>
        </operation>
    </file>

そしてコントローラーファイル ( module/order_info):

<?php
class ControllerModuleOrderInfo extends Controller {
    public function index() {
        global $log;
        $this -> load -> model("module/order_info");
        $order_num = $this -> session -> data['order_id'];
        $log->write("Order ID ( tijdens opslaan ): " . $order_num);
        foreach ($this -> request -> post['waardes'] as $key => $value) {
            if ($value == "undefined") {
                continue;
            }
            $info = $this -> model_module_order_info -> getInfo($key);
            $this -> model_module_order_info -> insertAnswer($order_num, $info['title'], $value);
        }
    }

}

モデルファイル ( module/order_info) (部分):

<?php
class Modelmoduleorderinfo extends Model {

    public function getAnswers($uid) {
        $query = "SELECT " . DB_PREFIX . "order_info_entrys.uid, " . DB_PREFIX . "order_info_entrys.title, " . DB_PREFIX . "order_info_entrys.`value` FROM `" . DB_PREFIX . "order_info_entrys` WHERE " . DB_PREFIX . "order_info_entrys.order_id = " . $uid;
        $resultSet = $this -> db -> query($query);
        return $resultSet -> rows;
    }

}

しかし、モデルからデータを取得しません(上記のコード)。DB を見ると、データは正しい情報とともにそこにあります。

それで、私が得たすべての情報をエラーログに記録しようとしましたが、これが私が得たものです:

2013-12-06 9:27:54 - Array
(
)

2013-12-06 9:27:54 - Order ID: 36186
2013-12-06 9:27:54 - Array
(
)

2013-12-06 9:27:54 - Order ID: 36186
2013-12-06 9:27:54 - Order ID ( tijdens opslaan ): 36186

ご覧のとおり、最初に確認メールが送信され、その後データベースに保存された情報が送信されます。しかし、データを最初に保存する必要があり、それはすでに起こっていると思いました(ajaxリクエストのため)。しかし、私は ajax リクエストが遅くなり、サーバーがすべての情報を解析して電子メールを送信し続けると思います。

それで、成功するコンフォメーション(データが保存される)まですべてを保持する方法を知っていますか、それとも別の方法を知っていますか?

4

1 に答える 1

2

あなたのコードを見ると、ほとんどすべてがうまくいっていることがわかります。orderInfoここに欠けている本当に重要なことは、情報を保存するためにコントローラーを呼び出す場所です。注文が保存された後にこれを呼び出していると確信しているため-しかし、この呼び出しの後にこれを呼び出していることを意味します:

$this->model_checkout_order->confirm();

私は正しいですか?

confirmお気づきかもしれませんが、メソッドはメールを送信するものであり、orderInfoデータがまだ保存されていない場合、メールテンプレートに挿入するものは何もないため...

注文のライフサイクルに関して、チェックアウトプロセスがどのように進行しているかについてのちょっとしたヒント:

  • チェックアウトの[確認] タブで、注文が DB に保存されます(非アクティブ、ステータスなし、管理画面でも確認できませんでした)
  • 支払いプロセスが行われたことを確認した後、または(支払いプロセスの後)注文がそれぞれのステータスで確認され、ここで電子メールが送信されます

したがって、あなたの賭けは、電子メールが送信される前にメソッド内またはメソッドorderInfo内のいずれかをすべて保存することです。addOrderconfirm

さらにもう 1 つのヒント: 最初のオプションは 2 番目のオプションと同様にチケットです。一部の支払いゲートウェイが使用された場合 (支払いゲートウェイへのリダイレクトとその逆)、保存する情報が失われる可能性があります。したがってorderInfo、メソッド内にデータを保存addOrder()すると、注文が確認されたときにデータがそこにあり、電子メールにデータが含まれていることを確信できます。

于 2013-12-06T10:23:22.180 に答える