Andere BlueFoot-inhoud migreren | Handleiding voor Adobe Commerce-ontwikkelaars


Standaard migreert de migratiemodule alleen inhoud uit deze tabellen van de Magento-database:

  • CMS-pagina’s
  • CMS-blokken
  • Catalogus Productkenmerken
  • Catalogus Categorie Attributen

Als u BlueFoot-inhoud in andere tabellen hebt, moet u de volgende stappen uitvoeren om die inhoud te migreren.

Vereisten

In dit onderwerp wordt ervan uitgegaan dat je een werkende Magento 2-module hebt. Zo niet, maak dan nu een basisskeletmodule aan en controleer of Magento de module laadt tijdens setup:upgrade.

Stappen voor het migreren van andere inhoud

Dit zijn de basisstappen voor het migreren van BlueFoot-inhoud uit andere databasetabellen:

  1. Voeg de volgende directorystructuur toe aan uw module: Setup/Patch/Data.
  2. Maak een datapatchklasse voor uw migratie. Voorbeeld: MigrateBlogToPageBuilder.php. Magento voert deze klasse uit bij het installeren van uw module.
  3. Implementeer de Magento\Framework\Setup\Patch\DataPatchInterface.
  4. Definieer uw migratielogica binnen de apply() functie.

Voorbeeld van klasse voor gegevenspatch

In het volgende voorbeeld ziet u hoe u bloginhoud die met BlueFoot is gemaakt, kunt migreren:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
declare(strict_types=1);

namespace VendorName\Blog\Setup\Patch\Data;

use Magento\Framework\Setup\Patch\DataPatchInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\DB\AggregatedFieldDataConverter;
use Magento\Framework\DB\Select\QueryModifierFactory;
use Magento\Framework\DB\FieldToConvert;
use Magento\PageBuilderDataMigration\Setup\DataConverter\Format;
use Magento\PageBuilderDataMigration\Setup\DataConverter\BlueFootToPageBuilder;

class MigrateToBlogPageBuilder implements DataPatchInterface
{
    /**
     * @var ModuleDataSetupInterface
     */
    private $moduleDataSetup;

    /**
     * @var AggregatedFieldDataConverter
     */
    private $aggregatedFieldConverter;

    /**
     * @var QueryModifierFactory
     */
    private $queryModifierFactory;

    /**
     * @param ModuleDataSetupInterface $moduleDataSetup
     * @param AggregatedFieldDataConverter $aggregatedFieldConverter
     * @param QueryModifierFactory $queryModifierFactory
     */
    public function __construct(
        ModuleDataSetupInterface $moduleDataSetup,
        AggregatedFieldDataConverter $aggregatedFieldConverter,
        QueryModifierFactory $queryModifierFactory
    ) {
        $this->moduleDataSetup = $moduleDataSetup;
        $this->aggregatedFieldConverter = $aggregatedFieldConverter;
        $this->queryModifierFactory = $queryModifierFactory;
    }

    /**
     * @return DataPatchInterface|void
     * @throws \Magento\Framework\DB\FieldDataConversionException
     */
    public function apply()
    {
        $this->aggregatedFieldConverter->convert(
            [
                new FieldToConvert(
                    BlueFootToPageBuilder::class,
                    $this->moduleDataSetup->getTable('blog'),
                    'blog_id',
                    'content',
                    $this->queryModifierFactory->create(
                        'like',
                        [
                            'values' => [
                                'content' => '%' . Format::BLUEFOOT_KEY . '%'
                            ]
                        ]
                    )
                ),
            ],
            $this->moduleDataSetup->getConnection()
        );
    }

    /**
     * @inheritdoc
     */
    public function getAliases()
    {
        return [];
    }

    /**
     * @inheritdoc
     */
    public static function getDependencies()
    {
        return [];
    }
}

Het belangrijkste onderdeel van deze implementatie is de logica binnen de apply() functie. De functie gebruikt de aggregatedFieldConverter om elk te herhalen blog tafel rij. Voor elke rij voeren we de BlueFootToPageBuilder data-omzetter. En we optimaliseren het door een querymodifier te gebruiken om alleen de BlueFoot-inhoud op te halen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$this->aggregatedFieldConverter->convert(
    [
        new FieldToConvert(
            BlueFootToPageBuilder::class,
            $this->moduleDataSetup->getTable('blog'),
            'blog_id',
            'content',
            $this->queryModifierFactory->create(
                'like',
                [
                    'values' => [
                        'content' => '%' . Format::BLUEFOOT_KEY . '%'
                    ]
                ]
            )
        ),
    ],
    $this->moduleDataSetup->getConnection()
);

Voer uw migratiemodule uit

De bovenstaande wijzigingen worden niet uitgevoerd bij gebruik van bin/magento pagebuilder:migrate. Die opdracht wordt alleen uitgevoerd voor de standaardgebieden die aan het begin van dit onderwerp worden genoemd. Als u uw installatiepatch met een vergelijkbare opdracht wilt uitvoeren, moet u een consoleopdracht voor uw module maken. Anders kunt u de setup:upgrade commando als volgt.

U kunt nu de setup:upgrade commando om uw andere BlueFoot-inhoud te migreren:

1
bin/magento setup:upgrade

Dat is het. Gebruik hetzelfde patroon om BlueFoot-inhoud uit andere tabellen te migreren.

badges

Let’s connect

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