J'ai besoin d'ajouter un bloc CMS via un script d'installation / mise à niveau. J'ai déjà compris comment ajouter des pages CMS "normales" comme indiqué dans le script ci-dessous. Mais comme je ne trouve aucun moyen d'ajouter des blocs CMS dans le code de Magento 2, sur Google ou ici, je suis assez coincé.
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();
}
}
Je comprends que je n'ai pas besoin de toutes les valeurs définies dans le $testPage
tableau, je les ai donc supprimées comme suit:
$testPage = [
'title' => 'Test block title',
'identifier' => 'test-block',
'stores' => [0],
'is_active' => 1
'content' => 'Test block content'
];
Quelqu'un sait-il ce que je dois changer pour transformer cette page de test en bloc de test?
Remarque: J'ai basé mon script sur le script de données d'installation dans le module CMS Magento 2 situé dans vendor/magento/module-cms/Setup/InstallData.php
.
Réponses:
ajoutez ceci à votre classe:
et faites ressembler votre constructeur à ceci:
vous pouvez même supprimer la
$pageFactory
dépendance si vous n'en avez plus besoin.Remplacez ensuite:
avec
la source
Vous pouvez essayer la solution suivante:
Ajoutez 2 classes au constructeur:
Et utilisez-les de la manière suivante:
Le code fonctionne. Voici le résultat pour ce bloc:
la source
Si votre module nécessite une mise à niveau, utilisez UpgradeData.php et suivez les étapes ci-dessous.
Importez ses dépendances comme suit,
la source