Nachytření na Czech Online Expo
Navštívili jsme Czech Online Expo. A jak bylo? To si…
Číst dál
Stabilní verze Drupalu 8 je tady s námi již poměrně dlouho dobu. Oproti Drupalu 7 přináší obrovké množství změn (k lepšímu), které jsou dostupné již v základní instalaci Drupalu 8. Mezi tyto vlastnosti patří mimo jiné i migrace. Drupal 8 umožňuje relativně jednoduchým způsobem zmigrovat Drupal z verze 6 nebo 7 do verze 8. Migrate API definuje sadu procesů, kterými je možné data různě transformovat a upravit, aby se dosáhlo potřebné struktury v Drupalu 8. Tyto “transformace” je schopen Drupal vyrobit sám (za pomoci dalších modulů), pokud migrujeme ze starší verze Drupalu, ale obvykle nejsou úplně dokonalé a je potřeba provést nějaké manuální úpravy.
Jednotlivé migrace se definují pomocí yaml souborů. V těchto souborech se definují i “transformace” (v řeči Drupalu procesy), které se v rámci migrace mají provést. Všechny potřebné informace k migraci jsou pěkně zdokumentovány na drupal.org (https://www.drupal.org/docs/8/api/migrate-api).
Samotný proces (tedy co se má jako upravit/změnit atd.) se definuje pomocí pluginů. V základu je celá sada těchto pluginů, které jsou často naprosto dostačující pro celou migraci. Nicméně v praxi se často objeví případ, na který stávající pluginy nestačí.
Jedním ze zmiňovaných process pluginů je static map plugin. Tento plugin umožňuje definovat, jaké vlastnosti se mají na co mapovat. Tedy například pokud mám ve starém systému nějakou hodnotu A, ze které se má stát v novém systému hodnota B (A->B), mohu použít právě tento plugin. Pomocí static map je možné nadefinovat libovolné množství těchto mapování. Kompletní dokumentaci včetně příkladů najdete zde https://www.drupal.org/docs/8/api/migrate-api/migrate-process/process-plugin-static-map
Pokud si projdete dokumentaci static map pluginu, tak úplně na konci se dočtete, že v současné době static map nepodporuje mapování řetězců obsahující tečku (viz screenshot z dokumentace).
V současné době existuje vlákno na řešení tohoto problému (https://www.drupal.org/node/2827897), ale do vyřešení totoho úkolů je doporučené vytvořit si vlastní plugin.
Jedna z možností jak vyřešit tento problém je vytvoření placeholderu pro tečku a vytvoření vlastního pluginu, který tento placeholder převedu na tečku. Takový plugin může vypadat například takto:
V zásadě se jedná o klasický static map plugin, který je lehce rozšířený o placeholder a o převod tototo placeholderu na tečku. Samotné použití tohoto pluginu lze poté v yaml souborů použít takto:
Celý modul s pluginem pro mapování teček pomocí placeholderu je dostupný zde https://github.com/FreelyAgency/drupal8-migrate-process-static-map-dots
Pokud tedy přemýšlíte, zda aktualizovat starý web na nový, Drupal 8 vám vychází dost razantně naproti a celý proces migrace zjednodušuje.