2009-03-06 68 views
9

我正在Magento平臺上的在線商店工作,並遇到一個重大障礙:出於某種原因我無法弄清楚如何導出當前訂單(包括運輸信息/出貨類型等) 。有沒有人有任何建議?這看起來好像它應該是這樣一個系統最基本的東西之一,但我一直無法知道如何。從Magento出口訂單出貨

預先感謝您的幫助,

安迪

+1

我不確定你想要做什麼......導出當前訂單或所有掛單?將它們導出到哪裏以及爲了什麼目的?這是發生在某個特定的頁面還是發生了什麼事情(比如創建訂單時)? – 2009-03-06 09:10:19

回答

24

看到你想要的這種運輸方式,你可能想要問誰來處理你的運輸,不管他們是否有某種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的回答

0

如果系統不支持出口訂單的任何直接的方式,你可以創建,列出你需要的訂單數據庫中的視圖出口。然後使用諸如phpMyAdmin之類的東西將視圖中的數據導出爲CSV。

4

我是在實現解決方案的過程中,發現它只返回第一個值,所有的外鍵如計費 更改代碼地址,送貨地址,付款等等

這可以通過改變

$ myOrder->負載($ thisId)是固定的;

$ myOrder->復位() - >負載($ thisId);

4

你可能也想看看這個擴展: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>"; 
?> 
2

如果這有助於任何人,您可以使用發票表作爲關鍵。在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 
0

薩霍的使用SOAP的建議是偉大的,但它可能需要很長的時間(阿帕奇只能將有限的CPU資源踏來處理該請求)

建議你編寫一個PHP腳本,然後通過終端運行它。

Sonam