2012-02-26 16 views
5

Necesito una forma de recuperar identificadores de productos asociados con una promoción de regla de precios de catálogo (por ejemplo, el 50% del precio de todos los artículos en la categoría BICICLETAS). Me gustaría hacer esto sin tener que iterar a través de toda la base de datos del producto.Recuperar todos los ID de producto asociados con una regla de precio de catálogo en Magento

sé que hay una función llamada getRuleProductIds($ruleID), que debe devolver una matriz de ID de productos por ID de regla, pero no tengo ni idea de dónde usarlo, que la colección de asociarse con, etc.

tengo el siguiente código en una plantilla products_in_promotion.phtml:

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

$collection almacena adecuadamente una matriz de todas las reglas Catálogo de precios, pero eso es lo más cerca que pueda conseguir. No hay una lista de productos a la vista.

¿Alguna idea de lo que estoy haciendo mal aquí?

Respuesta

7

No tiene que obtenerlo como una colección. Simplemente cargue la regla que desee y use getMatchingProductIds como se encuentra en Mage_CatalogRule_Model_Rule (también conocido como catalogrule/rule).

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

var_dump($skus); 

hth

+1

Eso es exactamente lo que necesitaba. Gracias una tonelada. – 20goto10

+0

¿Hay alguna manera de "cargar" una regla usando su nombre y no su ID? – Obay

+0

$ catalog_rule = Mage :: getModel ('cataloguele/rule') -> load ('Su nombre de regla', 'nombre'); (ver: http://magento.stackexchange.com/questions/11623/how-to-load-a-catalog-price-rule-by-name) – seanbreeden

0

que trabajó para mí después de añadir filtro de página web con el código sugerido por seanbreeden.

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

var_dump($skus); 
1

Si tiene muchos productos en su tienda, esta es la forma más eficiente. Puede agregar website_id, custom_group_id en where class para ser más específico.

$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); 
Cuestiones relacionadas