Magento 2 - list.phtml এর মাধ্যমে কাস্টম পণ্য সংগ্রহ উপস্থাপন করুন


16

বিভাগের পৃষ্ঠা (ফ্রন্টএন্ড) এর পণ্য গ্রিডটি ক্যাটালগ_ বিভাগে_ভিউ.এক্সএমএল এর লেআউটের মাধ্যমে রেন্ডার করা হয় ।

বলি আমার কাস্টম পণ্য সংগ্রহ রয়েছে (যা আমি পেয়েছি

ProductRepositoryInterface::getList($searchCriteria) method

একটি কাস্টম ব্লক শ্রেণিতে এবং এই সংগ্রহটি রেন্ডার করতে চাই। রেন্ডারড ফলাফলটি ফ্রন্টএন্ডে পণ্য গ্রিড হিসাবে প্রদর্শিত হবে (ঠিক যেমন কোনও বিভাগের পৃষ্ঠার মতো)।

কিভাবে এই কাজ করা যেতে পারে ?

মধ্যে খুঁজছেন দ্বারা catalog_category_view.xmlদুটি উল্লেখযোগ্য লাইন, যা একটি পণ্য সংগ্রহ রেন্ডারিং জন্য দায়ী আছে:

<block class="Magento\Catalog\Block\Category\View" name="category.products" template="Magento_Catalog::category/products.phtml">
<block class="Magento\Catalog\Block\Product\ListProduct" name="category.products.list" as="product_list" template="Magento_Catalog::product/list.phtml">

আমি কীভাবে এই টেমপ্লেট ফাইলগুলিতে আমার কাস্টম পণ্য সংগ্রহ সরবরাহ করতে পারি, যাতে তারা আমার সংগ্রহটি রেন্ডার করে?

আমাকে সংশোধন করুন, আমি যদি এতে ভুল হয়ে থাকি।

আমার ব্লক কোডটি এমনভাবে দেখাচ্ছে:

<?php
namespace Mod\Mod1\Block;
use Magento\Framework\View\Element\Template;
class Main extends Template
{
protected $_filterBuilder;
protected $_filterGroupArray;
protected $_filterGroupBuilder;
protected $_searchCriteriaBuilder;
protected $_productRepository;
protected $_productFactory;
protected $_list;

public function __construct(
    \Magento\Framework\View\Element\Template\Context $context,
    \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
    \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder,
    \Magento\Framework\Api\Search\FilterGroupBuilder $filterGroupBuilder,
    \Magento\Framework\Api\FilterBuilder $filterBuilder,
    \Magento\Catalog\Model\ProductFactory $productFactory,
    array $data = [])
{
    $this->_productRepository = $productRepository;
    $this->_searchCriteriaBuilder = $searchCriteriaBuilder;
    $this->_filterGroupBuilder = $filterGroupBuilder;
    $this->_filterBuilder = $filterBuilder;
    parent::__construct($context, $data);
}

public function getLoadedProductCollection(){
    $searchCrit = $this->buildSearchCriteria('','','','','','5-',1);
    $list = $this->_productRepository->getList($searchCrit);
    return $list;
}
public function buildSearchCriteria(...){
....
return $searchCriteria;
}
}

1
আপনি কি জিজ্ঞাসা করছেন কীভাবে কোনও বিভাগের পৃষ্ঠায় পণ্যগুলি প্রতিস্থাপন করবেন বা মূলত বিভাগের নিয়ামকের অন্য সংস্করণটি কীভাবে রাখবেন?
জোশ ডেভেনপোর্ট

আপনি যদি তালিকা.ফ্টটিএমএল বা সংশ্লিষ্ট ব্লকের মধ্যে সংগ্রহ সম্পাদনা করেন তবে পৃষ্ঠাটি এবং স্তর নেভিগেশন কখনই ঠিক আসে না। সুতরাং আপনি যে উত্তরটি গ্রহণ করছেন তা উপরের দুটি জিনিসই রয়েছে তা নিশ্চিত করুন e
বিবেক কুমার

উত্তর:


1

আপনি এটি চেষ্টা করতে পারেন:

আপনার ক্যাটালগ_ক্যাটগরি_ভিউ.এক্সএমএল আপডেট করুন

<block class="Magento\Catalog\Block\Product\ListProduct" name="category.products.list" as="product_list" template="Magento_Catalog::product/list.phtml">
<block class="Your(Mod)\Namespace(Mod1)\Block\YourBlockFileName(Main)" name="your.category.products.list" template="Magento_Catalog::product/yourFile.phtml" />
</block>

এবং product / list.phtml এ আপনার ফাইল.ফিটএমএল কল করুন:

<?php echo $this->getChildHtml('your.category.products.list'); ?>

এখন, আপনি নিজের ফাংশনটি আপনার ফাইলে.এফটিএমটিএলে এইভাবে ব্যবহার করতে পারেন:

$block->yourfunction();

উদাহরণ:

$block->getLoadedProductCollection();

আশা করি এটি আপনাকে সহায়তা করতে পারে।


1

সর্বোত্তম পন্থাটি হ'ল:

আপডেট করুন আপনার catalog_category_view.xmlএবং প্রতিস্থাপন Magento\Catalog\Block\Product\ListProductসঙ্গেMod\Mod1\Block\Main

আগে:

<block class="Magento\Catalog\Block\Product\ListProduct" name="category.products.list" as="product_list" template="Magento_Catalog::product/list.phtml">

পরে:

block class="Mod\Mod1\Block\Main" name="category.products.list" as="product_list" template="Magento_Catalog::product/list.phtml">

আপনার Mainশ্রেণি প্রসারিত হওয়া আবশ্যকMagento\Catalog\Block\Product\ListProduct

তারপরে getLayer()আপনার নিজের পদ্ধতিটি পুনরায় লিখতে হবে ।

এফওয়াইআই: আপনার ক্লাসে Mod\Mod1\Block\Mainকিছু রিফ্যাক্টরিং দরকার।

আপনার নিজস্ব নতুন Layerক্লাস তৈরি করুন Magento\Catalog\Model\Layerযা সংগ্রহগুলির সাথে প্রসারিত এবং ঘুরে বেড়াবে।

/**
 * Retrieve current layer product collection
 *
 * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
 */
public function getProductCollection()

এবং

/**
 * Initialize product collection
 *
 * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
 * @return \Magento\Catalog\Model\Layer
 */
public function prepareProductCollection($collection)

1

মূলত প্রাথমিকভাবে আপনি একটি নিয়ামক বা এমনকি একটি বেসিক সিএমএস পৃষ্ঠা তৈরি করতে চান যাতে আপনার সংগ্রহটি দেখানোর জন্য আপনার একটি পৃষ্ঠা থাকে।

সেখান থেকে আপনি আপনার কাস্টম ব্লকটি ব্যবহার করতে পারেন যা আপনার পৃষ্ঠায় পণ্যগুলি রেন্ডার করতে list.phtml টেম্পলেট ফাইলের সাথে একত্রে আপনার সংগ্রহ তৈরি করে ।

{{block class="Vendor\Module\Block\ProductCollection" template="Magento_Catalog::product/list.phtml" name="specialproducts"}} 

উপরের এক্সএমএল যুক্ত করুন যেখানে ভেন্ডর \ মডিউল \ ব্লক \ প্রোডাক্ট কালেকশন হল সেই কাস্টম ব্লক কোড যেখানে আপনার সংগ্রহটি সেই পৃষ্ঠার জন্য এক্সএমএল তৈরি করা হয়েছে।

List.phtml ফাইল কোডের লাইন নিচে সঙ্গে আপনার ব্লক থেকে সংগ্রহ তুলে ধরেছেন:

$_productCollection = $block->getLoadedProductCollection();

এতক্ষণ আপনার ব্লকটিতে getLoadedProduct Colલેક્શન () ফাংশনটি রয়েছে আপনার পণ্য সংগ্রহ সংগ্রহ করে list.phtml ফাইলটি আপনার সংগ্রহে থাকা প্রতিটি পণ্যকে ডিফল্ট Magento পণ্য গ্রিডে রেন্ডার করে লুপ করবে।

আপনার ব্লক কোডের জন্য getItems () অন্তর্ভুক্ত করতে লাইনের নীচে আপডেট করার চেষ্টা করুন :

$list = $this->_productRepository->getList($searchCrit)->getItems();

তুমি যেমন বলেছ আমি তা করেছি। আমার ব্লকে 'getLoadedProduct Colલેક્શન ()' ফাংশন রয়েছে যা 'প্রোডাক্টরপোসিটরিআইন্টারফেস :: getList ()' প্রদান করে। তবে আমি একটি ত্রুটি পেয়েছি: অপরিশোধিত ত্রুটি: অপরিজ্ঞাত পদ্ধতিতে কল করুন ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ এপি \ অনুসন্ধান ফলাফল: গণনা () এর মধ্যে ... মনে হচ্ছে এটি সঠিক পদ্ধতির নয় approach
Blackpanther0001

আপডেট হওয়া পোস্টটি দেখুন
ব্ল্যাকপ্যাথার 10001

সম্ভবত $ list = $ এটি -> _ productRepository-> getList ($ searchCrit) -> getItems () পরিবর্তন করার চেষ্টা করুন;
harri

@ শাহিরহাজির আপনি কি getItems দিয়ে চেষ্টা করেছেন?
হারি

কাজ করছে না. $ list = $ এটি -> _ productRepository-> getList ($ searchCrit) -> getItems (); ProductInterface [] অ্যারে প্রদান করে এবং এই অ্যারেটিতে কোনও গণনা () নেই। Uncaught ত্রুটি: সদস্য ফাংশন গণনা অ্যারের সালে list.phtml আমরা আছে লাইন 22 লাইনে 22. উপর ... \ list.phtml মধ্যে Call (): $ _productCollection-> গণনা ()
Blackpanther0001

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