【问题标题】:Drupal 8, how to disable a view during a installation profile's hook_install?Drupal 8,如何在安装配置文件的 hook_install 期间禁用视图?
【发布时间】:2016-10-07 23:38:45
【问题描述】:

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

这“有效”。问题是这会破坏视图列表页面,但会出现异常。所以根本不是一个好的解决方法。

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

提前致谢。

【问题讨论】:

    标签: drupal drupal-views drupal-8


    【解决方案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 安装时没有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 2019-02-12
      • 2021-11-30
      • 1970-01-01
      相关资源
      最近更新 更多