3

私は、magento のさまざまなストアの製品価格と説明を取得しようとしています。次のようにこれを達成できます:-

foreach ($productObj->getStoreIds() as $_storeId) {
                $tempStoreObj = new Mage_Core_Model_Store();
                $tempStoreObj->load($_storeId);

                $tempProductObj = new Mage_Catalog_Model_Product();
                $tempProductObj->setStoreId($_storeId);
                $tempProductObj->load($productObj->getId());


                $tempPriceArray[] = array(
                    'websiteId' => $tempStoreObj->getWebsiteId(),
                    'price' => $tempProductObj->getPrice(),
                    'baseCurrency' => $tempStoreObj->getBaseCurrencyCode(),
                );
                $tempDescArray[]=array(
                'descprition' => $tempProductObj->getData('description'),
                'shortDescription' => $tempProductObj->getData('short_description'),
                );

            }

上記のコードでは、最初に特定の製品のストアをフェッチし、次にストアをロードしてから、製品のオブジェクトを再度作成し、wrt product idstore idをロードしました。このようにして、必要なタスクを達成しました。

多くの製品と多くのストアのパフォーマンスの問題が発生し、読み込みプロセスがこれを遅くするときに、私の問題がここから始まります。

同じことを達成する他の方法はありますか?

4

2 に答える 2

0

複数の製品からこれを取得したい場合にスピードアップするためにできることの 1 つは、製品コレクションを使用することです。そのため、すべての製品についてストアごとに情報をフェッチする DB クエリは 1 つだけです。

これは次のようになります。

$storeId = 1; // Current Store you want to look at
$productIds = array(10,15,26); // Enter your Ids
$product    = Mage::getModel('catalog/product');
$products   = $product->getCollection()
              ->addStoreFilter($storeId)
              ->addAttributeToFilter('entity_id', array('in' => $productIds))
              ->addAttributeToSelect('price')
              ->addAttributeToSelect('description');

そして、製品をループします。

$currPrices = array();
foreach ($products as $prod) {
   $currPrices[$prod->getId()] = $prod->getPrice();
}

複数の店舗で明確にするために:

$currPrices = array();
$currDescriptions = array();
foreach ($productObj->getStoreIds() as $_storeId) {
    $productIds = array(10,15,26); // Enter your Ids
    $product    = Mage::getModel('catalog/product');
    $products   = $product->getCollection()
                  ->addStoreFilter($_storeId)
                  ->addAttributeToFilter('entity_id', array('in' => $productIds))
                  ->addAttributeToSelect('price')
                  ->addAttributeToSelect('description');

    foreach ($products as $prod) {
       $currPrices[$_storeId][$prod->getId()] = $prod->getPrice();
       $currDescriptions[$_storeId][$prod->getId()] = $prod->getDescription();
    }
}
于 2013-01-16T14:40:59.430 に答える
-2

The fastest way is to make direct queries (of course, wrapped to Zend_Db_Select) to store and product tables.

base_currency can be got from core_config_data

product prices can be found in catalog_category_product_index

description in catalog_product_entity_text

Look to

Mage_Reports_Model_Resource_Product_Index_Abstract
Mage_Reports_Model_Resource_Report_Product_Viewed_Collection
Mage_Reports_Model_Resource_Report_Product_Viewed
Mage_Reports_Model_Resource_Quote_Collection

Magento uses Zend_Db_Select, even fetch methods of the adapter, not collections, in case of increasing speed of queries.

于 2013-01-16T14:45:50.970 に答える