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: rowhet 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 listje 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.

badges

Let’s connect

We hebben altijd zin in nieuwe en uitdagende projecten. We gaan graag met je in gesprek!