Liste sayfasına özel blok ekle: Magento2


10

Özel bloğumu [Magento-2] listeleme sayfasına eklemek istiyorum, ancaklist.phtml.phtml dosyada veya dosyada herhangi bir değişiklik yapmadan . xmlDosya kullanma imkanı var mı ?

resim açıklamasını buraya girin

Herhangi bir yardım takdir edilecektir.


Harika makale. Orijinal giriş sayfasını geçersiz kılmak için test.phtml'de daha fazla ayrıntı genişletir misiniz? Magento 2'de yeni bir

Test.phtml dosyasındaki grid üzerinde 'block' NEW bloğunu eklemek için getProductDetailsHtml () işlevini nasıl kullanabilirim?
Kllee

Yanıtlar:


10

Bu bloğu geçersiz kılmak için yeni bir modül oluşturursanız bunu yapabilirsiniz: vendor\magento\module-catalog\Block\Product\ListProduct.php

bu bloğu geçersiz kılmak için di.xml,app\code\Vendor\Module_Name\etc

di.xml içerik:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Catalog\Block\Product\ListProduct" type="Vendor\Module_Name\Block\Product\ListProduct" />
</config>

Yeni bir dosya adı oluşturma ListProduct.phpatapp\code\Vendor\Module_Name\Block\Product

ListProduct.php içerik:

namespace Vendor\Module_Name\Block\Product;
class ListProduct extends \Magento\Catalog\Block\Product\ListProduct
{
    public function getProductDetailsHtml(\Magento\Catalog\Model\Product $product)
    {
        $html = $this->getLayout()->createBlock('Magento\Framework\View\Element\Template')->setProduct($product)->setTemplate('Vendor_ModuleName::test.phtml')->toHtml();
        $renderer = $this->getDetailsRenderer($product->getTypeId());
        if ($renderer) {
            $renderer->setProduct($product);
            return $html.$renderer->toHtml();
        }
        return '';
    }
}

Sen blok değiştirebilir Magento\Framework\View\Element\Templatesenin bloğuna

test.phtmldosya oluşturapp\code\Vendor\Module_Name\view\frontend\templates


Benden +1 bilgi için teşekkürler ... Ama geçersiz kılmadan başarabilir miyiz?
Keyur Şah

@KeyurShah, özel bloğunuzu liste sayfasına eklemek için şu ana kadar Mage 2.0'daki en iyi yöntemin üstünde mi? Ayrıca, ürün çıktısı list.phtml'de sabit olarak kodlandığı için Kandy ile de aynı fikirdeyim.
Slimshadddyyy

@Vikram şimdiye kadar, bu şimdiye kadar en iyi yöntem olduğunu düşünüyorum ve benim için de iyi çalışıyor ..
Keyur Shah

@KeyurShah, di.xmlyukarıdaki yöntemi kullanarak bunu zaten geçersiz kıldım . Şimdi özel özellik değerimi liste sayfasında nasıl görüntüleyebilirim?
Slimshadddyyy

@Vikram, özel özelliğinizi görüntülemek için Mageev2 kodunu kullanabilirsiniz. Yani test.phtml'de $ product nesnesini ve $ product nesnesinden öznitelik değerini kolayca alabilirsiniz.
Keyur Shah

4

Şu anda bunu yapamazsınız çünkü ürün çıktısının tüm mantığı list.phtmlşablonda sabit kodlanmıştır .


Evet, biliyorum, Ama bunun için herhangi bir kanca veya hile var mı? Btw, bilgi için teşekkürler.
Keyur Şah

0

İşte benim çözüm almak - ama list.phtmlşablonu değiştirmeniz gerekir :

catalog_category_view.xml

<referenceBlock name="category.products.list">
    <block class="Magento\Catalog\Block\Product\ProductList\Item\Container" name="custom.block.container" as="custom-block-container">
        <block class="Magento\Catalog\Block\Product\ProductList\Item\Block" name="custom.block" as="custom-block"
           template="Magento_Catalog::product/view/custom-block.phtml" />
    </block>
</referenceBlock>

In custom-block.phtmlsize böyle ürün alabilirsiniz:

$_product = $block->getProduct();

list.phtmlYine de şablonun üzerine yazmanız gerekecek ... Bunu, özel bloğunuzun göstermesini istediğiniz yere ekleyin:

<?php if ($customBlock = $block->getChildBlock('custom-block-container')): ?>
    <?= $customBlock->setProduct($_product)->getChildHtml() ?>
<?php endif; ?>

Eğer varsa gerçekten değiştirerek önlemek istiyorsanız list.phtmlşablonu, o zaman da benzer bir şey yapmak mümkün ama farklı bir şablonda olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.