Как вы называете блоки в контроллере Magento2?
-
13-12-2019 - |
Вопрос
Я хочу генеракодицетагкод.Так как это сделать?
Редактировать
в контроллере.
namespace Addon\Faq\Controller\Category;
class View extends \Addon\Faq\Controller\Category
{
/**
* @var \Magento\Framework\Controller\Result\ForwardFactory
*/
protected $_coreRegistry = null;
/**
* @var \Magento\Framework\View\Result\PageFactory
*/
protected $resultPageFactory ;
/**
* @param \Magento\Backend\App\Action\Context $context
* @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
*/
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Framework\View\Result\PageFactory $resultPageFactory,
\Magento\Framework\Registry $registry
) {
$this->resultPageFactory = $resultPageFactory;
$this->_coreRegistry = $registry;
parent::__construct($context);
}
/**
* Product list page
*
* @return \Magento\Backend\Model\View\Result\Page
*/
public function execute()
{
$resultPage = $this->resultPageFactory ->create();
$blockInstance = $resultPage->getLayout()->getBlock('category.index');
}
}
.
<Сильная> Макет в Frontend
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="content">
<block class="Addon\Faq\Block\Faq" name="category.index" template="Addon_Faq::view.phtml"/>
</referenceContainer>
</body>
</page>
.
Это не заблокировать FAQ
Решение
Ваш возврат ничего в вашей команде execute.Возврат результат в вашем контроллере
$resultPage = $this->resultPageFactory->create();
return $resultPage;
.
Ваше имя XML должно быть faq_category_view.xml.
Другие советы
Если вы хотите создать интеракцию блока, необходимо добавить в Inject в конструкторе экземпляра \Magento\Framework\View\LayoutFactory
...
protected $layoutFactory;
...
public function __construct(
...
\Magento\Framework\View\LayoutFactory $layoutFactory,
...
) {
...
$this->layoutFactory = $layoutFactory;
...
}
.
Тогда вы можете создать такое содержание блока:
$this->layoutFactory->create()->createBlock('Block\Class\Here');
.
Если вы хотите получить доступ к блоку, определенному в макете, вам необходимо ввести в конструктор и экземпляр \Magento\Framework\View\Result\PageFactory
...
protected $resultPageFactory;
...
public function __construct(
...
\Magento\Framework\View\Result\PageFactory $resultPageFactory,
...
) {
...
$this->resultPageFactory = $resultPageFactory;
...
}
.
Тогда вы сможете получить доступ к блоку:
$resultPage = $this->resultPageFactory->create();
$blockInstance = $resultPage->getLayout()->getBlock('block.name.here');
. -
Создать блок:
<?php namespace Training\Test\Block; class Test extends \Magento\Framework\View\Element\AbstractBlock { protected function _toHtml() { return "<b>Hello world from block!</b>"; } }
-
Создать класс действий:
<?php namespace Training\Test\Controller\Block; class Index extends \Magento\Framework\App\Action\Action { public function execute() { $layout = $this->_view->getLayout(); $block = $layout->createBlock('Training\Test\Block\Test'); $this->getResponse()->appendBody($block->toHtml()); } }
См. Основным кодом:
Шаг 1
public function __construct(
\Magento\Backend\App\Action\Context $context,
\Magento\Framework\View\Result\PageFactory $resultPageFactory,
) {
parent::__construct($context);
$this->resultPageFactory = $resultPageFactory;
}
.
Шаг 2
/** @var \Magento\Backend\Model\View\Result\Page $resultPage */
$resultPage = $this->resultPageFactory->create();
.
Шаг 3
$block = $resultPage->getLayout()->getBlock('catalog.wysiwyg.js');
.