2016-06-07 13 views
0

У меня есть настраиваемый профиль установки, который зависит от представлений и других настраиваемых модулей. Один из таких модулей - это модуль админ-контента, который имеет пользовательский вид, предназначенный для замены представления «контент» (/ admin/content).Drupal 8, как отключить просмотр во время установки hook_install в установочном профиле?

В общем, я могу автоматически отключить просмотр содержимого. (Это на Drush файл, который я называю с 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 
} 

Вид имеет значение null, и я не могу его отключить. Я все еще не слишком разбираюсь в внутренней работе Drupal 8, я собираюсь пробить код и попытаться определить, что может быть причиной, но пока не повезло.

Я убедился, что перед запросом на просмотр загружен как модуль узла (именно здесь определяется стандартный контентный вид), так и модуль представлений. Он по-прежнему пуст.

Drupal::moduleHandler()->load('node'); 
Drupal::moduleHandler()->load('views'); 

Я также сделал это

\Drupal::configFactory() 
    ->getEditable('views.view.content') 
    ->set('status', TRUE) 
    ->save(); 

Это "работает". Проблема в том, что это исключает страницу списка просмотров. Так что это нехорошее решение.

Буду признателен, если кто-то может указать мне в правильном направлении.

Спасибо в продвижении.

ответ

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 или из пользовательского интерфейса.