Como importar programaticamente um bloco para a exibição existente?

Aug 17 2020

Eu preciso importar programaticamente um bloco para exibição existente com suas configurações .

Eu sei como exportar toda a visão e importá-la programaticamente. Mas não quero exportar a exibição inteira e depois importar a exibição inteira. Na minha opinião, são 25 blocos, então isso me dá 4000 linhas de código para importar. Posso copiar o código de exportação apenas do meu novo bloco. Mas como importar apenas essa parte do código para a exibição existente ? Isso é possível? Não consigo encontrar soluções.

Respostas

1 ShawnConn Aug 18 2020 at 04:42

O "bloco" indicado que você aponta na interface do usuário é chamado internamente de "display". As exibições são armazenadas dentro do objeto de exibição na displaypropriedade (por exemplo $view->display, ).

Se você observar o código de exportação das exibições, verá o padrão dos blocos exportados (por exemplo /* Display: Block 1 */, /* Display: Block 2 */, etc.) renderizados pelo views::export()método.

Para cada bloco (ou seja, exibição), você deve ver o $handler = $view->new_display(...)seguido por muitas $handler->display...linhas que adicionam os campos/filtros relevantes para essa exibição.

Para importar programaticamente uma única exibição, você faria algo como o seguinte:

$view = views_get_view('my_existing_view');
// @TODO: Add my new display handler code
$view->save();