কীভাবে ম্যাজেন্টো 2 তে সমস্ত পণ্যের তালিকা পাবেন?


11

আমি কীভাবে ম্যাজেন্টো 2 তে সমস্ত উপলব্ধ পণ্যগুলির একটি তালিকা পেতে পারি?


আমার উত্তর আপনাকে সাহায্য করেনি?
সিয়ারে উখখলেবাউ

1
এখনই সিয়ারে উচ্ছুলবাউ উত্তরটি সঠিক হিসাবে চিহ্নিত করুন ....
P0lT10n

উত্তর:


22

আপনার নিজের প্রয়োজন অনুযায়ী Magento\Catalog\Model\ProductRepositoryবা ব্যবহার করা উচিত Magento\Catalog\Model\ResourceModel\Product\Collection। আপনি সমস্ত ডেটা দিয়ে পণ্য দৃষ্টান্ত পেতে উভয় পদ্ধতি ব্যবহার করতে পারেন।

উদাহরণ 1 (সংগ্রহশালা):

/**
 * @param \Magento\Catalog\Model\ProductRepository $productRepository
 * @param \Magento\Framework\Api\SearchCriteriaInterface $criteria
 * @param \Magento\Framework\Api\Search\FilterGroup $filterGroup
 * @param \Magento\Framework\Api\FilterBuilder $filterBuilder
 * @param \Magento\Catalog\Model\Product\Attribute\Source\Status $productStatus
 * @param \Magento\Catalog\Model\Product\Visibility $productVisibility
 */
public function __construct(
    \Magento\Catalog\Model\ProductRepository $productRepository,
    \Magento\Framework\Api\SearchCriteriaInterface $criteria,
    \Magento\Framework\Api\Search\FilterGroup $filterGroup,
    \Magento\Framework\Api\FilterBuilder $filterBuilder,
    \Magento\Catalog\Model\Product\Attribute\Source\Status $productStatus,
    \Magento\Catalog\Model\Product\Visibility $productVisibility
) {
    $this->productRepository = $productRepository;
    $this->searchCriteria = $criteria;
    $this->filterGroup = $filterGroup;
    $this->filterBuilder = $filterBuilder;
    $this->productStatus = $productStatus;
    $this->productVisibility = $productVisibility;

    $this->getProductData();
}

/**
 * @return \Magento\Cms\Model\Block|null
 * @throws \Magento\Framework\Exception\NoSuchEntityException
 */
protected function getProductData()
{

    $this->filterGroup->setFilters([
        $this->filterBuilder
            ->setField('status')
            ->setConditionType('in')
            ->setValue($this->productStatus->getVisibleStatusIds())
            ->create(),
        $this->filterBuilder
            ->setField('visibility')
            ->setConditionType('in')
            ->setValue($this->productVisibility->getVisibleInSiteIds())
            ->create(),
    ]);

    $this->searchCriteria->setFilterGroups([$this->filterGroup]);
    $products = $this->productRepository->getList($this->searchCriteria);
    $productItems = $products->getItems();

    return $productItems;
}

ফলাফল:

সংগ্রহস্থলের

উদাহরণ 2 (সংগ্রহ):

/**
 * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
 * @param \Magento\Catalog\Model\Product\Attribute\Source\Status $productStatus
 * @param \Magento\Catalog\Model\Product\Visibility $productVisibility
 * @throws \Magento\Framework\Exception\LocalizedException
 */
public function __construct(
    \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
    \Magento\Catalog\Model\Product\Attribute\Source\Status $productStatus,
    \Magento\Catalog\Model\Product\Visibility $productVisibility
) {
    $this->productCollectionFactory = $productCollectionFactory;
    $this->productStatus = $productStatus;
    $this->productVisibility = $productVisibility;
}

/**
 * @return \Magento\Framework\DataObject[]
 * @throws \Magento\Framework\Exception\LocalizedException
 */
public function getProducts()
{
    /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */
    $collection = $this->productCollectionFactory->create();
    $collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner');
    $collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner');
    $collection->addAttributeToFilter('status', ['in' => $this->productStatus->getVisibleStatusIds()])
        ->addAttributeToFilter('visibility', ['in' => $this->productVisibility->getVisibleInSiteIds()]);

    return $collection->getItems();
}

ফলাফল:

সংগ্রহ


হাই @siarhey, আমি আপনার কোড সহ একটি খালি ফলাফল পাচ্ছি। এটি সম্পর্কে আপনার কোনও পরামর্শ আছে? আমি ক্রোন টাস্ক থেকে তালিকাটি পুনরুদ্ধার করার চেষ্টা করছি বলেই এটি হতে পারে?
লরেঞ্জো এস

@ লোরেঞ্জস হাই, আপনি কোন উদাহরণটি 1 বা 2 ব্যবহার করছেন? আপনি যখন সমস্ত ফিল্টার / শর্ত সরিয়ে ফেলেন তখন কি কোনও পণ্য বিদ্যমান?
সিয়ারে উছুখলেবাউ

আপনার স্ক্রিনশটটিতে অবজেক্ট ট্রি সহ এই "চলক" ট্যাবটি কীভাবে পাবেন?
ডিভনডাহন


দুর্দান্ত উত্তর, @ সিয়ারে উচ্ছুলেবাউ তবে আপনি কী বোঝাতে চাইছেন যদি আপনার প্রয়োজন কেবল পণ্যের ডেটা প্রথম শ্রেণীর ব্যবহার। আপনার যদি পণ্যের উদাহরণগুলি পেতে প্রয়োজন - দ্বিতীয় শ্রেণির ব্যবহার করুন।
ইয়াহিয়া এ। সালাম

2

একটি REST এপিআই কল ব্যবহার করে:

https://{host}/rest/V1/products/?searchCriteria=

সমস্ত পণ্য পুনরুদ্ধার করে। "সার্চক্রিটরিয়া" একটি প্রয়োজনীয় পরম, তবে উপরের মতো ফাঁকা রেখে দেওয়া যেতে পারে।


2

সর্বাধিক উত্সাহিত উত্তরটি কাজ করছে তবে আমি উল্লেখ করতে চাই যে এখানে কোনও পণ্য সংগ্রহস্থল প্রয়োগের মাধ্যমে ইনজেকশনের মাধ্যমে সরাসরি পরিষেবা চুক্তির নীতি লঙ্ঘন হবে এবং এটি ম্যাগেন্টো বিকাশকারীদের সংশোধন করতে চায়। \Magento\Catalog\Api\ProductRepositoryInterface $productRepositoryএটি প্রয়োগের পরিবর্তে আপনার ইঞ্জেকশন করা উচিত যা এটি \Magento\Catalog\Model\ProductRepository $productRepository। এইভাবে আপনার ভবিষ্যতের আপগ্রেড সক্ষমতার জন্য একটি জায়গা থাকবে। নীচে লাইনটি যতটা সম্ভব পরিষেবা চুক্তি ব্যবহার করা হয়।


0

আপনি এপিআই অনুরোধের মাধ্যমে এটি করতে পারেন। ডিফল্ট এম 2 এপি একবার দেখুন

আপনার আরও ভাল অঙ্কুরটি ক্যাটালগের প্রোডাক্টরেপোসিটোরিভি 1 বলে মনে করুন

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