Necesito agregar un bloque CMS a través de un script de instalación / actualización. Ya he descubierto cómo agregar páginas CMS "normales" como se ve en el script a continuación. Pero como no puedo encontrar ninguna forma de agregar bloques CMS en el código de Magento 2, en Google o aquí, estoy bastante atascado.
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();
}
}
Entiendo que no necesito todos los valores definidos en la $testPage
matriz, así que lo reduje a lo siguiente:
$testPage = [
'title' => 'Test block title',
'identifier' => 'test-block',
'stores' => [0],
'is_active' => 1
'content' => 'Test block content'
];
¿Alguien sabe lo que necesito cambiar para convertir esta página de prueba en un bloque de prueba?
Nota: Basé mi script en el script de datos de instalación en el módulo Magento 2 CMS ubicado en vendor/magento/module-cms/Setup/InstallData.php
.
Respuestas:
agregue esto a su clase:
y haz que tu constructor se vea así:
incluso puede eliminar la
$pageFactory
dependencia si ya no la necesita.Luego reemplace:
con
fuente
Puedes probar la siguiente solución:
Agregue 2 clases al constructor:
Y úselos de la siguiente manera:
El código está funcionando Aquí está el resultado de este bloque:
fuente
Si su módulo requiere actualización, use UpgradeData.php y siga los pasos a continuación.
Importe sus dependencias de la siguiente manera,
fuente