在Magento中获得商店的产品价格和描述

时间:2013-01-16 14:30:19

标签: magento

我试图获得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 产品ID 商店ID ,这样我就完成了所需的任务。

现在我的问题从这里开始,当有很多产品和许多商店出现性能问题时,加载过程使这个问题变慢。

还有其他方法可以达到同样的效果吗?

2 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:-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,甚至是提取适配器的方法,而不是集合,以防查询速度加快。