php - 导出大型 Magento 目录的最佳方式是什么

标签 php magento export

我正在阅读大量关于 Magento 的 API、Magento 的模型和直接 SQL 调用的文档。当我阅读这篇文章时,第一个结论是直接调用 sql 会更快,但我必须特别注意安全性,模型的使用使开发更快更容易,但另一方面,它会损失性能操作巨大目录。

我将不得不处理一个拥有大约 50k 产品和大量流量的商店,我必须将它们导出到另一个具有类别层次结构、sku、描述、图像、产品名称、url_path 的服务器,然后它只获得更新的每小时一次。最好的方法是使用直接的 sql 调用,但是使用模型来实现它会自杀吗?您是否认为将它与 SOAP API 集成将是另一种自杀行为,我应该在单独的 PHP 中实现它?

提前 super 感谢,我对此很迷茫,抱歉我的英语不好 维尼修斯

最佳答案

这里有很多注意事项。我说这个是因为我有一个类似的问题。我目前正在使用 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>'; 
?> 

关于php - 导出大型 Magento 目录的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11336604/

相关文章:

PHP MySQL 多文件上传

css - 想要更改 Magento go 标题部分

javascript - Highcharts:导出图表中的重叠列

pdf - ssrs 报告查看器与导出的 pdf 页数

php - Codeigniter-MySql : Join three column values of one table with the ID of another table

php - 选择带有 php 和 mysql 的 Html

php - ajax获取url参数并查询mysql数据

api - 在 magento 中使用 SOAP API 的 salesOrderInfo 获取简单的产品 sku 和 qty

Magento 2.3.5-p1 由于内容安全策略,前端为空白

excel - 如何使用 PROC EXPORT 导出到 Excel 中的多个选项卡