ম্যাজেন্টো 2: পণ্য সংগ্রহের উপর দৃশ্যমানতা এবং স্থিতি ফিল্টার প্রয়োগ করুন


11

আমি পণ্য সংগ্রহের উপর দৃশ্যমানতা এবং স্থিতি ফিল্টার প্রয়োগ করতে চাই। ম্যাজেন্টো 1 এর মতো আমরাও করি:

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

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

আমি ম্যাজেন্টো 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.stackex بدل
সুশীলাম

@ রাকেশ জেসাদিয়া পণ্য তালিকার পৃষ্ঠায় "স্বতন্ত্রভাবে দৃশ্যমান নয়" পণ্যগুলি প্রদর্শন করার কোনও উপায় আছে কি
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/…
এনটিজ

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.