什么是出口巨大的Magento目录的最佳方式

时间:2012-07-05 00:23:22

标签: php magento export

我正在阅读大量有关Magento API,Magento模型和Direct SQL调用的文档。正如我读到的那样,第一个结论是直接sql调用会非常快,但我必须特别注意安全性,并且模型的使用使开发更快更容易,但另一方面,它失去了操作巨大的性能目录。

我将不得不与一家拥有约5万件产品的商店打交道。流量很大,我必须将它们导出到另一个具有类别层次结构,sku,description,image,product_name,url_path的服务器,然后每小时只获取一次更新的服务器。最好的方法是使用直接的sql调用,但用模型制作它会自杀吗?你认为将它与SOAP API集成将是另一种自杀,我应该在一个单独的PHP中实现它吗?

提前非常感谢,我很失落,对不起我的英语不好 维尼

3 个答案:

答案 0 :(得分:1)

1)针对50K产品的实时服务器上的soap api将非常慢。
2)由于EAV结构,直接sql调用编写起来会非常麻烦 3)为防止​​占用活动服务器,取一个数据库的只读副本,用它在本地/另一台服务器上安装magento。并努力。

答案 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’);

它完美无缺!