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

Vin*_*res 5 php export magento

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

我将不得不处理一个拥有大约5万个产品和大量流量的商店,我必须将它们导出到具有类别层次结构,sku,描述,图像,product_name,url_path的另一个服务器,之后每小时只获得一次更新的服务器.最好的方法是使用直接的sql调用,但用模型制作它会自杀吗?你认为将它与SOAP API集成将是另一个自杀,我应该在一个单独的PHP中做到这一点吗?

提前非常感谢,我很失落,并为我糟糕的英语Vinicius感到抱歉

kar*_*rto 1

这里有很多考虑因素。我之所以谈论这个,是因为我也有类似的问题。我目前正在使用 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>'; 
?> 
Run Code Online (Sandbox Code Playgroud)