Pra*_*nth 5 php magento magento-1.7
我希望从我想要迁移的magento系统中导出所有订单的订单信息.这些是我需要的领域
Order_id, sku, item_quantity, item_price, order_total_amount, Created_at, Billing_address, Billing_city, billing_state, billing_country, billing_zipcode, billing_customer_name, billing_customer_mobile, billing_customer_email, shipping_address, shipping_city, Shipping_state, shipping_zipcode, Shipping_country, shipping_charge, shipping_customer_name, shipping_customer_mobile, order_status
Run Code Online (Sandbox Code Playgroud)
我尝试了一些免费扩展,但它们没有解决我的目的.
如果您可以帮助我编写SQL以导出数据,将会很有帮助.
我已经有了一个SQL.你能帮我改进一下,以获得我需要的细节吗?
SELECT sfo.entity_id, sfo.status, sfo.customer_email, oi.product_id, oi.name,
oi.price, sfo.total_due, billing.firstname, billing.lastname, billing.street,
billing.city, billing.postcode, billing.country_id, billing.telephone, shipping.firstname,
shipping.lastname, shipping.street, shipping.city, shipping.postcode, shipping.country_id,
shipping.telephone, sfo.store_name, sfo.store_currency_code, sfo.created_at
FROM sales_flat_order AS sfo
JOIN sales_flat_order_address AS billing ON billing.parent_id=sfo.entity_id AND billing.address_type='billing'
JOIN sales_flat_order_address AS shipping ON shipping.parent_id=sfo.entity_id AND shipping.address_type='shipping'
JOIN sales_flat_order_item as oi ON oi.order_id=sfo.entity_id
Run Code Online (Sandbox Code Playgroud)
我还需要处理一个订单可以包含多个项目的情况.
Mar*_*tin 13
编写一个从magento调用而不是从数据库调用CSV或XML的脚本会更好,因为会有许多按键链接的表.(很多工作要将它分类到一个文件,magento在API或标准调用中为你做)
这是我们用于导出命令以拥有XML文件的脚本,将其放入Magento文件夹并运行.
您可以更改XML节点的语法,或者将其重写为CSV或其他任何内容:
require_once("../app/Mage.php");
umask(0);
Mage::app("default");
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
Mage::init();
// Set an Admin Session
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
Mage::getSingleton('core/session', array('name' => 'adminhtml'));
$userModel = Mage::getModel('admin/user');
$userModel->setUserId(1);
$session = Mage::getSingleton('admin/session');
$session->setUser($userModel);
$session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
$connection = Mage::getSingleton('core/resource')->getConnection('core_write');
/* Get orders collection of pending orders, run a query */
$collection = Mage::getModel('sales/order')
->getCollection()
// ->addFieldToFilter('state',Array('eq'=>Mage_Sales_Model_Order::STATE_NEW))
->addAttributeToSelect('*');
$out = '<?xml version="1.0" encoding="windows-1250" ?>
<dat:dataPack id="order001" version="2.0" note="Import Order">';
foreach($collection as $order)
{
if ($billingAddress = $order->getBillingAddress()){
$billingStreet = $billingAddress->getStreet();
}
if ($shippingAddress = $order->getShippingAddress()){
$shippingStreet = $shippingAddress->getStreet();
}
$out .= "<dat:dataPackItem version=\"2.0\">\n";
//$out .= "<dat:dataPackItemversion=\"1.0\">\n";
$out.= "<ord:order>\n";
$out.= "<ord:orderHeader>\n";
$out.= "<ord:orderType>receivedOrder</ord:orderType>\n";
$out.= "<ord:numberOrder>".$order->getIncrementId()."</ord:numberOrder>\n";
$out.= "<ord:date>".date('Y-m-d',strtotime($order->getCreatedAt()))."</ord:date>\n";
$out.= "<ord:dateFrom>".date('Y-m-d',strtotime($order->getCreatedAt()))."</ord:dateFrom>\n";
$out.= "<ord:dateTo>".date('Y-m-d',strtotime($order->getCreatedAt()))."</ord:dateTo>\n";
$out.= "<ord:text>Objednávka z internetového obchodu</ord:text>\n";
$out.= "<ord:partnerIdentity>\n";
$out.= "<typ:address>\n";
$out.= "<typ:company>{$billingAddress->getCompany()}</typ:company>\n";
$out.= "<typ:division></typ:division>\n";
$out.= "<typ:name>{$billingAddress->getName()}</typ:name>\n";
$out.= "<typ:city>{$billingAddress->getCity()}</typ:city>\n";
$out.= "<typ:street>{$billingStreet[0]}</typ:street>\n";
$out.= "<typ:zip>{$billingAddress->getPostcode()}</typ:zip>\n";
$out.= "</typ:address> \n";
$out.="<typ:shipToAddress>\n";
$out.= "<typ:company>{$shippingAddress->getCompany()}</typ:company>\n";
$out.= "<typ:division></typ:division>\n";
$out.= "<typ:name>{$shippingAddress->getName()}</typ:name>\n";
$out.= "<typ:city>{$shippingAddress->getCity()}</typ:city>\n";
$out.= "<typ:street>{$shippingStreet[0]}</typ:street>\n";
$out.= "<typ:zip>{$shippingAddress->getPostcode()}</typ:zip>\n";
$out.= "</typ:shipToAddress>\n";
$out.= "</ord:partnerIdentity>\n";
$out.= "<ord:paymentType> \n";
$out.= "<typ:ids>{$order->getShippingDescription()}</typ:ids>\n";
$out.= "</ord:paymentType>\n";
$out.= "<ord:priceLevel>\n";
$out.= "<typ:ids></typ:ids>\n";
$out.= "</ord:priceLevel>\n";
$out.= "</ord:orderHeader>\n";
$out.= "<ord:orderDetail> \n";
foreach ($order->getAllItems() as $itemId => $item){
// textova polozka
$out.= "<ord:orderItem> \n";
$itemname = $item->getName();
$itemname = str_replace('&', " ", $itemname);
$out.= "<ord:text>{$itemname}</ord:text> \n";
$out.= "<ord:quantity>{$item->getQtyOrdered()}</ord:quantity>\n";
//$out.= "<ord:delivered></ord:delivered>";
$out.= "<ord:rateVAT>high</ord:rateVAT> \n";
$out.= "<ord:homeCurrency> \n";
$out.= "<typ:unitPrice>{$item->getPrice()}</typ:unitPrice>\n";
$out.= "</ord:homeCurrency>\n";
$out.= "<ord:stockItem>\n";
$out.= "<typ:stockItem>\n";
$out.= "<typ:ids>{$item->getSku()}</typ:ids>\n";
$out.= "</typ:stockItem>\n";
$out.= "</ord:stockItem>\n";
$out.= "</ord:orderItem>\n";
}
$out.= "</ord:orderDetail>\n";
$out.= "<ord:orderSummary>\n";
$out.= "<ord:roundingDocument>math2one</ord:roundingDocument>\n";
$out.= "</ord:orderSummary>\n";
$out.= "</ord:order>\n";
$out.= "</dat:dataPackItem>\n\n";
};
$out.= "</dat:dataPack>\n";
header ("Content-Type:text/xml");
header ('char-set: cp1250');
@file_put_contents('./dl/response/'.microtime(true).'.txt', $out);
@file_put_contents('php://output', $out);
Run Code Online (Sandbox Code Playgroud)
重写 Martin(上面的代码)以生成 CSV 文件。
<?php
error_reporting(E_ALL);
ini_set("memory_limit", "100000M");
require_once('app/Mage.php'); //Path to Magento
umask(0);
Mage::app("default");
Mage::init();
// Set an Admin Session
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
Mage::getSingleton('core/session', array('name' => 'adminhtml'));
$userModel = Mage::getModel('admin/user');
$userModel->setUserId(1);
$session = Mage::getSingleton('admin/session');
$session->setUser($userModel);
$session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
$connection = Mage::getSingleton('core/resource')->getConnection('core_write');
$fromDate = date('Y-m-d H:i:s', strtotime('2018-01-01'));
$toDate = date('Y-m-d H:i:s', strtotime('2019-01-01'));
/* Get orders collection of pending orders, run a query */
$collection = Mage::getModel('sales/order')
->getCollection()
// ->addFieldToFilter('state',Array('eq'=>Mage_Sales_Model_Order::STATE_NEW))
->addAttributeToSelect('*')
->addAttributeToFilter('created_at', array('from' => $fromDate, 'to' => $toDate));
// ->setPageSize(2)
// ->setCurPage(1);
$data[0] = array(
'Order ID',
'Status',
'Shipping description',
'Grand Total',
'Total Qty Ordered',
'Customer First name',
'Customer Last name',
'Customer Email',
'Created At',
'Billing Company',
'Billing Name',
'Billing City',
'Billing Street',
'Billing POST Code',
'Shipping Company',
'Shipping Name',
'Shipping City',
'Shipping Street',
'Shipping POST Code',
'Item Name',
'Qty Ordered',
'Price',
'Product SKU'
);
foreach ($collection as $order) {
if ($billingAddress = $order->getBillingAddress()) {
$billingStreet = $billingAddress->getStreet();
}
if ($shippingAddress = $order->getShippingAddress()) {
$shippingStreet = $shippingAddress->getStreet();
}
$orderData = array(
$order->getIncrementId(),
$order->getStatus(),
$order->getShippingDescription(),
$order->getGrandTotal(),
$order->getTotalQtyOrdered(),
$order->getCustomerFirstname(),
$order->getCustomerLastname(),
$order->getCustomerEmail(),
date('Y-m-d', strtotime($order->getCreatedAt())),
$billingAddress->getCompany(),
$billingAddress->getName(),
$billingAddress->getCity(),
$billingStreet[0],
$billingAddress->getPostcode(),
$shippingAddress->getCompany(),
$shippingAddress->getName(),
$shippingAddress->getCity(),
$shippingStreet[0],
$shippingAddress->getPostcode(),
);
foreach ($order->getAllItems() as $itemId => $item) {
$item_name = str_replace('&', " ", $item->getName());
$itemData = array(
$item_name,
$item->getQtyOrdered(),
$item->getPrice(),
$item->getSku()
);
$data[] = array_merge($orderData, $itemData);
}
};
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="productData.csv"');
$fp = fopen('php://output', 'wb');
foreach ($data as $line) {
fputcsv($fp, $line, ',');
}
fclose($fp);
Run Code Online (Sandbox Code Playgroud)