Migration Drupal-6 nach Drupal-7

Von neffets, 18. Dezember 2020

Ich betreibe mittlerweile einige Drupal-Installationen, wovon die meisten noch mit Drupal-6 laufen.

Für ein Upgrade steht nun Drupal-7 und Drupal-8 zur Verfügung und es gibt sowohl von 6-nach-7, als auch für 6-nach-8 einen Migrationsweg.

(Für Drupal 6 / Drupal 7 nach 8 Migration )

1. Vor einem Upgrade sind nun die Verfügbarkeit von zusätzlich genutzten Modulen zu prüfen.

(Module die nach 2017 nicht mehr aktualisiert wurden, sind aussortiert)

Module short name Version_6.x Version_7.x Version_8.x notwendig?
Administration menu admin_menu 6.x-1.9 7.x-3.0-rc6 (2018) Admin-Toolbar ja
Administration theme admin_theme 6.x-1.3 7.x-1.1 (2020) nicht notwendig
Advanced help advanced_help 6.x-1.3 7.x-1.6 (2020) 8.x-1.0 (2021) veraltet
Authcache authcache 6.x-1.0-rc2 7.x-2.4 (2021) - - - nutzt memcache oder redis
Conditional fields conditional_fields 6.x-2.0 7.x-3.x-dev (2016) 4.x-dev (2022) vermeiden
Chaos Tools ctools nicht notw., 6.x-1.15 7.x-1.20 (2022) 8.x-3.7 (2021) ja (für views)
Date date 6.x-2.10 7.x-2.12 (2021) (teils im core)
Devel devel 6.x-1.28 7.x-1.7 (2021) 4.1.5 (2022)
Diff diff 6.x-2.3 7.x-3.4 (2018) 8.x-1.0 (2020)
FileField Paths filefield_paths 6.2-2.x-dev 7.x-1.1 (2018) 8.x-1.0-beta5 (2020) vermeiden, use core file field only?
IFrame iframe 6.x-1.12 7.x-1.14 (2021) 8.x-2.16 (2022) ja
jQuery UI jquery_ui 6.x-1.5 - (core) 8.x-1.4 (2020) see: jquery_update 7.x-2.7
Localization update l10n_update 6.x-1.0-beta4 7.x-2.6 (2021) - (in core)
Libraries API libraries 6.x-1.0 7.x-2.5 (2018) 8.x-3.0-beta2 (2021)
Markdown markdown 6.x-1.4 7.x-1.6 (2020) 3.0.0-rc2 (2021) ja
Memcache memcache 6.x-1.12 7.x-1.8 (2020) 8.x-2.3 (2021) (used with authcache)
Password Policy password_policy 6.x-1.11 7.x-2.0-alpha8 (2018) 8.x-3.1 (2021)
Pathauto pathauto 6.x-2.1 7.x-1.3 (2015) 8.x-1.10 (2022) ja
Print / Print PDF print 6.x-1.19 7.x-2.2 (2018) new printable 2.1.3 ja
Schema (überprüft Schema API) schema 6.x-1.7+8-dev 7.x-1.3 (2017) 8.x-1.x-dev/2.0.0-alpha1 (2021) (zeigt deinstallierte tables)
Token token 6.x-1.19 7.x-1.9 (2022) 8.x-1.10 (2021) (basic in core) ja
Typogrify typogrify 6.x-1.0 7.x-1.0-rc10 (2015) 8.x-1.1 (2020) ICH will das!
Views views 6.x-2.18 / 6.x-3.2 7.x-3.25 (2021) ist nun im Core ja, Achtung: in D6 vorher auf Views-3 aktualisieren!
----- -----
----- -----
----- NICHT mehr verwendete MODULE
ACL acl 6.x-1.4 7.x-1.2 (2019) 8.x-1.0-beta1 (2021)
Advanced Forum advanced_forum 6.x-2.0-beta1 7.2-2.8 (2019) 8.x-1.x-dev ja
Browscap browscap 6.x-2.1 7.x-2.3 (2016) 8.x-3.0-alpha2
Charts charts 6.x-1.0 7.x-2.1 (2018) 8.x-3.3 (2021)
Content Access content_access 6.x-1.2 7.x-1.2-beta3 (2020) 8.x-1.0-alpha3 (2020) vermeiden
Edit Limit edit_limit 6.x-1.2 7.x-1.4 (2021) 1.0.x-dev (2022)
External Link extlink 6.x-1.17 7.x-1.21 (2020) 8.x-1.6 (2021)
Forum Access forum_access 6.x-1.8 7.x-1.4 (2019) 8.x-1.x-dev (2021)
Global Redirect globalredirect 6.x-1.5 7.x-1.6 (2018) - - - veraltet
IMCE imce 6.x-2.7 7.x-1.11 (2017) 8.x-2.4 (2021)
Internationalization i18n 6.x-1.10 7.x-1.31 (2021) - (in core for all) requires module:variable
Link link 6.x-2.11 7.x-1.9 (2021) / in core in core
Linkchecker linkchecker 6.x-2.9 7.x-1.4 (2018) 8.x-1.x-dev (2022)
Login Security login_security 6.x-1.4 7.x-1.9 (2014) (8.x-1.5) 2.0.0 (2019)
Password Strength password_strength 6.x-2.x-dev 7.x-1.1 (2018) 8.x-2.0-beta1 (2021) oder password_policy
Quote quote 6.x-1.2 7.x-2.0 (2021) 3.0.0 (2022)
Redirect redirect - - - 7.x-1.0-rc4 (2021) 8.x-1.7 (2021)
Rules rules 6.x-1.5 7.x-2.13 (2021) 8.x-3.0-alpha7 (2021)
Shariff shariff - 7.x-1.2 (2016) 8.x-1.7 (2020) Projekt von "c't"
Spamicide spamicide 6.x-1.12 (2011) 7.x-1.3 (2020) 8.x-1.x-dev (2021)
Subscription subscription 6.x-1.5 7.x-1.4 (2021) 2.0.x-dev (2022)
Wysiwyg wysiwyg 6.x-2.8 (2019) 7.x-2.9 (2022) - (in core with ckeditor) (ckeditor, ...)
XML Sitemap xmlsitemap 6.x-2.1 7.x-2.6 (2018) 8.x-1.2 (2021)

Veraltete Module (<2016)

Module short name Version_6.x Version_7.x Version_8.x notwendig?
Author Pane author_pane 6.x-2.3 7.x-2.0 (2014) 8.x-3.x-dev
CCK cck 6.x-2.10 7.x-3.0-alpha3 (2013) - (in core) ja (aber teils durch core-Field lösbar)
Comment RSS commentrss 6.x-2.3 7.x-2.5 (2015) 8.x-1.x-dev
Content Profile content_profile 6.x-1.0 - - - - - - see Content Profile Converter
Content Taxonomy content_taxonomy 6.x-1.0-rc2 7.x-1.0-rc1 (2016) -
E-Mail field email 6.x-1.4 7.x-1.3 (2014) - (core)
FileField filefield 6.x-3.14 core - (in core) migrate = content_migrate
ImageAPI imageapi 6.x-1.10 core - (in core) (evtl module:imagemagick)
ImageCache imagecache 6.x-2.0-rc1 core - (in core)
ImageField imagefield 6.x-3.11 core - (in core)
jQuery Multi jqmulti 6.x-1.0 7.x-1.0 (2013) - - - veraltet
jQuery Update jquery_update 6.x-3.0 7.x-2.7 (2015) - - -
Language icons languageicons 6.x-2.1 7.x-1.1 (2014) 8.x-1.0-beta3 (2021)
Language Sections language_sections 6.x-2.5 7.x-2.6 (2011) - veraltet
Module Grants module_grants 6.x-3.9 7.x-1.x-dev (2013) - - - veraltet
Nodewords nodewords 6.x-1.14 new module metatag 7.x-1.22 8.x-1.3 upgrade-path
One page profile onepageprofile 6.x-1.13 (2011) 7.x-1.x-dev (2012) - veraltet
OpenID Provider openid_provider 6.x-1.0 7.x-1.0 (2012) (oauth2_server 7.x-1.7) new OAuth2 Server oauth2_server 8.x-1.0-beta4
Path redirect path_redirect 6.x-1.0-rc2 (2013) - - veraltet, new module: [redirect]((https://www.drupal.org/project/redirect)
Private Message privatemsg 6.x-1.5 7.x-1.4 (2013) -
Revisioning (Versionierung) revisioning 6.x-3.16 7.x-1.9 (2014) - - - (braucht module_grants)
Search ranking search_ranking 6.x-1.4 (2008) - - veraltet
Share This sharethis 6.x-1.8+2-dev 7.x-2.13 (2016) 8.x-2.0-beta5 (2020) besser ersetzen durch shariff
Site map site_map 6.x-2.2 7.x-1.3 (2015) sitemap sitemap-8.x-1.5
Statistics advanced settings statistics_advanced 6.x-1.5 (2009) - - veraltet
Statistics Pro statspro 6.x-2.3 7.x-1.0 (2013) - veraltet
Switchtheme switchtheme 6.x-1.1 7.x-1.0 (2011) patch 1601192 veraltet
Taxonomy breadcrumb taxonomy_breadcrumb 6.x-1.1 (2010) 7.x-1.x-dev (2013) 8.x-1.1 veraltet, nimm neues Entity-System
Transliteration transliteration 6.x-3.1 7.x-3.2 (2014) - (in core)
Trick Questions trick_question 6.x-1.5 7.x-1.5 (2014) -
Views Groupby views_groupby 6.x-1.0-rc2 (2009) - - - - - - veraltet

Tabelle Stand: 2022-04-29

Ohne Zusatzmodule würde ich direkt zu Drupal 8 wechseln. Die Modulunterstützung wird immer besser (die API hat sich im zu 6-nach-7 nun wieder geändert, da kommt man als Modul-Entwickler kaum hinterher)

Aber auch für Drupal 7 werde ich auf einige Module verzichten müssen:

  • "Nodewords" werde ich durch "Metatag" ersetzen, auch wenn es derzeit nur für die Startseite benutzt wird und die Verwendung von meta-description und meta-keywords nicht mehr so relevant wie früher ist.
  • Alle bisherigen Redirect Module ersetzen durch "Redirect", zum individuellen erstellen von zusätzlichen Kurz-URLs
  • Verzichten auf: onepageprofile, path_redirect, search_ranking, statistics_advanced (wurde eh nie voll genutzt), statspro, taxonomy_breadcrumb

2. Test-Migration - Nebenwirkungen

In der Anleitung zum Upgrade Drupal-6 to Drupal-7 wird empfohlen, vor einem Upgrade alle contrib-Module zu deaktivieren, zuerst den Core zu aktualisieren und erst dann die Module der Reihe nach wieder zu aktivieren.

1) Ergebnis: Die Inhalte waren da, aber die Inhalte wurde falsch angezeigt. Module "language_sections", "typogrify" aktivieren brachte leider auch nicht den alten Zustand. Er hatte alle Eingabeformate vergessen.

2) Views Modul braucht in Drupal 7 das "CTools" Modul, leider benutzt das Views Modul einfach eine ctools Funktion ohne die Abhängigkeiten richtig zu deklarieren.
Empfehlung: Alle Module die es gibt gleich aktiviert lassen, um die Einstellungen (Konfiguration) nicht zu verlieren. Alle alten/veralteten/abzuschaltenden Module vorher deaktivieren. UND bereits in Drupal 6 das "ctools" Modul aktivieren (erspart einem von Hand im php-Code das Modul temporär per Hand zu requiren.)

Ebenfalls musste ich erkennen, dass ich selber mit meinem Modul Iframe -zwar mit Drupal-7 kompatibel bin (dort benutze ich nicht mehr CCK, sondern das core Field Modul) allerdings fehlt noch eine cck-Migration des bisherigen Felder-. (2017: Migration gibt es mittlerweile auch)

Überlegung Drupal-8: Hauptpunkt der fehlt ist die Migration von Views (2.x) aus Drupal6/7 nach Drupal 8, obwohl Views in Drupal-8 nun ein internes Modul ist. (Es existiert ein migrate-Update-Pfad von Views 6.x-3.x nach Drupal-8, man muss also erst in 6 die Version hochziehen ( [Pager Issue 1090098]:https://www.drupal.org/node/1090098 )

3) Migration der ehemaligen CCK-Felder

  • Bilder konnten als Einzel, als auch als Mehrfach-Bilder migriert werden. Da "imagecache" nun im Core ist, muss man die Darstellung der Bilder nun einzeln via "Manage Fields" in jedem einzelnen Inhaltstyp separat einstellen.
  • Feld "Text2" hat er als CCK-Migrate nicht korrekt erkannt, er wollte es zu einem IFrame machen anstatt zu einem Textfeld.
  • Ohne Für-Tun ist zumindest das Feld Iframe-URL (als Hauptbestandteil) erhalten geblieben.

Upgrade 6 nach 7

Mit "drush" geht es leider derzeit nicht mehr (mit drush6 soll es noch gegangen sein).

Hier empfehle ich:

  • die Datenbank in drupal6 bereinigen:
    1. keine Tabellen außerhalb (mit prefix) sondern alle direkt in der DB;
    2. unnötige Module abschalten.
    3. drupal6 und alle Module auf dem aktuellsten Stand
  • dann die ganze Datenbank-6 in eine Datenbank-7 zu kopieren
  • in drupal7 die settings passend zur neuen Datenbank7 einzustellen
  • dann ein oder mehrmahls http://site/update.php aufrufen (evtl dazu zum Upgrade in der settings.php einstellen: $update_free_access = TRUE;
drush_d7 dl admin_menu cck ctools iframe languageicons language_sections redirect token views markdown
drush_d7 en language_sections iframe variable content_migrate cck admin_menu ctools markdown languageicons views views_ui token redirect file image
drush_d7 updatedb
  • Dann die "Content -> Text filter" nacheditieren, um Markdown u LanguageIcons wieder zu aktivieren
  • /admin/structure/content_migrate Migration der bisherigen CCK-Felder als neue "fields"

Angekommen bei Drupal7 - Probleme und Lösungen

CKEditor lief nicht mehr. Früher sagte man welche Felder den CKEditor zeigen sollten und welche nicht. Jetzt geht er rein auf das Eingabeformat los.

  • Alle Einstellungen waren weg:
    1. ckeditor unter sites/all/libraries/ckeditor ablegen, und Pfade unter "CK->Globale EInstellungen" anpassen auf "%l/ckeditor"
    2. CKEditor ist nun modular: alle Plugins müssen einzeln im Ordner libraries/ckeditor/plugins landen (Download unter: [ckeditor.com/addons/plugins/all](http://ckeditor.com/addons/plugins/all)
    3. Wichtige Plugins ohne die die Buttons zwar da sind aber keine Funktionalität: clipboard, colorbutton, find, font, indent, indentblock, indentlist, justify, pastefromword, selectall
  • Benutzer-Profil-Felder mit Textarea hatten jetzt keinen CKEditor mehr, da dort gar kein Eingabeformat pflegbar ist (Profile fields)
    1. Wenn html im Profil Feld steht, dann wird es auch angezeigt, soweit gut
    2. Um aber auch dem Nutzer die Möglichkeit zu geben mit CKEditor die Felder zu pflegen war ein kleines eigenes Modul nötig, dass die entsprechende hook-Funktion benutzt um das Formular vorab entsprechend zu präparieren:
      function sts_form_alter(&$form, &$form_state, $form_id) {
          switch($form_id) {
              case 'user_profile_form' :
                  $account = $form['#user'];
                  if (isset($form['Persönliches'])) {  # bei uns nur die Felder aus dem Tab "Persönliches"
                      #drupal_set_message(print_r($form['#user'], TRUE), "info");
                      foreach($form['Persönliches'] as $pkey => $pval) {
                          if (preg_match('#^profile_#', $pkey) && $pval['#type'] == 'textarea') {
                              $form['Persönliches'][$pkey]['#base_type'] = 'textarea';
                              $form['Persönliches'][$pkey]['#type'] = 'text_format';
                              $form['Persönliches'][$pkey]['#format'] = filter_default_format($account);
                              $form['Persönliches'][$pkey]['#wysiwyg'] = TRUE;
                              ckeditor_element_info_alter($form['Persönliches'][$pkey]);
                          }
                      }
                  }
                  break;
              case 'forum_node_form' :
                  # hier sollte im EDIT-Modus das Body-Feld nicht nur 20 Zeilen (default) zeigen, sondern mehr
                  $form['body']['und'][0]['#rows'] = 60;
                  break;
              default:
                  #drupal_set_message($form_id, "info");
                  break;
          }
      }

Social Media sharethis Modul liess sich nicht mehr administrieren und Layout war auch verwürfelt

  • Nach einigen Versuchen via CSS und Variablen-Hacking direkt im Javascript vom Modul und in der Datenbank, wurde das Modul nun ersetzt durch das Module [shariff](https://www.drupal.org/project/shariff) - die dazugehörige Library von [c't Heise – Shariff](http://ct.de/-2467514) packen wir wieder unter libraries! git clone https://github.com/heiseonline/shariff.git sites/all/libraries/shariff
  • Pinterest Button kann so leider nicht angeboten werden da die sharer-Url von Pinterest eine pinterest-Seite mit https öffnet, um dort die Bilder der eigenen Seite anzuzeigen. Moderne Browser lehnen dann aber Bilder von http-Seiten ab. Alternative, man muss sich auch noch jährlich ein SSL-Zertifikat besorgen.
Bereich