Відповіді:
Дані system
таблиці Drupal 7 тепер зберігаються в config
таблиці в Drupal 8 проти core.extension
параметра.
Рішення 1: Оновлення конфігурації
Ви можете запустити такий код, використовуючи drush eval
або використовуючи положення модуля Devel 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();
Ви можете зробити все це у швидкому одноколірному режимі 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();"
Рішення 2: Змінити конфігураційну таблицю, якщо ви не можете виконати PHP
Якщо сайт зламаний через проблемний модуль і ви навіть не можете запустити PHP-код, можливо, ви можете редагувати config
таблицю безпосередньо.
У рядку в config
таблиці, де name = "core.extension"
і відредагуйте стовпець BLOB data
. Це data
серіалізований масив PHP, з якого потрібно видалити модуль, від якого потрібно позбутися, з module
ключа конфігурації.
Рішення 3: Швидкий і брудний розчин
cache_config
Однак це рішення може призвести до повідомлень про те, що модуль не існує у файловій системі, що означає, що щось не так. Але принаймні зламаний модуль вимикається, і ви можете отримати доступ до свого сайту у більшості випадків.
Очищення кешу
Іноді, можливо, доведеться очистити кеш, дотримуючись вищезазначених кроків. Прочитайте цю зручну документацію про те, як очистити кеш .
drush eval
. Приклад 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();
однолінійного : Зауважте, що уникнутий знак долара, щоб командний рядок не трактував неправильно $module
Bash.
Зробити це:
rm -rf modules/your_stubborn_module
rm -rf sites/default/files/php
drush cache-rebuild
теж
config
таблицю, де name = 'core.extension'
і видаліть модуль із блоку даних, який є серіалізованим масивом.(...s:6:"module";a:HERE;{...)
cache_config
таблицю з phpmyadmin або за допомогою командного рядка.i:0;s:8:"name of the module";
s:8:"name of the module";i:0;
. Що означало @valli, це те, що масив, що описує кількість модулів, слід зменшити в кількості на кількість вилучених модулів. Початок блобу в моїй установці a:4:{s:6:"module";a:59:{
- це масив із 59 модулів. Якщо ви видалите дві зміни цього значення масиву на 57.
Подумайте про використання Drush. Drupal 8 все ще визначає, якими повинні бути "відключення модулів". Існує триває дискусія , якщо повинна бути такий варіант , або вона повинна бути вилучена.
Для цього є модуль. Цей модуль був розміщений у серпні 2013 року на drupal.org . У випадку, якщо комусь потрібно.
Як зазначено на сторінці цього модуля,
Drupal 8 усунув можливість відключення модулів з багатьох причин. Див. № 1199946: Модулі з обмеженими можливостями не підлягають ремонту, тому функцію "відключити" потрібно видалити, а багато інших проблем у черзі різних основних та доповнених модулів.
Цей модуль повертає можливість (тимчасово) відключити модулі з інтерфейсу користувача або за допомогою Drush. Зауважте, що після відключення модуля немає гарантії на вміст, конфігурацію або навіть ваш сайт.
Ось так, я вручну видалив модуль під назвою "better_messages" зі свого екземпляра Drupal 8. Як тільки я встановив модуль "better_messages", сайт зайшов. Тож не вдалося видалити модуль з інтерфейсу користувача. У мене не встановлено Drush. Я зробив багато налаштувань, наведених на форумах, але саме так це нарешті спрацювало для мене.
1 Перейменовано модуль на old_better_messages в папці модулів.
Через URL-адресу пробіг http: // IP: порт / ім'я папки / rebuild.php . Це забезпечило повернення сайту, але лише в режимі лише для читання. Я не міг займатися адміністраторською діяльністю чи редагувати статті.
Використовується наступна команда для видалення запису з бази даних
ВИДАЛИТИ З key_value WHERE collection = 'system.schema' AND name = 'better_messages';
У моєму випадку в базі даних не було записів. Я думаю, що його, можливо, видалили через різні трюки, які я робив раніше.
Це вирішило проблему. Це ґрунтується на моїй інтерпретації https://www.drupal.org/node/2487215
Відповідь Джигарія вище, спрацював ...
Мені довелося: // Прочитати конфігурацію.
$module_data = \Drupal::config('core.extension')->get()['module'];
Який повинен робити те саме. Не знаю, чому це не спрацювало так, як писав це Джигарій ...