Inhoud migreren van aangepaste blokken
In dit onderwerp wordt beschreven hoe u inhoud van uw aangepaste BlueFoot-blokken migreert naar aangepaste inhoudstypen van Page Builder.
De voorbeeldcode die in dit onderwerp wordt gebruikt, is voor het migreren van de gegevens voor een aangepast BlueFoot-blok met de naam list
.
Vereisten
In dit onderwerp wordt ervan uitgegaan dat u de volgende acties heeft ondernomen:
-
De kern BlueFoot-blokken gemigreerd
-
Maak uzelf vertrouwd met onze renderers voor inhoudstypes.
-
Vertrouwd met de levenscyclus van de module.
-
Uw aangepaste BlueFoot-blok opnieuw geïmplementeerd als een nieuw inhoudstype Page Builder.
Deze voorwaarde is het meest tijdrovend. Maar met een zorgvuldige planning kunt u een eenvoudigere versie van uw BlueFoot-blok bouwen in Page Builder.
Stap 1: Verhoog versie
Verhoog uw module’s version
in de composer.json
het dossier.
Dit zorgt ervoor dat Magento de installatiescripts van uw module uitvoert tijdens het migratieproces.
Volg het versiebeleid van Magento bij het bepalen van de waarde van de volgende versie van uw module.
Stap 2: Afhankelijkheid van Page Builder toevoegen
Voeg de . toe Magento_PageBuilder
module afhankelijkheid van uw composer.json
en module.xml
bestanden.
Hiermee krijgt uw module tijdens de migratie toegang tot de benodigde migratie-API.
Stap 3: Bouw de renderer
De renderer bevat de gegevensconversiecode voor uw inhoudstype. Het converteert de BlueFoot JSON naar het HTML-opslagformaat dat wordt gebruikt door Page Builder-inhoudstypen.
Maak de volgende klasse onder Setup/DataConverter/Renderer
en implementeer de volgende interface:
1
Magento\PageBuilder\Setup\DataConverter\RendererInterface
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
namespace VendorName\ModuleName\Setup\DataConverter\Renderer;
use Magento\PageBuilder\Setup\DataConverter\RendererInterface;
use Magento\PageBuilder\Setup\DataConverter\EavAttributeLoaderInterface;
use Magento\PageBuilder\Setup\DataConverter\StyleExtractorInterface;
class List implements RendererInterface
{
/**
* @var EavAttributeLoaderInterface
*/
private $eavAttributeLoader;
public function __construct(
EavAttributeLoaderInterface $eavAttributeLoader
) {
$this->eavAttributeLoader = $eavAttributeLoader;
}
/**
* {@inheritdoc}
*/
public function render(array $itemData, array $additionalData = [])
{
$eavData = $this->eavAttributeLoader->load($itemData['entityId']);
return '<div>Your output HTML here</div>';
}
}
Stap 4: Voeg renderer toe aan de RenderPool
De RenderPool
wijst BlueFoot-blokken toe aan de renderers die hun inhoud migreren. U vindt de bestaande renderers in app/code/Magento/PageBuilderDataMigration/etc/di.xml
.
De migratiemodule gebruikt de RenderPool
in de di.xml
bestand om de renderer te vinden die moet worden uitgevoerd voor een bepaald bloktype. Als de migratiemodule bijvoorbeeld een BlueFoot-entiteitstype van: row
het zoekt naar de naam row
in de RenderPool
. Als het de naam vindt, voert het de bijbehorende renderer uit om de rij-inhoud te migreren.
Dezelfde logica is van toepassing op uw Op maat BlueFoot blokken. Als de naam van uw aangepaste blok is list
je moet het toevoegen aan de RenderPool
in je module’s di.xml
het dossier. Als u het niet toevoegt, zal de migratiemodule uw inhoud niet migreren van uw list
blok.
1
2
3
4
5
6
7
<type name="Magento\PageBuilder\Setup\DataConverter\RendererPool">
<arguments>
<argument name="renderers" xsi:type="array">
<item name="list" xsi:type="object">VendorName\ModuleName\Setup\DataConverter\Renderer\List</item>
</argument>
</arguments>
</type>
:arrow_up: Voorbeeld: Lijst renderer di.xml
binnenkomst
Stap 5: Migratie uitvoeren
Als je de migratiemodule nog niet hebt uitgevoerd, doe dat dan nu met de volgende opdracht:
1
bin/magento setup:upgrade
Stap 6: Een nieuwe installatiepatch toevoegen
Maak een nieuwe gegevenspatch inline met onze declaratieve schemadocumentatie. Voor deze migratie declareren we eerst de volgende afhankelijkheden in de constructor:
Magento\Framework\EntityManager\MetadataPool
Magento\Framework\DB\AggregatedFieldDataConverter
Magento\Framework\DB\Select\QueryModifierFactory
Magento\Framework\DB\FieldToConvert
Magento\PageBuilder\Setup\DataConverter\MixedToPageBuilder
De migratiemodule migreert de inhoud van onbekende BlueFoot-blokken naar inhoudstypen met HTML-code. Om deze inhoud naar andere inhoudstypen te migreren, gebruikt u de MixedToPageBuilder
data-omzetter.
Het volgende voorbeeld gebruikt de MixedToPageBuilder
class om inhoud van CMS-pagina’s (cms_page), CMS-blokken (cms_block), productkenmerken (catalog_product_entity_text) en cataloguskenmerken (catalog_category_entity_text) om te zetten:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$pageMetadata = $this->metadataPool->getMetadata(PageInterface::class);
$blockMetadata = $this->metadataPool->getMetadata(BlockInterface::class);
$this->aggregatedFieldConverter->convert(
[
new FieldToConvert(
DataConverter\MixedToPageBuilder::class,
$this->setup->getTable('cms_page'),
$pageMetadata->getIdentifierField(),
'content',
$this->createQueryModifier('content', Format::BLUEFOOT_KEY)
),
new FieldToConvert(
DataConverter\MixedToPageBuilder::class,
$this->setup->getTable('cms_block'),
$blockMetadata->getIdentifierField(),
'content',
$this->createQueryModifier('content', Format::BLUEFOOT_KEY)
),
new FieldToConvert(
DataConverter\MixedToPageBuilder::class,
$this->setup->getTable('catalog_product_entity_text'),
'value_id',
'value',
$this->createQueryModifier('value', Format::BLUEFOOT_KEY)
),
new FieldToConvert(
DataConverter\MixedToPageBuilder::class,
$this->setup->getTable('catalog_category_entity_text'),
'value_id',
'value',
$this->createQueryModifier('value', Format::BLUEFOOT_KEY)
)
],
$this->setup->getConnection()
);
Stap 7: Voer de migratie opnieuw uit
Voer de volgende opdracht uit om het migratieproces van uw module te starten:
1
bin/magento setup:upgrade
Volgende stappen
Als u inhoud in andere tabellen heeft, gaat u verder met de volgende stap: Migreer andere BlueFoot-inhoud.