这里有很多考虑。我说这个是因为我有类似的问题。我目前正在使用 SQL 将数据从 magento 存储到 xml。确实,只有在您知道要获取的属性的情况下,使用 sql 才能使其更快。例如。如果您的产品有 15 个属性,这意味着使用 sql 有 50k x 15 个属性。但至少您不会遇到版本问题,因为您使用的是 sql 语句。
另一方面...使用模型和 API 会带来很多版本问题,特别是如果您正在为多个 magento 版本进行开发。另一个问题也是关于 magento 自定义属性的。例如。如果我添加另一个名为“US SPECIAL SHIPPING”的属性,API 会变得非常困难。
如果您不介意...您只需对所有属性进行直接 sql 调用并将它们保存到 xml。这意味着您需要非常非常快的机器来执行此操作。
magento connect 上有一个扩展,它服务于比较引擎。它可能适合您的出口需求。尝试一下。价格比较脚本
<?php
set_time_limit(3000);
ini_set('memory_limit', '-1');
include_once 'app/Mage.php';
umask(0);
Mage::app();
$products = Mage::getModel('catalog/product')->getCollection();
$products->addAttributeToSelect('*');
$products->load();
$baseUrl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
$output = '<?xml version="1.0" encoding="utf-8"?>
<products>';
if (count($products)):
foreach ($products as $id => $product):
$url = $product->getProductUrl();
$output .= '
<product>
<id>'. $product['entity_id'].'</id>
<name><![CDATA['. $product['name'] .']]></name>
<sku>'. $product['sku'] .'</sku>
<description><![CDATA['. $product['description'] .']]></description>
<shortdescription><![CDATA['. $product['short_description'] .']]></shortdescription>
<price><![CDATA['. $product['price'] .']]></price>
<minimalprice>'. $product['minimal_price'] .'</minimalprice>
<weight><![CDATA['. $product['weight'] .']]></weight>
<categories><![CDATA['. $product['categories'] .']]></categories>
<color><![CDATA['. $product['color'] .']]></color>
<condition><![CDATA['. $product['condition'] .']]></condition>
<availability><![CDATA['. $product['availability'] .']]></availability>
<shipping><![CDATA['. $product['shipping'] .']]></shipping>
<url><![CDATA['. $url.']]></url>
<meta><![CDATA['. $product['meta_keyword'] .']]></meta>
<metadescription><![CDATA['. $product['meta_description'] .']]></metadescription>
<manufacturer><![CDATA['. $product['manufacturer'] .']]></manufacturer>
<brand><![CDATA['. $product['brand'] .']]></brand>
<upc><![CDATA['. $product['upc'] .']]></upc>
<mpn><![CDATA['. $product['mpn'] .']]></mpn>
<image><![CDATA['. $baseUrl ."media/catalog/product". $product['image'] .']]> </image>';
if (isset($attributes[$product['entity_id']])) {
$output .= '
<attributes>';
foreach ($attributes[$product['entity_id']] as $attribute => $values)
$output .= '
<attribute>
<name>'. $attribute .'</name>
<values>'. join(', ', $values) . '</values>
</attribute>';
$output .= '
</attributes>';
}
$output .= '
</product>';
endforeach;
endif;
header ("Content-Type: text/xml; charset=ISO-8859-1");
print $output .= '
</products>';
?>