Saya perlu menambahkan blok CMS melalui skrip install / upgrade. Saya sudah menemukan cara menambahkan halaman CMS "normal" seperti yang terlihat dalam skrip di bawah ini. Tetapi karena saya tidak dapat menemukan cara untuk menambahkan blok CMS dalam kode Magento 2, di Google atau di sini, saya cukup macet.
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();
}
}
Saya mengerti bahwa saya tidak memerlukan semua nilai yang didefinisikan dalam $testPage
array, jadi saya menghapusnya sebagai berikut:
$testPage = [
'title' => 'Test block title',
'identifier' => 'test-block',
'stores' => [0],
'is_active' => 1
'content' => 'Test block content'
];
Adakah yang tahu apa yang perlu saya ubah untuk menjadikan halaman pengujian ini menjadi blok uji?
Catatan: Saya mendasarkan skrip saya pada skrip data instal di modul Magento 2 CMS yang terletak di vendor/magento/module-cms/Setup/InstallData.php
.
Jawaban:
tambahkan ini ke kelas Anda:
dan buat konstruktor Anda terlihat seperti ini:
Anda bahkan dapat menghapus
$pageFactory
ketergantungan jika Anda tidak membutuhkannya lagi.Kemudian ganti:
dengan
sumber
Anda dapat mencoba solusi berikut:
Tambahkan 2 kelas ke konstruktor:
Dan gunakan dengan cara berikut:
Kode berfungsi. Inilah hasil untuk blok ini:
sumber
Jika modul Anda memerlukan peningkatan, gunakan UpgradeData.php dan ikuti langkah-langkah di bawah ini.
Impor dependensinya sebagai berikut,
sumber