Проверьте, имеет ли продукт правило цены по каталогу


Мне нужно проверить, есть ли у продукта правило цены по каталогу, и если оно есть, ему необходимо отобразить определенный div.

Поэтому мне нужно что-то вроде:

<?php if catalog price rule : ?>
<div>
Text
</div>
<?php endif; ?>

Как я могу этого добиться?

Author: JGeer, 2015-11-09

2 answers

Если у вас не так много правил или продуктов, вы можете попробовать следующее:

$website = Mage::app()->getWebsite();
$product = $this->getProduct();
$rules = Mage::getModel('catalogrule/rule')->getCollection()
    ->addWebsiteFilter($website) //filter rules for current site
    ->addIsActiveFilter(1); //filter active rules

foreach ($rules as $rule) {
    $affectedProductIds = $rule->getMatchingProductIds();
    if (in_array($product->getId(), $affectedProductIds)) {
        //product has a price rule set for it
    }
}

Быстрая и грязная идея заключалась бы в поиске записи в таблице catalogrule_product.
Все продукты, на которые влияют правила каталога, указаны в этой таблице.

$resource = Mage::getSingleton('core/resource');
$connection = $resource->getConnection('core_read');
$tableName = $resource->getTableName('catalogrule_product');
$count = $connection->fetchOne('SELECT COUNT(1) as c FROM '.$tableName.' WHERE product_id = '. $product->getId());

if ($count == 1) { 
    //you have a rule for the product
}

Но это не лучшая практика.

 6
Author: Marius, 2016-04-27 06:11:48

Старый вопрос, но для тех, кто ищет, это кажется эффективным методом:

$product = $this->getProduct();
Mage::getModel('catalogrule/rule')->loadProductRules($product);
var_dump($product->getMatchedRules());

См. Mage_CatalogRule_Model_Rule для справки.

 4
Author: BlueC, 2017-11-08 11:31:05