Como usar template_preprocess_views_view para passar uma variável para um arquivo tpl de visualizações

8

Como o caso me ocorreu pela segunda vez recentemente, decidi fazer a pergunta para talvez aprender alguma coisa.

No Views, o título da exibição principal (aquele que geralmente é renderizado na parte superior da exibição) está disponível na saída da exibição , $titlemas não parece estar disponível na saída de estilo . Em vez disso, a $titlevariável na saída de estilo significa o nome de um grupo se o agrupamento for usado.

O que eu quero é ter esse título de exibição ('nome humano') disponível em qualquer modelo como $display_title. Então, o que eu fiz foi colocar esse código no meu template.php:

function MYTHEME_preprocess_views_view(&$variables){
  if($variables['name'] == 'studios' && $variables['display_id'] == 'block'){
    $view = $variables['view'];
    $variables['display_title'] = $view->human_name;
  }
  dpm($variables);
}

... esperando ter o título humano à mão: <?php print $display_title; ?>

... mas sem alegria. O que estou fazendo errado?

Artur
fonte

Respostas:

10

Como você também deve saber, uma exibição possui vários modelos, que podem variar dependendo do estilo, por exemplo:

  • Saída de exibição: views-view.tpl.php
  • Saída de estilo: views-view-STYLE.tpl.php
  • Saída de estilo de linha: views-view-fields.tpl.php
  • Conteúdo do campo: views-view-field.tpl.php

etc.

Cada um desses modelos possui sua própria função de pré-processo. O que você faz no seu código está afetando apenas a saída de exibição, pois você está processando apenas o views-view.tpl.php ( template_preprocess_views_view)

Para descobrir quais arquivos de modelo estão disponíveis para sua visualização específica, você pode acessar a página de edição e, na seção 'Avançado', no final da coluna, clique em 'Tema: Informações'. Você verá quais arquivos de modelo está usando sua exibição (em negrito) e quais arquivos de modelo você usaria para substituí-los.

As funções de pré-processo devem receber o nome do arquivo de modelo, substituindo os traços por sublinhados. Por exemplo, para views-view-STYLE.tpl.phpseria template_preprocess_views_view_STYLE().

Елин Й.
fonte
0

Você pode usar as funções:

  1. drupal_set_title ()

    Define o título da página atual.

  2. drupal_get_title ()

    Obtém o título da página atual.

Vlasin
fonte
Obrigado, mas minha visão gera um bloco em vez de uma página, portanto, essa não é uma solução. Além disso, isso exigiria a passagem de um argumento de string, como t('My Views Title')e depois o traduza novamente no lado do administrador. Qual é o que eu quero evitar (ainda assim eu já traduzi essa Visualização ...).
Artur
0

Se bem me lembro, você pode passar o título com o objeto de exibição, adicione uma nova variável dentro do objeto de exibição e use o arquivo de modelo.

rreiss
fonte
0

Para abordar a questão específica de "passar uma variável para um arquivo de modelo" ... acho que você só precisa usar um gancho diferente. Anexe a variável ao seu $viewobjeto assim:

function NAME_OF_MODULE_views_pre_render(&$view) {
  $view->display_title = "What have you";
}

Em seguida, em um arquivo de modelo como views-view--NAME_OF_VIEW--page.tpl.php:

print $view->display_title;

Só tinha que fazer isso sozinho e funcionou muito bem.

cdmo
fonte