2016-06-07 4 views
0

Ich habe ein benutzerdefiniertes Installationsprofil, das eine Abhängigkeit von Ansichten und anderen benutzerdefinierten Modulen hat. Ein solches Modul ist ein Admin-Inhaltsmodul mit einer benutzerdefinierten Ansicht, die die Ansicht "Inhalt" ersetzen soll (/ admin/content).Drupal 8, wie kann ich eine Ansicht während der hook_install eines Installationsprofils deaktivieren?

Im Allgemeinen kann ich die Inhaltsansicht programmatisch deaktivieren. (Dies ist eine drush Datei, die ich mit drush scr nennen)

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

Dies funktioniert jedoch, wenn die Website vorher installiert wurde. Wenn ich versuche, dies im Installations-Hook meines benutzerdefinierten Profils auszuführen, ist das View-Objekt null.

function my_profile_install() { 
    // Previous code here 
} 

Die Ansicht ist null und ich kann es nicht deaktivieren. Ich bin immer noch nicht so gut in der Arbeitsweise von Drupal 8. Ich gehe durch den Code und versuche herauszufinden, was der Grund dafür sein könnte, aber bisher kein Glück.

Ich habe sichergestellt, dass sowohl das Knotenmodul (hier ist die Standard-Inhaltsansicht definiert) als auch das Sichtenmodul geladen werden, bevor die Ansicht angefordert wird. Es kehrt immer noch leer zurück.

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

Ich habe auch dieses

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

Dieses "Werk". Das Problem ist, dass dies die Sichtenauflistungsseite mit einer Ausnahme unterbricht. Also keine gute Lösung.

Ich würde mich freuen, wenn mir jemand in die richtige Richtung zeigen könnte.

Danke in fortgeschrittenem.

Antwort

1

Also, nachdem ich über Alternativen nachgedacht habe, habe ich diese Logik entwickelt.

Implementierung von hook_install_tasks und Erstellen einer Aufgabe, die die Ansicht deaktiviert.

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(); 
    } 
} 

Dies funktioniert problemlos installiert von Drush oder von UI.

Verwandte Themen