Мне нужно добавить блок CMS через скрипт установки / обновления. Я уже разобрался, как добавить «нормальные» страницы CMS, как показано в скрипте ниже. Но так как я не могу найти способ добавить блоки CMS в код Magento 2, в Google или здесь, я довольно застрял.
namespace [Vendor]\[Module]\Setup;
use Magento\Cms\Model\Page;
use Magento\Cms\Model\PageFactory;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\UpgradeDataInterface;
class UpgradeData implements UpgradeDataInterface
{
/**
* Page factory.
*
* @var PageFactory
*/
private $pageFactory;
/**
* Init.
*
* @param PageFactory $pageFactory
*/
public function __construct(PageFactory $pageFactory)
{
$this->pageFactory = $pageFactory;
}
/**
* Upgrade.
*
* @param ModuleDataSetupInterface $setup
* @param ModuleContextInterface $context
*/
public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
$setup->startSetup();
if (version_compare($context->getVersion(), '0.0.1') < 0) {
$testPage = [
'title' => 'Test page title',
'identifier' => 'test-page',
'stores' => [0],
'is_active' => 1,
'content_heading' => 'Test page heading',
'content' => 'Test page content',
'page_layout' => '1column'
];
$this->pageFactory->create()->setData($testPage)->save();
}
$setup->endSetup();
}
}
Я понимаю, что мне не нужны все значения, определенные в $testPage
массиве, поэтому я сократил его до следующего:
$testPage = [
'title' => 'Test block title',
'identifier' => 'test-block',
'stores' => [0],
'is_active' => 1
'content' => 'Test block content'
];
Кто-нибудь знает, что мне нужно изменить, чтобы превратить эту тестовую страницу в тестовый блок?
Примечание: мой сценарий основан на сценарии данных установки в модуле CMS Magento 2, расположенном в vendor/magento/module-cms/Setup/InstallData.php
.
Ответы:
добавьте это к вашему классу:
и сделайте ваш конструктор похожим на это:
Вы даже можете удалить
$pageFactory
зависимость, если она вам больше не нужна.Затем замените:
с
источник
Вы можете попробовать следующее решение:
Добавьте 2 класса в конструктор:
И используйте их следующим образом:
Код работает. Вот результат для этого блока:
источник
Если ваш модуль требует обновления, используйте UpgradeData.php и выполните следующие шаги.
Импортируйте его зависимости следующим образом:
источник