Magento 2 - Danh sách cuộc gọi phtml bằng cách chuyển biến bộ sưu tập


10

Tôi có bộ sưu tập được tải trong biến $collectionvà tôi muốn chuyển biến bộ sưu tập tronglist.phtml

$block = $viewBlock->getLayout()
                ->createBlock('Vendor\Module\Block\ProductList')
                ->setTemplate('Magento_Catalog::product/list.phtml')
                ->toHtml();

Vì vậy, list.phtmltạo danh sách sản phẩm theo bộ sưu tập của tôi. Truy vấn của tôi là làm thế nào tôi có thể chuyển biến bộ sưu tập tớilist.phtml

Lưu ý: Tôi không muốn thay đổi bất kỳ điều gì trong danh sách phtml, nó cũng bao gồm việc gọi bất kỳ chức năng tùy chỉnh nào từ đối tượng khối. Bộ sưu tập sản phẩm của tôi phải được tải theo chức năng mặc định đã có trong danh sách phtml, tức là:$_productCollection = $block->getLoadedProductCollection();

Câu trả lời:


10

Trước tiên, bạn cần tạo khối Vendor\Module\Block\ProductList.phpbằng cách ghi đè hàm này _getProductCollection()bằng cách mở rộng lớp của bạn từ đây Magento\Catalog\Block\Product\ListProduct.

protected function _getProductCollection()
{   
        /* Do whatever you want to do with your collection */  

        $this->_productCollection = $yourcollection;
        return $this->_productCollection;
}

Bây giờ bạn có thể gọi ptmltập tin của bạn . Bộ sưu tập của bạn đã được chuyển đến đóphtml

$block = $viewBlock->getLayout()
                ->createBlock('Vendor\Module\Block\ProductList')
                ->setTemplate('Magento_Catalog::product/list.phtml')
                ->toHtml();

Tôi hy vọng điều này sẽ giúp những người khác


3

thử cách này ....

   $block = $viewBlock->getLayout()
                    ->createBlock('Vendor\Module\Block\ProductList')
                    ->setCustomvalue('111111')
                    ->setTemplate('Magento_Catalog::product/list.phtml')
                    ->toHtml();

và bạn có thể nhận được giá trị

$block->getCustomvalue();

Cảm ơn câu trả lời, nhưng tôi không muốn chuyển bất kỳ giá trị tùy chỉnh nào vào list.phtml. Tôi muốn vượt qua bộ sưu tập sản phẩm để danh sách mặc định magento sẽ hiển thị danh sách sản phẩm với bộ sưu tập đó.
Muhammad Hasham

bạn có thể vượt qua trong bộ sưu tập biến cũng thử điều đó
Rakesh Donga

đã cố gắng vượt qua nó bằng cách sử dụng ->setCollection($collection)nhưng nó không hoạt động. Những gì tôi đang cố gắng nói tôi không cần thay đổi bất kỳ điều gì trong danh sách phtml, nó cũng bao gồm cả cuộc gọi.
Muhammad Hasham

2

$blockBiến của bạn chứa nội dung list.phtmlvì vậy ở đây bạn vừa gọi nó.

Điều đó list.phtmlcó chứa $_productCollectionrằng nó lấy nó từ mô-đun block, trong $blockbạn có thể làm bất cứ điều gì trong bộ sưu tập đó vì bộ sưu tập đã được tải, đã quá muộn để cập nhật nó ở cấp độ này.

Những gì bạn có thể làm là viết lại khối đó Magento_Catalog\Block\Product\ListProduct.phpvà sau đó, bạn có thể cập nhật bộ sưu tập.


2

Tôi đã sử dụng mã dưới đây để gửi dữ liệu Sản phẩm đến tệp phtml bằng cách sử dụng plugin. và nó đang hoạt động tốt.

namespace Namespace\Modulename\Plugin\Catalog\Product;
use Namespace\Modulename\Helper\Data;

class ListProduct
{

    /**
     * @var Data
     */
    private $dataHelper;

    /**
     * @var \Magento\Framework\View\LayoutInterface
     */
    protected $layout;   
    public function __construct(        
        \Magento\Framework\View\LayoutInterface $layout,
        Data $dataHelper
    ) {        
        $this->layout = $layout;         
        $this->dataHelper = $dataHelper;
    }

    public function afterGetProductDetailsHtml(
        \Magento\Catalog\Block\Product\ListProduct $subject,
        $result,
        \Magento\Catalog\Model\Product $product
    ) {
        if($this->dataHelper->isEnabled()){
            $result .= $this->layout->createBlock('Namespace\Modulename\Block\Label')->setProduct($product)->setTemplate('Namespace_Modulename::product/test.phtml')->toHtml();
        }
        return $result;        
    }
}

Lưu ý: Trong đoạn mã trên ->setProduct($product)tôi đã sử dụng để đặt dữ liệu sản phẩm. Tôi nghĩ bạn có thể sử dụng ->setCollection()để đạt được điều của mình. bạn có thể thử với cách này nó có thể giúp ích.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.