Como posso inserir a caixa de pesquisa no page.tpl?

27

Como posso inserir caixa de pesquisa (bloco de pesquisa) no meu tema programaticamente?

Nick.h
fonte

Respostas:

39

De acordo com a sua etiqueta, você está procurando uma solução D7. O Drupal 7 page.tpl.php não possui mais a variável $ search_box. No entanto, você pode adicioná-lo em uma função de pré-processo no seu template.php:

<?php
/*
 *  Preprocess page.tpl.php to inject the $search_box variable back into D7.
 */
function MYTHEME_preprocess_page(&$variables){
  $search_box = drupal_render(drupal_get_form('search_form'));
  $variables['search_box'] = $search_box;
}

Então você só precisa imprimir a variável em seu page.tpl.php:

<?php print $search_box; ?>

Você também pode usar module_invoke, mas não deve ter lógica php nos arquivos de modelo:

<?php
  $block = module_invoke('search', 'block_view', 'search');
  print render($block); 
?>
ipwa
fonte
Obrigado, Onde devo colocar o bloco de código terço (diretamente no page.tpl.php OR em template.php e depois acessá-lo de page.tpl?)?
Nick.h
11
O terceiro bloco deve ser colocado em page.tpl.php. Como abreviação, você também pode usar: "print render (module_invoke ('search', 'block_view', 'search'));"
Bala Clark
2
Para evitar o "Aviso estrito: somente variáveis ​​devem ser passadas por referência em [nome do tema] _process_page () (linha xx de [nome do tema] /template.php)". avisando que sua theme_preprocess_page deve ser a seguinte: / * * Implementa theme_preprocess_page (). * / function [nome-do-tema] _processo-de-página (& $ variáveis) {$ search_form = drupal_get_form ('search_form'); $ search_box = drupal_render ($ search_form); $ variable ['search_box'] = $ search_box; }
kbrinner 21/01
7

Faça da maneira certa e use o bloco.
A codificação dos elementos dentro do page.tpl é IMHO uma das coisas que ainda flutuam desde os "bons velhos tempos".

Use o sistema de blocos; Isso lhe dá mais flexibilidade ainda mais adiante. Você também pode querer verificar o módulo Blockify .

Este módulo expõe vários elementos principais do Drupal como blocos.

Mortendk
fonte
2

Você pode usar a $search_boxvariável disponível para o arquivo page.tpl.php .

Nikola Kotur
fonte
11
Obrigado, mas $ search_box é removido no D7
Nick.h
Opa, não percebi que se tratava de D7.
Nikola Kotur 23/09/11
1

Você também pode usar o sistema de blocos e adicionar o bloco de formulário de pesquisa à página em

Admin> Estrutura> Blocos: formulário de pesquisa

por exemplo, para colocar no menu de navegação, coloque o bloco na região

"Navegação"

e depois alinhe com CSS.

por exemplo, para colocar no menu de navegação à direita:

#navigation #block-search-form{
  position: absolute;
  right: 10px;
  top: 0;
}
David Thomas
fonte
Isso funcionaria, mas a questão estava se referindo a uma solução programática.
timofey.com