我正在Magento平臺上的在線商店工作,並遇到一個重大障礙:出於某種原因我無法弄清楚如何導出當前訂單(包括運輸信息/出貨類型等) 。有沒有人有任何建議?這看起來好像它應該是這樣一個系統最基本的東西之一,但我一直無法知道如何。從Magento出口訂單出貨
預先感謝您的幫助,
安迪
我正在Magento平臺上的在線商店工作,並遇到一個重大障礙:出於某種原因我無法弄清楚如何導出當前訂單(包括運輸信息/出貨類型等) 。有沒有人有任何建議?這看起來好像它應該是這樣一個系統最基本的東西之一,但我一直無法知道如何。從Magento出口訂單出貨
預先感謝您的幫助,
安迪
看到你想要的這種運輸方式,你可能想要問誰來處理你的運輸,不管他們是否有某種API,這樣你就可以建立/購買/下載適當的運輸模塊,並免除使用CSV文件的麻煩。
如果你真的想要一個CSV文件,但我可以告訴你如何創建它。你沒有提到這個腳本將在哪裏運行,所以我認爲它是一個外部腳本(這將使它更容易與cron作業一起使用)。 你要做到以下幾點:
//External script - Load magento framework
require_once("C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\magento\app\Mage.php");
Mage::app('default');
$myOrder=Mage::getModel('sales/order');
$orders=Mage::getModel('sales/mysql4_order_collection');
//Optional filters you might want to use - more available operations in method _getConditionSql in Varien_Data_Collection_Db.
$orders->addFieldToFilter('total_paid',Array('gt'=>0)); //Amount paid larger than 0
$orders->addFieldToFilter('status',Array('eq'=>"processing")); //Status is "processing"
$allIds=$orders->getAllIds();
foreach($allIds as $thisId) {
$myOrder->reset()->load($thisId);
//echo "<pre>";
//print_r($myOrder);
//echo "</pre>";
//Some random fields
echo "'" . $myOrder->getBillingAddress()->getLastname() . "',";
echo "'" . $myOrder->getTotal_paid() . "',";
echo "'" . $myOrder->getShippingAddress()->getTelephone() . "',";
echo "'" . $myOrder->getPayment()->getCc_type() . "',";
echo "'" . $myOrder->getStatus() . "',";
echo "\r\n";
}
爲了簡潔和理智的緣故,我已經沒有列出所有可用的訂單信息。您可以通過傾倒相關對象並查看其字段來找出可用字段。例如,如果您要執行print_r($ myOrder-> getBillingAddress());則可以使用print_r($ myOrder-> getBillingAddress())。你會看到諸如「address_type」和「lastname」之類的字段。您可以分別使用 $ myOrder-> getBillingAddress() - > getAddress_type()和 $ myOrder-> getBillingAddress() - > getLastname()。
編輯:根據craig.michael.morris的回答
如果系統不支持出口訂單的任何直接的方式,你可以創建,列出你需要的訂單數據庫中的視圖出口。然後使用諸如phpMyAdmin之類的東西將視圖中的數據導出爲CSV。
我是在實現解決方案的過程中,發現它只返回第一個值,所有的外鍵如計費 更改代碼地址,送貨地址,付款等等
這可以通過改變
$ myOrder->負載($ thisId)是固定的;
到
$ myOrder->復位() - >負載($ thisId);
你可能也想看看這個擴展:http://www.magentocommerce.com/extension/1158/manual-order-export
您也可以通過SOAP連接:這個例子設置爲本地主機,假定您已經下設系統網絡服務的用戶和角色>>網服務在管理員。
<?php
$time = microtime();
$time = explode(' ', $time);
$time = $time[1] + $time[0];
$begintime = $time;
?>
<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
// hostname
$host= '127.0.0.1';
// if store in /magento change /shop, if store in root remove /shop
$client= new SoapClient('http://'.$host.'/magento/index.php/api/soap/?wsdl');
// Can be added in Magento-Admin -> Web Services with role set to admin
$apiuser= 'soap';
// API key is password
$apikey = '******';
$sess_id= $client->login($apiuser, $apikey);
echo "<html>";
echo "<head>";
echo "<LINK REL=StyleSheet HREF=\"style.css\" TYPE=\"text/css\" MEDIA=screen>";
echo "</head>";
echo "<body>";
$result= $client->call($sess_id, 'sales_order.list', array(array('status'=>array('='=>'Pending'))));
echo '<pre>';
print_r($result);
echo '<pre>';
?>
<?php
// Let's see how long this took…
$time = microtime();
$time = explode(" ", $time);
$time = $time[1] + $time[0];
$endtime = $time;
$totaltime = ($endtime - $begintime);
echo '<br /><br /><em>This Magento SOAP API script took ' .$totaltime. ' seconds, precisely.</em>';
// ...and close the HTML document
echo "</body>";
echo "</html>";
?>
如果這有助於任何人,您可以使用發票表作爲關鍵。在magento中使用auth +捕獲信用卡設置的發票意味着資金已經進入。在我們的例子中,我們只需要一個sql查詢在phpmyadmin中運行,它將導出訂單號和發票號以供我們協調,以檢查從xtento的訂單導出擴展是否正常。這是我們用什麼:
SELECT sales_flat_order.increment_id AS 'order', sales_flat_invoice.increment_id AS 'invoice'
FROM sales_flat_order
RIGHT JOIN sales_flat_invoice ON sales_flat_invoice.order_id = sales_flat_order.entity_id
WHERE sales_flat_invoice.updated_at >= "2011-07-01 00:00:00"
ORDER BY sales_flat_order.increment_id DESC
薩霍的使用SOAP的建議是偉大的,但它可能需要很長的時間(阿帕奇只能將有限的CPU資源踏來處理該請求)
建議你編寫一個PHP腳本,然後通過終端運行它。
Sonam
我不確定你想要做什麼......導出當前訂單或所有掛單?將它們導出到哪裏以及爲了什麼目的?這是發生在某個特定的頁面還是發生了什麼事情(比如創建訂單時)? – 2009-03-06 09:10:19