Opencart VQMod добавляет дополнительные данные в письмо с подтверждением заказа

Я использую 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;
    }

}

Но я не получаю никаких данных от модели (код выше). Если я смотрю в БД, там есть данные с правильной информацией.

Итак, я попытался записать всю информацию, которую я получил в журнал ошибок, и вот что я получил:

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 медленный и что сервер продолжает анализировать всю информацию и отправлять электронную почту.

Так вы, ребята, знаете, как я могу хранить все, пока не получится подтверждение (что данные хранятся), или вы, ребята, знаете другой способ?

1 ответ

Решение

Глядя на Ваш код, я вижу, что все в порядке, почти. Здесь действительно важно то, что Вы называете orderInfo контроллер для хранения информации. Потому что я уверен, что вы звоните после сохранения заказа, но я имею в виду, что вы звоните после этого звонка:

$this->model_checkout_order->confirm();

Я прав?

Поскольку confirm Как вы могли заметить, метод, который отправляет электронные письма, и если orderInfo данные еще не сохранены, нечего вставлять в почтовый шаблон...

Небольшая подсказка о том, как проходит процесс оформления заказа в отношении жизненного цикла заказа:

  • на вкладке Подтверждение оформления заказа заказ сохраняется в БД (неактивен, без статуса, даже не виден в администрации)
  • после подтверждения того, что процесс оплаты занимает свое место или (и после процесса оплаты) заказ подтверждается с соответствующим статусом - и здесь электронное письмо отправлено

Итак, ваша ставка - сохранить все orderInfo либо внутри addOrder метод или в пределах confirm метод до отправки письма.

И еще один совет: первый вариант - Ваш билет, как и второй. Вы можете потерять информацию, которая будет сохранена, в случае использования какого-либо платежного шлюза (с перенаправлениями на платежный шлюз и обратно). Так что храните orderInfo данные прямо в пределах addOrder() Метод и вы уверены, когда заказ будет подтвержден, данные есть, и электронное письмо будет содержать их.

Другие вопросы по тегам