Kisi produk dari halaman kategori (frontend) diberikan melalui tata letak di catalog_category_view.xml .
Katakanlah saya memiliki koleksi produk khusus (yang saya dapat via
ProductRepositoryInterface::getList($searchCriteria) method
dalam kelas blok khusus dan ingin merender koleksi ini. Hasil yang diberikan harus ditampilkan sebagai kisi-kisi produk di frontend (sama seperti halaman kategori mana pun).
Bagaimana ini bisa dilakukan?
Dengan melihat catalog_category_view.xml
ada dua garis signifikan, yang bertanggung jawab untuk merender koleksi produk:
<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">
Bagaimana saya bisa memberikan koleksi produk khusus saya ke file template ini, sehingga mereka membuat koleksi saya?
Perbaiki saya, jika saya salah dalam hal ini.
Ini adalah bagaimana kode blok saya terlihat:
<?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;
}
}
magento-2.1
custom
product-collection
render
shahir hajir
sumber
sumber
Jawaban:
Anda dapat mencoba ini:
Perbarui catalog_category_view.xml Anda
Dan hubungi yourFile.phtml di produk / list.phtml:
Sekarang, Anda dapat menggunakan fungsi Anda di file.phtml Anda seperti ini:
Contoh:
Semoga ini bisa membantu Anda.
sumber
Pendekatan terbaik adalah:
Perbarui
catalog_category_view.xml
dan gantiMagento\Catalog\Block\Product\ListProduct
denganMod\Mod1\Block\Main
sebelum:
setelah:
Main
Kelas Anda HARUS diperluasMagento\Catalog\Block\Product\ListProduct
Maka Anda perlu menulis ulang metode
getLayer()
untuk Anda sendiri.Buat
Layer
kelas baru Anda sendiri yang akan diperluasMagento\Catalog\Model\Layer
dan bermain-main dengan koleksi.dan
sumber
Pada dasarnya Anda ingin membuat controller atau bahkan halaman CMS dasar sehingga Anda memiliki halaman untuk menunjukkan koleksi Anda.
Dari sana Anda dapat menggunakan blok khusus yang membuat koleksi Anda digabungkan dengan file template list.phtml untuk membuat produk di halaman Anda.
Tambahkan xml di atas tempat Vendor \ Module \ Block \ ProductCollection adalah kode blok khusus tempat koleksi Anda dibuat untuk xml untuk halaman itu.
File list.phtml mengumpulkan koleksi dari blok Anda dengan baris kode di bawah ini:
Selama blok Anda memiliki fungsi getLoadedProductCollection () mengembalikan koleksi produk Anda, file list.phtml kemudian akan mengulangi setiap produk dalam koleksi Anda, merendernya di kotak produk Magento default.
Untuk kode blok Anda, coba perbarui baris di bawah ini untuk memasukkan getItems () :
sumber
Anda dapat membuat koleksi produk dalam file phtml Anda seperti ini
sumber