I have an existing view to which I would like to add some contextual filters if my module gets enabled. In D7 this was possible using
hook_views_default_views, but I can't seem to find the equivalent in D8. Is this possible in D8?
Providing a view by using
hook_views_default_views() is no longer possible. In D8 views are configuration entities. This means when a module wants to provide a view, it puts a yml file in /config/install.
If you want to change a view in code, load the view, change it and save it.
$view = View::load('test_filter_taxonomy_index_tid'); $display =& $view->getDisplay('default'); $display['display_options']['filters']['tid']['type'] = 'textfield'; $view->save();
A third alternative is to change the view directly in configuration, for example replace it with the content of a yml file:
$config_path = drupal_get_path('module', 'mymodule') . '/config/optional/views.view.myview.yml'; $data = \Symfony\Component\Yaml::parse(file_get_contents($config_path)); \Drupal::configFactory()->getEditable('views.view.myview')->setData($data)->save(TRUE);
The last option might be the easiest for your use case. You can configure the view in ui, export it to a yml file and use this file to overwrite the configuration of an existing view in