Drupal 8,如何在安装配置文件的hook_install期间禁用视图?

时间:2016-06-07 21:52:13

标签: drupal drupal-views drupal-8

我有一个自定义安装配置文件,它依赖于视图和其他自定义模块。一个这样的模块是管理内容模块,其具有用于替换"内容的自定义视图。查看(/ 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();

这"工作"。问题是这会打破视图列表页面的异常。所以根本不是一个好的解决方案。

如果有人能指出我正确的方向,我将不胜感激。

先谢谢。

1 个答案:

答案 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安装无问题。