2016-06-07 8 views
0

보기 및 기타 사용자 지정 모듈에 종속 된 사용자 지정 설치 프로필이 있습니다. 그러한 모듈 중 하나는 "컨텐츠"보기 (/ admin/content)를 대체하기위한 사용자 정의보기가있는 관리 컨텐츠 모듈입니다.Drupal 8, 설치 프로필의 hook_install 동안보기를 비활성화하는 방법?

일반적으로 콘텐츠보기를 프로그래밍 방식으로 사용하지 않도록 설정할 수 있습니다. 사이트가 이전에 설치 한 경우

$view = \Drupal::service('entity.manager')->getStorage('view')->load('content'); 
if (!is_null($view)) { 
    $view->setStatus(FALSE); 
    $view->save(); 
} 

그러나이 작동 (이것은 내가 drush의 SCR로 부르는 drush 파일에 있습니다). 내 사용자 정의 프로파일의 설치 후크에서이를 실행하려고하면 뷰 객체가 null입니다.

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 또는 UI에서 설치하는 데 문제가없이 작동합니다.