magento - 如何根据特价供应情况加载特定类别的产品?

标签 magento magento-1.7 magento-1.8 magento-1.4

我有以下代码

$promoCatId = (int)Mage::getStoreConfig('promoprodsec/promoprodgroup/promocategoryid');

$products = Mage::getModel('catalog/category')->setStoreId($store)->load($promoCatId)
    ->getProductCollection();

$allProductsInPromoCategory = $products->getAllIds();

它为我提供了 $promoCatId 类别的所有产品。

现在我想从$allProductsInPromoCategory的所有产品中获取所有没有特价或特价日期范围已过期的产品

如何在不使用 foreach 循环并再次加载每个产品集合的情况下实现此目的?

foreach ($allProductsInPromoCategory as $promoprod) {
    Mage:getModel('catalog/product')->load( $promoprod);

    //do validation for the special price criteria
}

最佳答案

一旦您声明->getProductCollection()在您的类别中,您最终会得到 Mage_Catalog_Model_Resource_Product_Collection 类型的对象,这基本上是一个像其他产品一样的产品集合。

由于该集合是一个EAV集合,因此您可以借助函数addAttributeToFilter对其进行过滤。

既然你实际上想要一个 OR ( where special price is null or special to date <= now() ),您希望两个条件相同 addAttributeToFilter

所以我想说你可以通过这样做来实现这一点:

$promoCatId  = (int)Mage::getStoreConfig('promoprodsec/promoprodgroup/promocategoryid');

$products = Mage::getModel('catalog/category')
                ->setStoreId($store)
                ->load(promoCatId)
                ->getProductCollection()
                ->addAttributeToFilter(
                    array(
                        array('attribute' => 'special_price', 'null' => true),
                        array('attribute' => 'special_from_date', 'lt' => Mage::getModel('core/date')->date(Varien_Date::DATETIME_PHP_FORMAT))
                    )
                );

$allProductsInPromoCategory = $products->getAllIds();

echo $products->getSelect();

有用的知识:

  • 我实际上正在使用 Mage::getModel('core/date')->date(Varien_Date::DATETIME_PHP_FORMAT)获取相对于商店配置的区域设置时区的当前日期
  • echo $products->getSelect();在集合上将显示 Magento 完成的查询,这对于实际查看是否是您真正想要的位置非常有用。就我而言,它显示:

SELECT `e`.*, `cat_index`.`position` AS `cat_index_position`, `at_special_price`.`value` AS `special_price`, IF(at_special_from_date.value_id > 0, at_special_from_date.value, at_special_from_date_default.value) AS `special_from_date` FROM `catalog_product_entity` AS `e` INNER JOIN `catalog_category_product_index` AS `cat_index` ON cat_index.product_id=e.entity_id AND cat_index.store_id=1 AND cat_index.category_id = '15' INNER JOIN `catalog_product_entity_decimal` AS `at_special_price` ON (`at_special_price`.`entity_id` = `e`.`entity_id`) AND (`at_special_price`.`attribute_id` = '76') AND (`at_special_price`.`store_id` = 0) INNER JOIN `catalog_product_entity_datetime` AS `at_special_from_date_default` ON (`at_special_from_date_default`.`entity_id` = `e`.`entity_id`) AND (`at_special_from_date_default`.`attribute_id` = '77') AND `at_special_from_date_default`.`store_id` = 0 LEFT JOIN `catalog_product_entity_datetime` AS `at_special_from_date` ON (`at_special_from_date`.`entity_id` = `e`.`entity_id`) AND (`at_special_from_date`.`attribute_id` = '77') AND (`at_special_from_date`.`store_id` = 1) WHERE ((at_special_price.value IS NULL) OR (IF(at_special_from_date.value_id > 0, at_special_from_date.value, at_special_from_date_default.value) < '2016-01-08 22:05:14'))

关于magento - 如何根据特价供应情况加载特定类别的产品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34681568/

相关文章:

magento - 如何在单页/结帐/成功中设置模板

php - Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);导致 fatal error

php - 获取在 magento 中应用的税收规则的名称

php - 玛根托 : Problem in Importing the csv file

php - 让寻呼机显示在 magento 列表上

magento - Magento Enterprise 上的高流量期间 Nginx + PHP-FPM 变慢

magento - 如何删除 Magento 自定义订单状态

php - 创建一个随机的 Magento 优惠券

Magento:取消发货订单后增加 "Qty"

magento - 尝试导入网站时 OpenERP Magento 集成失败