2012-02-26 11 views
5

カタログ価格ルールのプロモーションに関連付けられた商品ID(BICYCLESカテゴリのすべての商品の価格の50%など)を取得する方法が必要です。私は、製品データベース全体を反復することなく、これをしたいと思います。Magentoのカタログ価格ルールに関連付けられているすべての製品IDを取得

私は、ルールIDによって、製品IDの配列を返す必要がありgetRuleProductIds($ruleID)と呼ばれる機能がある知っているが、私はどこでそれを関連付けるためにどのコレクション、それを使用するには考えている、など

私が持っていますproducts_in_promotion.phtmlテンプレートに次のコード:

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

$collectionが正しく、すべてのカタログ価格ルールの配列を格納し、それは私が得ることができる限り近いのです。商品リストは見えません。

私がここで間違っていることは何ですか?

答えて

7

コレクションとして取得する必要はありません。必要なルールをロードし、Mage_CatalogRule_Model_Rule(別名catalogrule/rule)のgetMatchingProductIdsを使用してください。

+1

これはまさに私が必要としていたものです。ありがとう、トン。 – 20goto10

+0

ルールを "ロード"するには、IDではなくその名前を使用する方法がありますか? – Obay

+0

$ catalog_rule = Mage :: getModel( 'catalogrule/rule') - > load( 'あなたのルール名'、 '名前'); (参照:http://magento.stackexchange.com/questions/11623/how-to-load-a-catalog-price-rule-by-name) – seanbreeden

0

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

var_dump($skus); 

HTHそれはseanbreedenによって提案されたコードにウェブサイトフィルタを追加した後、私のために働きました。

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

var_dump($skus); 
1

あなたの店には多くの製品がある場合、これは効率的な方法です。 web_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); 
関連する問題