Preciso adicionar um bloco CMS por meio de um script de instalação / atualização. Eu já descobri como adicionar páginas CMS "normais", como visto no script abaixo. Mas como não consigo encontrar nenhuma maneira de adicionar blocos CMS no código do Magento 2, no Google ou aqui, estou bastante atolado.
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();
}
}
Entendo que não preciso de todos os valores definidos na $testPage
matriz, então reduzi-o para o seguinte:
$testPage = [
'title' => 'Test block title',
'identifier' => 'test-block',
'stores' => [0],
'is_active' => 1
'content' => 'Test block content'
];
Alguém sabe o que eu preciso alterar para transformar essa página de teste em um bloco de teste?
Nota: Baseei meu script no script de instalação de dados no módulo Magento 2 CMS localizado em vendor/magento/module-cms/Setup/InstallData.php
.
Respostas:
adicione isso à sua classe:
e faça seu construtor ficar assim:
você pode até remover a
$pageFactory
dependência se não precisar mais dela.Substitua então:
com
fonte
Você pode tentar a seguinte solução:
Adicione 2 classes ao construtor:
E use-os da seguinte maneira:
O código está funcionando. Aqui está o resultado para este bloco:
fonte
Se o seu módulo precisar de atualização, use UpgradeData.php e siga as etapas abaixo.
Importe suas dependências da seguinte maneira,
fonte