public function createCollection() { /** @var $ collection \Magento\Catalog\Model\ResourceModel\Product\Collection */ $ collection = $ this->productCollectionFactory->create();
if ($ this->getData('store_id') !== null) { $ collection->setStoreId($ this->getData('store_id')); } $ collection->setVisibility($ this->catalogProductVisibility->getVisibleInCatalogIds()); $ collection = $ this->_addProductAttributesAndPrices($ collection) ->addStoreFilter() ->addAttributeToSort('created_at', 'desc') ->setPageSize($ this->getPageSize()) ->setCurPage($ this->getRequest()->getParam($ this->getData('page_var_name'), 1)); $ conditions = $ this->getConditions(); $ conditions->collectValidatedAttributes($ collection); $ this->sqlBuilder->attachConditionToCollection($ collection, $ conditions); /** * Prevent retrieval of duplicate records. This may occur when multiselect product attribute matches * several allowed values from condition simultaneously */ $ collection->distinct(true); return $ collection; } /** * Get conditions * * @return \Magento\Rule\Model\Condition\Combine */ protected function getConditions() { $ conditions = $ this->getData('conditions_encoded') ? $ this->getData('conditions_encoded') : $ this->getData('conditions'); if ($ conditions) { $ conditions = $ this->conditionsHelper->decode($ conditions); } foreach ($ conditions as $ key => $ condition) { if (!empty($ condition['attribute']) && in_array($ condition['attribute'], ['special_from_date', 'special_to_date']) ) { $ conditions[$ key]['value'] = date('Y-m-d H:i:s', strtotime($ condition['value'])); } } $ this->rule->loadPost(['conditions' => $ conditions]); return $ this->rule->getConditions(); }
i foud solution in core magento/catalogwidget/block/product. how do i filter product list follow condition in custom module.