2012-02-26 94 views
5

我需要一種方法來檢索與目錄價格規則促銷相關的產品ID(例如BICYCLES類別中所有項目的價格的50%)。我想這樣做,而不必遍歷整個產品數據庫。檢索與Magento中的目錄價格規則關聯的所有產品ID

我知道有一個叫getRuleProductIds($ruleID)功能,應該由規則ID返回產品ID數組,但我不知道在哪裏使用它,它收集到它與聯想等

我有在products_in_promotion.phtml模板下面的代碼:

<?php 
    $rules = Mage::getModel('catalogrule/rule'); 
    $collection = $rules->getCollection(); 
    $sale_items = $collection->getRuleProductIds(1); # ??????? this throws an error 
?> 

$collection妥善保存所有的目錄價格規則的數組,但那是因爲這是我所能得到的。目前沒有產品清單。

任何想法我在做什麼錯在這裏?

回答

7

你不必把它作爲一個集合。只需加載您想要的規則並使用getMatchingProductIds(如Mage_CatalogRule_Model_Rule(又名catalogrule/rule))。

$catalog_rule = Mage::getModel('catalogrule/rule')->load(1); // Rule ID 
$skus = $catalog_rule->getMatchingProductIds(); 

var_dump($skus); 

心連心

+1

這正是我所需要的。萬分感謝。 – 20goto10 2012-02-28 20:28:48

+0

有沒有辦法通過使用名稱而不是ID「加載」規則? – Obay 2013-12-09 05:19:19

+0

$ catalog_rule = Mage :: getModel('catalogrule/rule') - > load('Your rule name','name'); (請參閱:http://magento.stackexchange.com/questions/11623/how-to-load-a-catalog-price-rule-by-name) – seanbreeden 2013-12-09 12:06:57

0

它爲我添加的網站過濾器,以通過seanbreeden建議的代碼之後。

$catalog_rule = Mage::getModel('catalogrule/rule')->load(1); // Rule ID 
$catalog_rule->addWebsiteFilter('1'); 
$skus = $catalog_rule->getMatchingProductIds(); 

var_dump($skus); 
1

如果您的商店中有很多產品,那麼這是有效的方法。您可以將website_id,custom_group_id添加到更具體的類中。

$resource = Mage::getSingleton('core/resource'); 
$connection = $resource->getConnection('core_read'); 
$tableName = $resource->getTableName('catalogrule_product'); 
$productIdList = $connection->fetchAll('SELECT product_id as product_id FROM '.$tableName.' WHERE rule_id = 1); 
相關問題