首页 > 解决方案 > Prestashop 1.7 将订单导出到 XML

问题描述

你能帮我写下下面的脚本吗?它导入特定订单并以 XML 格式显示。问题是,随机记录(产品 ID)可以显示 2 次。结果我每次都需要验证输出是否包含错误。总而言之,如何改进这个脚本以确保每个输出都是 100% 正确的?

<?php 
    header('Content-type: text/xml');
    $xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
    // import Prestashop settings
?>
<ZAM>
<?php
$zamowienie = $_GET['zamowienie'];
$context = Context::getContext();
$id_lang = (int)Configuration::get('PS_LANG_DEFAULT', (int)$context->shop->id);
$order_details = Db::getInstance()->ExecuteS('
SELECT o.reference, o.date_add, o.id_order, message
FROM '._DB_PREFIX_.'orders o
LEFT JOIN '._DB_PREFIX_.'customer_message pl ON (pl.date_add = o.date_add)
WHERE o.reference = "'.$zamowienie.'"');

$order_details2 = Db::getInstance()->ExecuteS('
SELECT o.id_order, od.product_reference, od.product_quantity
FROM '._DB_PREFIX_.'orders o
LEFT JOIN '._DB_PREFIX_.'order_detail od ON (od.id_order = o.id_order)
LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (pl.id_product = od.product_reference)
WHERE o.reference = "'.$zamowienie.'"');

foreach ($order_details as &$od){
    echo "<NAG>";
        echo "<numer>".$od['id_order']."</numer>";
        echo "<data>".$od['date_add']."</data>";
        echo "<numer_zam>".$od['reference']."</numer_zam>";
        echo "<uwagi>".$od['message']."</uwagi>";
    echo "</NAG>";
}
foreach ($order_details2 as &$od){
    echo "<POZ>";
        echo "<numer>".$od['id_order']."</numer>";
        echo "<tw_id>".$od['product_reference']."</tw_id>";
        echo "<zam_ilo>".$od['product_quantity']."</zam_ilo>";
    echo "</POZ>";
};

?>
</ZAM>

标签: phpsqlxmlprestashop

解决方案


感谢您指出安全问题。我会修好它。我的问题是由数据库中的重复产品引起的。我应该如何升级 sql 查询以确保只有一个产品会出现在输出中,即使它在数据库中有更多记录?请看下面的例子。

<ZAM>
<NAG>
<numer>2045</numer>
<data>2020-04-22 17:51:04</data>
<numer_zam>HJJDHNTBV</numer_zam>
<uwagi/>
</NAG>
<POZ>
<numer>2045</numer>
<tw_id>7069</tw_id>
<zam_ilo>4</zam_ilo>
</POZ>
<POZ>
<numer>2045</numer>
<tw_id>7069</tw_id>
<zam_ilo>4</zam_ilo>
</POZ>
<POZ>
<numer>2045</numer>
<tw_id>98404</tw_id>
<zam_ilo>1</zam_ilo>
</POZ>
</ZAM>

由于重复产品的ID 7069,这部分代码出现了2次。

<POZ>
    <numer>2045</numer>
    <tw_id>7069</tw_id>
    <zam_ilo>4</zam_ilo>
</POZ>

推荐阅读