我使用的是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请求太慢了,服务器继续解析所有信息并发送电子邮件。
那么你们知道我如何保存所有东西直到成功确认(数据被存储)吗?或者你们知道另一种方法吗?
查看您的代码,我可以看到一切都很好。这里缺少的真正重要的东西是您调用您的orderInfo
控制器来存储信息的地方。因为我确信您在订单保存后调用此-但我的意思是,您在该调用后调用此:
$this->model_checkout_order->confirm();
我说得对吗?
因为您可能注意到,confirm
方法是发送电子邮件的方法,如果orderInfo
数据尚未存储,则无法将任何内容插入邮件模板。。。
只是关于订单生命周期的结账过程的一个小提示:
- 在结账的确认选项卡上,订单被保存到DB(处于非活动状态,没有状态,甚至在管理中看不到)
- 在确认付款流程后,或者(在付款流程后)订单被确认为相应的状态-,然后在此处发送电子邮件
因此,您的赌注是在发送电子邮件之前,将所有orderInfo
保存在addOrder
方法中或confirm
方法中。
还有一个提示:第一个选项是您的票证,与第二个选项一样。如果使用了某个支付网关(重定向到支付网关并返回),您可能会丢失要保存的信息。因此,将orderInfo
数据存储在addOrder()
方法中,您可以确定,当订单得到确认时,数据就在那里,电子邮件中会包含它们。