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

当您想从多个产品中获取此信息时,您可以做的一件事是使用产品集合来加快速度,因此只有一个数据库查询可以获取所有产品的每个商店的信息。

然后看起来像这样:

$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

最快的方法是直接查询(当然,包装到 Zend_Db_Select)来存储和产品表。

base_currency 可以从 core_config_data 获得

产品价格可在 catalog_category_product_index 中找到

catalog_product_entity_text 中的描述

看向

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 使用 Zend_Db_Select,甚至获取适配器的方法,而不是集合,以防查询速度加快。

于 2013-01-16T14:45:50.970 回答