Magento 2: उत्पाद संग्रह पर दृश्यता और स्थिति फ़िल्टर लागू करें


11

मैं उत्पाद संग्रह पर दृश्यता और स्थिति फ़िल्टर लागू करना चाहता हूं। जैसे Magento 1 हम करते हैं:

Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);

Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);

मुझे Magento 2 में उत्पाद संग्रह मिलता है लेकिन उपरोक्त फ़िल्टर लागू करने के लिए फ़ंक्शन नहीं मिलता है।

जवाबों:


16

स्थिति सक्षम और दृश्यता के साथ उत्पाद संग्रह प्राप्त करने के लिए:

आपको ब्लॉक फाइल में नीचे कोड रखना होगा।

protected $productCollectionFactory;
protected $productVisibility;
protected $productStatus;

public function __construct(
    \Magento\Framework\View\Element\Template\Context $context,        
    \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
    \Magento\Catalog\Model\Product\Attribute\Source\Status $productStatus,
    \Magento\Catalog\Model\Product\Visibility $productVisibility,
    array $data = []
)
{
    $this->productCollectionFactory = $productCollectionFactory;
    $this->productStatus = $productStatus;
    $this->productVisibility = $productVisibility;
    parent::__construct($context, $data);
}

public function getProductCollection()
{
    $collection = $this->productCollectionFactory->create();
    $collection->addAttributeToFilter('status', ['in' => $this->productStatus->getVisibleStatusIds()]);
    $collection->setVisibility($this->productVisibility->getVisibleInSiteIds());
    return $collection;
}

दृश्यता प्रकार के लिए काम करने वाले उपरोक्त कोड:

  • VISIBILITY_IN_SEARCH
  • VISIBILITY_IN_CATALOG
  • VISIBILITY_BOTH

मैंने इसी तरह से @ राकेश को लागू किया है, मुझे उत्पादों के परिणामों को फ़िल्टर के अनुसार प्राप्त करने की आवश्यकता है, लेकिन उत्पाद फ़िल्टर के अनुसार नहीं दे रहे हैं ... यहाँ मदद चाहिए ... magento.stackexchange.com/questions / 136959 /…
सुशीवम

@ राकेश जेसादिया क्या उत्पाद सूची पृष्ठ में "व्यक्तिगत रूप से दिखाई नहीं देते" उत्पाद दिखाने का कोई तरीका है
amith lal

मैं करने के लिए फिल्टर कैसे जोड़ सकता हूँ SearchCriteriaBuilderका उपयोग करते समय ProductRepositoryInterface? (देखें Magento.stackexchange.com/a/84347/60128। )
जानिस एल्मरिस

3

यह आपके लिए काम करना चाहिए:

    $collection = $this->collectionFactory->create();

    $collection->addAttributeToFilter('status', ['in' => $this->productStatus->getVisibleStatusIds()]);
    $collection->setVisibility($this->productVisibility->getVisibleInSiteIds());

प्रयुक्त कक्षाएं हैं:

/**
 * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
 */
protected $collectionFactory;

/**
 * @var \Magento\Catalog\Model\Product\Attribute\Source\Status
 */
protected $productStatus;

/**
 * @var \Magento\Catalog\Model\Product\Visibility
 */
protected $productVisibility;

संभावित स्थिति या दृश्यता मान प्राप्त करने के लिए अन्य तरीकों की जाँच करने के लिए इन कक्षाओं की समीक्षा करें।

हालांकि, रिपॉजिटरी की समीक्षा अवधारणा, जहां तक ​​मैंने देखा कि मैगेंटो 2 संग्रह का उपयोग करने के बजाय उत्पाद डेटा तक पहुंचने के लिए रिपॉजिटरी का उपयोग करने की सिफारिश करता है। उदाहरण के लिए:

$searchCriteria = $this->searchCriteriaBuilder->create();

$products = $this->productRepository->getList($searchCriteria)->getItems();

नमस्ते, अगर मेरा सवाल इस के समान है और मैं खोज क्रिटेरिया का उपयोग कर सकता है? मैंने इसे भी आजमाया था लेकिन यह सब टूट गया। magento.stackexchange.com/questions/117112/…
ntzz

1

स्थिति सक्षम और दृश्यता के साथ उत्पाद संग्रह के लिए:

आप नीचे दिए गए कोड के साथ कोशिश कर सकते हैं

protected $productCollectionFactory;
protected $productVisibility;
protected $productStatus;

public function __construct(
    \Magento\Framework\View\Element\Template\Context $context,        
    \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
    \Magento\Catalog\Model\Product\Attribute\Source\Status $productStatus,
    \Magento\Catalog\Model\Product\Visibility $productVisibility,
    array $data = []
)
{
    $this->productCollectionFactory = $productCollectionFactory;
    $this->productStatus = $productStatus;
    $this->productVisibility = $productVisibility;
    parent::__construct($context, $data);
}

public function getProductCollection()
{
    $collection = $this->productCollectionFactory->create();
    $collection->addAttributeToFilter('status', ['in' => $this->productStatus->getVisibleStatusIds()]);
    $collection->setVisibility($this->productVisibility->getVisibleInSiteIds());
    return $collection;
}

दृश्यता प्रकार के लिए काम करने वाले इस कोड के लिए:

VISIBILITY_IN_SEARCH
VISIBILITY_IN_CATALOG
VISIBILITY_BOTH
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.