Sobrescrevendo Templates da Views

Em alguns casos, precisamos alterar a marcação HTML dos templates da View

Adicionar elementos HTML, classes, etc. Muitas dessas alterações são possíveis apenas pela interface da View, utilizando o Views UI. Porém, nem tudo é possível, como por exemplo, a remoção da "div" que engloba os resultados (row) da View.

Para fazer isso, temos que sobrescrever o seu template. Hoje, vou ensinar como fazer isso utilizando o HOOK_THEME.

No exemplo que iremos desenvolver a seguir, irei sobrescrever o template de uma View do tipo bloco, com o nome de máquina "lista_artigos" e nome do display "block_lista_artigos".
Irei deixar os templares sobrescritos dentro da pasta "templates", localizada dentro do meu módulo custom. Por isso, devemos utilizar o HOOK_THEME.

Os templates que podem ser sobrescritos, poderão ser visualizados clicando em "Theme: Information", localizado no canto inferior direito de sua View.



Vamos começar sobrescrevendo o Template "Display output".

Copie o último nome referente ao display. Este será o nome do nosso template que a View passará a utilizar.



Crie um arquivo chamado "views-view--lista-artigos--block-lista-artigos.tpl.php" dentro da pasta "templates" do seu módulo.

Click no link "Display output", destacado na imagem acima. Nele, você verá o conteúdo original que o template da View utiliza. Copie-o e cole-o no seu arquivo "views-view--lista-artigos--block-lista-artigos.tpl.php". Salve o arquivo fazendo as alterações no HTML desejadas.

O próximo passo é implementar o HOOK_THEME, informando onde está localizado esse novo template criado.

 /**
 * Implements hook_theme().
*/

function seu_modulo_theme(&$existing, $type, $theme, $path){
    $theme = array(
      'views_view__lista_artigos__block_lista_artigos' => array(
          'arguments' => array(
            'view' => NULL,
            'options' => NULL,
            'row' => NULL,
            'field_alias' => NULL
        ),
        'template' => 'views-view--lista-artigos--block-lista-artigos', //nome do arquivo do template
        'base hook' => 'views_view',       
        'path' => drupal_get_path('module','seu_modulo') . "/templates", //local onde o template está    
      ),
    );
    return $theme;
}


Feito isso, habilite seu módulo e certifique-se de que o arquivo está com permissão de leitura. Limpe o cache.
Se tudo ocorrer bem, o "Display output" da View passará a utilizar o novo template.

OK! Estamos com o "Display output" sobrescrito! E agora, para sobrescrever os outros templates? É só seguir o mesmo processo? Muda alguma coisa?

Não, não muda! É só seguir o mesmo processo.

Veja abaixo a implementação completa, sobrescrevendo os templates "Display output", "Style output", "Row style output" e "Field Conteúdo: Título (ID:title)".

/**
* Implements hook_theme().
*/

function seu_modulo_theme(&$existing, $type, $theme, $path){
    $theme = array(
      //Display output//
      'views_view__lista_artigos__block_lista_artigos' => array(
          'arguments' => array(
            'view' => NULL,
            'options' => NULL,
            'row' => NULL,
            'field_alias' => NULL
        ),
        'template' => 'views-view--lista-artigos--block-lista-artigos',
        'base hook' => 'views_view',       
        'path' => drupal_get_path('module','seu_modulo') . "/templates",     
      ),
      //Style output//
      'views_view_unformatted__lista_artigos__block_lista_artigos' => array(
          'arguments' => array(
            'view' => NULL,
            'options' => NULL,
            'row' => NULL,
            'field_alias' => NULL
        ),
        'template' => 'views-view-unformatted--lista-artigos--block-lista-artigos', 
        'base hook' => 'views_view_unformatted',    
        'path' => drupal_get_path('module','seu_modulo') . "/templates",     
      ),
      //Row style output//
      'views_view_fields__lista_artigos__block_lista_artigos' => array(
          'arguments' => array(
            'view' => NULL,
            'options' => NULL,
            'row' => NULL,
            'field_alias' => NULL
        ),
        'template' => 'views-view-fields--lista-artigos--block-lista-artigos',
        'base hook' => 'views_view_fields',       
        'path' => drupal_get_path('module','seu_modulo') . "/templates",     
      ),
      //Field Conteúdo: Título (ID: title)//
       'views_view_field__lista_artigos__block_lista_artigos__title' => array(
          'arguments' => array(
            'view' => NULL,
            'options' => NULL,
            'row' => NULL,
            'field_alias' => NULL
        ),
        'template' => 'views-view-field--lista-artigos--block-lista-artigos--title',
        'base hook' => 'views_view_field',       
        'path' => drupal_get_path('module','seu_modulo') . "/templates",     
      ),
    );
    return $theme;
}

Até o próximo Post galera!