Ответы:
Данные 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 . Это гарантировало, что сайт вернулся, но только в режиме только для чтения. Я не мог выполнять действия администратора или редактировать статьи.
Использовал следующую команду для удаления записи из базы данных
DELETE FROM key_value WHERE collection = 'system.schema' AND name = 'better_messages';
В моем случае не было записи в базе данных. Я думаю, что это могло быть удалено из-за различных трюков, которые я делал ранее.
Это решило проблему. Это основано на моей интерпретации https://www.drupal.org/node/2487215
Ответ Jigarius выше, вроде работал ...
Мне пришлось: // Читать конфигурацию.
$module_data = \Drupal::config('core.extension')->get()['module'];
Который должен делать то же самое. Не уверен, почему это не сработало, поскольку Джигариус написал это ...