Odpowiedzi:
Dane system
tabeli Drupal 7 są teraz przechowywane w config
tabeli w Drupal 8 w odniesieniu do core.extension
parametru.
Rozwiązanie 1: Zaktualizuj konfigurację
Możesz uruchomić następujący kod, używając drush eval
lub możesz używać przepisu modułu Devel do Execute PHP Code
.
// Read the configuration.
$module_data = \Drupal::config('core.extension')->get('module');
// Unset the modules you do not need.
unset($module_data['MODULE_NAME']);
// Write the configuration.
\Drupal::configFactory()->getEditable('core.extension')->set('module', $module_data)->save();
Możesz to wszystko zrobić za pomocą szybkiego linku drush
.
drush eval "\$module_data = \Drupal::config('core.extension')->get('module'); unset(\$module_data['MODULE_NAME']); \Drupal::configFactory()->getEditable('core.extension')->set('module', \$module_data)->save();"
Rozwiązanie 2: Edytuj tabelę konfiguracji, jeśli nie możesz uruchomić PHP
Jeśli witryna jest zepsuta z powodu problematycznego modułu i nie możesz nawet uruchomić kodu PHP, być może możesz edytować config
tabelę bezpośrednio.
W wierszu w config
tabeli gdzie name = "core.extension"
i edytuj kolumnę BLOB data
. data
Jest odcinkach tablicy PHP, gdzie trzeba usunąć moduł, którego chcesz się pozbyć z module
kluczem konfiguracji.
Rozwiązanie 3: Szybkie i brudne rozwiązanie
cache_config
Jednak to rozwiązanie może powodować pojawienie się komunikatów informujących, że moduł nie istnieje w systemie plików, co oznacza, że coś jest nie tak. Ale przynajmniej uszkodzony moduł zostaje wyłączony i w większości przypadków można uzyskać dostęp do witryny.
Czyszczenie pamięci podręcznej
Czasami może być konieczne wyczyszczenie pamięci podręcznej po wykonaniu powyższych kroków. Przeczytaj tę przydatną dokumentację dotyczącą czyszczenia pamięci podręcznej .
drush eval
. Przykładem jednowierszowym jest: drush eval "\$module_data = \Drupal::config('core.extension')->get('module'); unset(\$module_data['example_module']); \Drupal::configFactory()->getEditable('core.extension')->set('module', \$module_data)->save();
Zwróć uwagę na znak dolara, aby linia poleceń nie interpretowała błędnie $module
jako zmiennej Bash.
Zrób to:
rm -rf modules/your_stubborn_module
rm -rf sites/default/files/php
drush cache-rebuild
zbyt
config
tabelę gdzie name = 'core.extension'
i usuń moduł z obiektu blob danych, który jest szeregową tablicą.(...s:6:"module";a:HERE;{...)
cache_config
tabelę z phpmyadmin lub za pomocą wiersza polecenia.i:0;s:8:"name of the module";
s:8:"name of the module";i:0;
. @Valli miał na myśli to, że tablica opisująca liczbę modułów powinna zostać zmniejszona pod względem liczby usuniętych modułów. Początek obiektu blob w mojej konfiguracji to a:4:{s:6:"module";a:59:{
, który jest tablicą 59 modułów. Jeśli usuniesz dwa, zmień tę wartość tablicy na 57.
Rozważ użycie Drusha. Drupal 8 wciąż określa, jakie powinny być „moduły wyłączające”. Jest trwa dyskusja , czy nie powinno być tak, że opcja lub powinno zostać usunięte.
Jeśli potrzebujesz zaktualizować cokolwiek związanego z konfiguracją Drupala, w tym przypadku core.extension
użyj Drusha:
[Drush 8.x w tym przykładzie]
drush cedit core.extension
Jest na to moduł. Ten moduł został opublikowany w sierpniu 2013 r. Na drupal.org . W razie potrzeby.
Jak podano na stronie tego modułu,
Drupal 8 usunął możliwość wyłączania modułów z wielu powodów. Zobacz # 1199946: Wyłączone moduły są uszkodzone nie do naprawienia, więc funkcja „wyłącz” musi zostać usunięta, a wiele innych problemów w kolejce różnych modułów podstawowych i wnoszonych.
Ten moduł przywraca możliwość (tymczasowego) wyłączenia modułów z interfejsu użytkownika lub z Drush. Pamiętaj, że po wyłączeniu modułu nie ma gwarancji na zawartość, konfigurację, a nawet witrynę.
W ten sposób ręcznie usunąłem moduł o nazwie „better_messages” z mojej instancji Drupal 8. Gdy tylko zainstalowałem moduł „better_messages”, strona się zawiesiła. Nie było więc sposobu na odinstalowanie modułu z interfejsu użytkownika. Nie mam zainstalowanego Drusha. Dokonałem wielu ustawień podanych na forach, ale tak to w końcu dla mnie zadziałało.
1 Zmień nazwę modułu na old_better_messages w folderze modułów.
Przez adres URL uruchomiono http: // IP: port / nazwa_folderu / rebuild.php . Zapewniło to powrót witryny, ale tylko w trybie tylko do odczytu. Nie mogłem wykonywać czynności administracyjnych ani edytować artykułów.
Użyto następującego polecenia, aby usunąć wpis z bazy danych
DELETE FROM key_value WHERE collection = 'system.schema' AND name = 'better_messages';
W moim przypadku nie było wpisu w bazie danych. Myślę, że mógł zostać usunięty z powodu różnych sztuczek, które zrobiłem wcześniej.
To rozwiązało problem. Jest to oparte na mojej interpretacji https://www.drupal.org/node/2487215
Powyższa odpowiedź Jigariusa zadziałała ...
Musiałem: // Przeczytać konfigurację.
$module_data = \Drupal::config('core.extension')->get()['module'];
Co powinno zrobić to samo. Nie jestem pewien, dlaczego to nie zadziałało, jak napisał to Jigarius ...