Ich muss einen CMS-Block über ein Installations- / Upgrade-Skript hinzufügen. Ich habe bereits herausgefunden, wie man "normale" CMS-Seiten hinzufügt, wie im folgenden Skript gezeigt. Aber da ich bei Google oder hier keine Möglichkeit finde, CMS-Blöcke in den Code von Magento 2 einzufügen, bin ich ziemlich überfordert.
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();
}
}
Ich verstehe, dass ich nicht alle im $testPage
Array definierten Werte benötige , daher habe ich es auf Folgendes reduziert:
$testPage = [
'title' => 'Test block title',
'identifier' => 'test-block',
'stores' => [0],
'is_active' => 1
'content' => 'Test block content'
];
Weiß jemand, was ich ändern muss, um diese Testseite in einen Testblock zu verwandeln?
Hinweis: Mein Skript basierte auf dem Installationsdatenskript im Magento 2 CMS-Modul in vendor/magento/module-cms/Setup/InstallData.php
.
Antworten:
füge dies zu deiner Klasse hinzu:
und lass deinen Konstruktor so aussehen:
Sie können die
$pageFactory
Abhängigkeit sogar entfernen, wenn Sie sie nicht mehr benötigen.Dann ersetzen Sie:
mit
quelle
Sie können die folgende Lösung ausprobieren:
Fügen Sie dem Konstruktor 2 Klassen hinzu:
Und benutze sie wie folgt:
Der Code funktioniert. Hier ist das Ergebnis für diesen Block:
quelle
Wenn für Ihr Modul ein Upgrade erforderlich ist, verwenden Sie UpgradeData.php und befolgen Sie die folgenden Schritte.
Importieren Sie die Abhängigkeiten wie folgt:
quelle