Magento2'de bir blok nasıl başlatılır


Yanıtlar:


20

ESKİ: CEVAP MAGENTO 2 ALPHA'YI SEVİYOR


Keşke bu kadar kolay olsaydı.
Nereden başlatmak istediğinize bağlıdır.
Başka bir bloğun içinden bir örnek oluşturmak istiyorsanız bunu şu şekilde yapın:

$this->getLayout()->createBlock('Full\Block\Class\Name\Here');

Bir denetleyicinin içinden bunu yapın:

 $this->_view->getLayout()->createBlock('Full\Block\Class\Name\Here');

Bir modelin içinden:

 $this->_blockFactory->createBlock('Full\Block\Class\Name\Here');

ama burada bir av var.
adlı modelde korumalı bir üye oluşturmanız _blockFactoryve kurucuya bir örneğini enjekte \Magento\Framework\View\Element\BlockFactoryetmeniz ve bu üyeye atamanız gerekir.

Bunun gibi bir şey:

protected $_blockFactory;
public function __construct(
   ...,
   \Magento\Framework\View\Element\BlockFactory $blockFactory,
   ....
){
    ....
    $this->_blockFactory = $blockFactory;
    ....
}

Bir bloğun bir yardımcı içinden örneklenmesi için modeldeki ile aynı şekilde çalışır


Ne kadar basit o kadar iyi
Matoeil

@Marius $ toplink = $ this-> getLayout () -> getBlock ('top.links') -> toHtml (); magento 1 için magento 2 için kullanın $ this -> _ view-> getLayout () -> getBlock (Full \ Block \ Class \ Name \ Here ') -> toHtml (); Bu böyle bir hata vermek Önemli hata: Bir nesne olmayan bir üye toHtml () üye işlevini çağırmak nasıl toHtml () alabilirim?
ND17

Bir denetleyicideyseniz, için bir şey enjekte etmenize gerek yoktur _view. Artık kullanımdan kaldırılmış olduğunu düşünüyorum, ancak varsayılan olarak kullanılabilir olmalıdır. Bu yanıtı 1.5 yıl önce yazdım
Marius

1
@SachinS. Bunu artık kullanmamalısın. _viewşimdi kontrolörlerde kullanımdan kaldırıldı ve yakında gidecek,
Marius

1
Bunun gibi pagefactory nesnesini kullanarak arayabilir miyim? $ viewPanelPageFactory = $ this-> resultPageFactory->) (oluşturmak; $ viewPanel = $ viewPanelPageFactory-> getLayout () -> getBlock ('catalog.leftnav') -> toHtml ();
Sushivam

13

Bir bloğu başlatmak için \Magento\Framework\View\LayoutInterfacesınıf ve createBlock()yöntemini kullanmanız gerekir .

Bir yardımcı sınıf ile bunu şu kodla yapabilirsiniz:

namespace Vendor\Module\Helper;

class Data extends \Magento\Framework\App\Helper\AbstractHelper
{

    /**
     * Layout
     *
     * @var \Magento\Framework\View\LayoutInterface
     */
     protected $_layout;


    /**
     *
     */
     public function __construct(
        \Magento\Framework\App\Helper\Context $context,
        \Magento\Framework\View\LayoutInterface $layout
     ) {
         $this->_layout = $layout;
         parent::__construct($context);
     }


    /**
     * Create new block
     */
     public function getBlock() {

        $block = $this->_layout
            ->createBlock('Magento\Framework\View\Element\Template')
            ->setTemplate('Vendor_Module::helper/block.phtml');

        return $block;

     }

}

Sonra $helper->getBlock()ihtiyacınız olan yerden arayın .

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.