i have created a custom module in magento 2. In which i want to show some banners, Countdown timer and extra details on product page, also label or text on category page. for this i extended the catalog sales rule module. Added some extra field according to my requirements. Now i want to show get all those products ids on which sale rule has applied with all other details like Top Banner, Countdown timer according to sale etc.

My Block Code :

namespace Custom\Sales\Block;

class Flash extends \Magento\Framework\View\Element\Template

public function __construct(
    \Magento\Backend\Block\Template\Context $context,
    \Magento\CatalogRule\Model\ResourceModel\Rule\CollectionFactory $ruleFactory,
    array $data = []
) {
    $this->_ruleFactory = $ruleFactory;
    parent::__construct($context, $data);

public function getCatalogeRuleId()
    $catalogRuleCollection = $this->_ruleFactory->create()
//        return $catalogRuleCollection;
    $resultProductIds = [];
    foreach ($catalogRuleCollection as $catalogRule) {
        $productIdsAccToRule = $catalogRule->getMatchingProductIds();
//            echo json_encode($productIdsAccToRule);exit;
        $websiteId = $this->_storeManager->getStore()->getWebsiteId();

        foreach ($productIdsAccToRule as $productId => $ruleProductArray)
            if (!empty($ruleProductArray[$websiteId])) {
                $resultProductIds[$productId] = $catalogRule->getData();
        return $resultProductIds;

Now when i print my array i get only one sale rule data , however i have created 3 different sales enter image description here

enter image description here

  • if its solved, can you please share the code? – Sagar Parikh SGR Dec 24 '19 at 12:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.