Podešavanje migracije prilikom nadogradnje na Drupal 8
Kreirajte svoje početne migracije
- Kreirajte migracije koristeći drush migrate-upgrade --configure-only, kao što je opisano u odeljku „Nadogradnja korišćenjem Drush-a“.
- Uverite se da imate config/sync direktorijum u koji će biti snimljen sledeći korak.
- Izvezite migracije koristeći drush config:export.
- Kreirajte svoj sopstveni modul za migraciju.
- Kopirajte samo one YML fajlove koje želite da koristite iz direktorijuma config/sync u config/install direktorijum vašeg novog prilagođenog modula, uređujući ih da uklonite uuid vrednosti i menjajući identifikator, grupu, oznaku i druge vrednosti po potrebi.
- Kopirajte fajl migrate_plus.migration_group.migrate_drupal_7.yml iz config/sync u config/install direktorijum vašeg novog modula, preimenujući ga u migrate_plus.migration_group.your_module.yml. Potreban vam je fajl grupe jer sadrži podešavanja baze podataka.
Upravljanje migracijom
- Počnite migraciju sa korisničkim ulogama i korisnicima pre nego što pređete na čvorove.
- Nastavljajući da dodajete fajlove u config/install direktorijum, ponovo učitajte konfiguraciju koristeći nešto poput drush config-import --partial --source=modules/custom/your_module/config/install (za ovo je potrebno omogućiti Config modul).
Preimenovanje polja prilikom nadogradnje na Drupal 8
Recimo da imate na Drupal 7 sajtu tip sadržaja A sa poljima foo, bar i baz. Takođe, želite da preimenujete polje baz u zot u Drupalu 8. Takve izmene je relativno lako napraviti kada nadograđujete pomoću drush-a.
- Kreirajte migracije koristeći drush migrate-upgrade --configure-only, kao što je navedeno gore.
- Pokrenite migraciju tipa čvora i polja. Ovo će generisati tip sadržaja A i polja foo, bar i baz.
- Ručno kreirajte polje zot u Drupalu 8. Obrišite bazu baz koju su migracije napravile, ali je ne planirate koristiti.
- Priloženi modul Migrate Plus omogućava rad sa migracionim modulima kao konfiguracionim objektima, dozvoljavajući fleksibilno učitavanje, menjanje i čuvanje. Pojedinačne migracije kreirane drush migrate-upgrade --configure-only sada možete pregledati u admin/config/development/configuration/single/export birajući „Migration“ kao tip konfiguracije. Izaberite migraciju za čvorove (A).
- Kopirajte i nalepite migraciju u admin/config/development/configuration/single/import, ali promenite mapiranje polja tako da odredišno polje bude field_zot, dok i dalje mapirate iz polja field_baz. Tačan sadržaj migracije zavisi od tipa polja. Za razumevanje anatomije migracija, pogledajte primere u dokumentaciji Migrate API-ja.
- Nakon što ste uvezli izmenjenu migraciju, možete pokrenuti migraciju za čvorove A pomoću Drush-a i proveriti da li su podaci pravilno prebačeni u polje zot.
- Ponovite ovu promenu mapiranja za migraciju revizija čvora (A), ako planirate da migrirate i revizije čvora.
Drugi način da postignete isti rezultat jeste ručno kreiranje novog polja zot kao što je gore opisano, i izmena mapiranja polja migracije čvorova (A) implementacijom hook_migration_plugins_alter().
Pisanje prilagođenih procesa plugina
Ako treba da definišete sopstvenu logiku transformacije (npr. ako-onda logiku), možete razmotriti pisanje sopstvenog procesa plugina.
Primer u dokumentaciji Migrate API-ja koristi migraciju korisnika kao primer. Za određivanje koda jezika korisnika potrebna je if-else logika kao što je objašnjeno u primeru, pa modul User pruža sopstveni proces plugin UserLangcode.
Gornji primer opisuje kako proces treba da se sačuva u direktorijumu MODULE/src/Plugin/migrate/process i kako ga treba anotirati da bi bio upotrebljiv. Koristite UserLangcode i druge procese plugina kao primere pri pisanju svog!
hook_migrate_prepare_row()
Ako treba da definišete sopstvenu logiku transformacije, možete implementirati hook_migrate_prepare_row() u svom prilagođenom modulu i implementirati logiku tamo.
Kao što API dokumentacija opisuje, hook ima tri argumenta:
- Row $row
- MigrateSourceInterface $source
- MigrationInterface $migration
Kao što je opisano u API dokumentaciji, možete koristiti $migration->id() da ograničite svoju logiku samo na željenu migraciju.
Da biste pročitali izvornu vrednost u promenljivu, koristite Row::getSourceProperty(), na primer ako u izvornom redu postoji svojstvo 'type', možete napisati: $type = $row->getSourceProperty('type');
Da biste postavili potpuno novo svojstvo koje možete koristiti kao izvor u definiciji migracije, koristite Row::setSourceProperty().
Za pravljenje upita bazi podataka izvornog sajta, koristite $source->getDatabase()->query() kao što je prikazano u dokumentaciji za API konekcije.
Da biste preskočili red iz migracije, možete baciti novo izuzetak MigrateSkipRowException.
hook_migration_plugins_alter()
Drugi način da prilagodite migraciju je da implementirate funkciju hook_migration_plugins_alter() u svom prilagođenom modulu.
Kao što API dokumentacija opisuje, ovaj hook ima jedan argument — asocijativni niz svih otkrivenih migracija. Možete menjati migracije ili ukloniti one koje ne želite da izvršavate.
Migrate Plus pruža PREPARE_ROW događaj
Ako više volite da pišete svoje prilagođene odgovore na osnovni handler prepare_row na objektno-orijentisan način umesto implementacije hook_migrate_prepare_row(), to možete učiniti ako vam je omogućen modul Migrate Plus. Migrate Plus pruža događaj PREPARE_ROW na koji vaš pretplatnik može da se prijavi. Drupal 8 API dokumentacija o događajima. Kao primer implementacije pretplatnika na događaje u drugom kontekstu možete pogledati ovaj primer iz Simple FB Connect modula.
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.