我正在阅读大量有关Magento API,Magento模型和Direct SQL调用的文档。正如我读到的那样,第一个结论是直接sql调用会非常快,但我必须特别注意安全性,并且模型的使用使开发更快更容易,但另一方面,它失去了操作巨大的性能目录。
我将不得不与一家拥有约5万件产品的商店打交道。流量很大,我必须将它们导出到另一个具有类别层次结构,sku,description,image,product_name,url_path的服务器,然后每小时只获取一次更新的服务器。最好的方法是使用直接的sql调用,但用模型制作它会自杀吗?你认为将它与SOAP API集成将是另一种自杀,我应该在一个单独的PHP中实现它吗?
提前非常感谢,我很失落,对不起我的英语不好 维尼
答案 0 :(得分:1)
答案 1 :(得分:1)
这里有很多考虑因素。我说的是因为我有类似的问题。我目前正在使用SQL将数据从magento商店获取到xml。确实,只有了解了要获取的属性,使用sql才能使其更快。例如。如果你的产品有15个属性,那意味着使用sql的50k x 15属性。但至少你可以免于版本问题,因为你正在使用sql语句。
另一方面......使用模型和API会产生很多版本问题,特别是如果您正在开发几个magento版本。另一个问题是关于magento自定义属性。例如。如果我添加另一个名为“US SPECIAL SHIPPING”的属性,那么使用API变得相当困难。
如果您不介意......您只需对所有属性进行直接sql调用并将其保存到xml。这意味着你需要非常快速的机器才能做到这一点。
magento connect有一个扩展,用于比较引擎。它可能适合您的出口需求。试试吧。 price comparison script
<?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>';
?>
答案 2 :(得分:1)
将Magento产品导出到Google购物时,我遇到了同样的问题。它总是超时(可能是因为我的Feed中有太多的产品)。
在对magento exporting进行一些研究后,我尝试将php.ini设置更改为以下值:
ini_set(’max_execution_time’,’1800’);
ini_set(’memory_limit’,’1024M’);
它完美无缺!