我有一个自定义安装配置文件,它依赖于视图和其他自定义模块。一个这样的模块是管理内容模块,其具有用于替换"内容的自定义视图。查看(/ admin / content)。
通常,我能够以编程方式禁用内容视图。 (这是我用drush scr调用的一个drush文件)
$view = \Drupal::service('entity.manager')->getStorage('view')->load('content');
if (!is_null($view)) {
$view->setStatus(FALSE);
$view->save();
}
但是,如果之前安装了该站点,则此方法有效。如果我尝试在自定义配置文件的安装挂钩中运行它,则视图对象为空。
function my_profile_install() {
// Previous code here
}
视图为空,我无法禁用它。我对Drupal 8内部工作仍然不太熟悉,我会通过代码并试图找出原因,但到目前为止还没有运气。
我确保在请求视图之前,节点模块(这是定义标准内容视图的位置)和视图模块都已加载。它仍然是空的。
Drupal::moduleHandler()->load('node');
Drupal::moduleHandler()->load('views');
我也做了这个
\Drupal::configFactory()
->getEditable('views.view.content')
->set('status', TRUE)
->save();
这"工作"。问题是这会打破视图列表页面的异常。所以根本不是一个好的解决方案。
如果有人能指出我正确的方向,我将不胜感激。
先谢谢。
答案 0 :(得分:1)
所以,在考虑了替代方案后,我想出了这个逻辑。
实现hook_install_tasks并创建一个禁用视图的任务。
function my_profile_install_tasks() {
return [
'my_profile_disable_views' => [
'display_name' => 'Disabling unused views',
'display' => TRUE,
'type' => 'normal',
'run' => INSTALL_TASK_RUN_IF_NOT_COMPLETED,
],
];
}
function my_profile_disable_views() {
$view = \Drupal::service('entity.manager')->getStorage('view')->load('content');
if (!is_null($view)) {
$view->setStatus(FALSE);
$view->save();
}
}
从Drush或UI安装无问题。