5

私は、Magento の API、Magento のモデル、および直接 SQL 呼び出しに関する大量のドキュメントを読んでいます。私がそれを読んでいたとき、最初の結論は、直接のSQL呼び出しは非常に高速であるということですが、セキュリティには特別な注意を払う必要があり、モデルを使用すると開発がより迅速かつ簡単になりますが、一方で、巨大な操作でパフォーマンスが低下しますカタログ。

約 50,000 の商品とトラフィックの多いショップに対処する必要があり、カテゴリ階層、sku、説明、画像、product_name、url_path を使用して別のサーバーにエクスポートする必要があり、1 時間に 1 回更新されたもののみを取得した後. 最善のアプローチは、SQL を直接呼び出すことですが、モデルでそれを行うのは自殺行為でしょうか? また、それを SOAP API と統合することは別の自殺行為になると思いますか? これを行うには、別の PHP で作成する必要がありますか?

どうもありがとう

4

3 に答える 3

1

ここには多くの考慮事項があります。私は同様の問題を抱えているので、私はこれについて話している。現在、SQL を使用して、magento ストアから xml にデータを取得しています。確かに、フェッチしている属性がわかっている場合にのみ、SQLを使用すると高速になります。例えば。製品に 15 の属性がある場合、SQL を使用して 50k x 15 の属性を意味します。ただし、SQL ステートメントを使用しているため、少なくともバージョンの問題は発生しません。

一方...モデルとAPIを使用すると、特に複数のmagentoバージョンを開発している場合、多くのバージョンの問題が発生します. もう 1 つの問題も、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>'; 
?> 
于 2012-07-05T12:22:29.130 に答える
1

1) 50K 製品のライブ サーバー上の SOAP API は非常に遅くなります。
2) EAV 構造のため、SQL の直接呼び出しは作成が非常に面倒です
。3) ライブ サーバーの占有を防ぐために、データベースの読み取りレプリカを取得し、それを使用してローカル/別のサーバーに magento をインストールします。そしてそれに取り組みます。

于 2012-07-05T12:10:41.550 に答える
1

I had the exact same problem when exporting my Magento products to Google Shopping. It always timed out (probably due to having too many products in my feed).

After doing some research into magento exporting, I tried changing my php.ini settings to these values:

ini_set(’max_execution_time’,’1800’);
ini_set(’memory_limit’,’1024M’);

and it worked perfectly!

于 2014-06-26T23:39:28.727 に答える