Comment puis-je insérer un champ de recherche dans page.tpl?

27

Comment puis-je insérer un champ de recherche (bloc de recherche) dans mon thème par programme?

Nick.h
la source

Réponses:

39

Selon votre tag, vous recherchez une solution D7. Le Drupal 7 page.tpl.php n'a plus la variable $ search_box. Cependant vous pouvez l'ajouter dans une fonction de prétraitement dans votre 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;
}

Ensuite, il vous suffit d'imprimer la variable dans votre page.tpl.php:

<?php print $search_box; ?>

Vous pouvez également utiliser module_invoke, mais vous ne devriez pas avoir de logique php dans les fichiers de modèle:

<?php
  $block = module_invoke('search', 'block_view', 'search');
  print render($block); 
?>
ipwa
la source
Merci, où dois-je placer le troisième bloc de code? (Directement dans page.tpl.php OU dans template.php puis y accéder depuis page.tpl?)
Nick.h
1
Le troisième bloc doit être placé dans page.tpl.php. Comme raccourci, vous pouvez également utiliser: "print render (module_invoke ('search', 'block_view', 'search'));"
Bala Clark
2
Pour éviter le "avertissement strict: seules les variables doivent être transmises par référence dans [nom-thème] _preprocess_page () (ligne xx de [nom-thème] /template.php)." avertissement votre theme_preprocess_page devrait être comme suit: / * * Implémente theme_preprocess_page (). * / function [nom-thème] _preprocess_page (& $ variables) {$ search_form = drupal_get_form ('search_form'); $ search_box = drupal_render ($ search_form); $ variables ['search_box'] = $ search_box; }
kbrinner
7

Faites-le à la place et utilisez le bloc.
Les éléments de codage en dur à l'intérieur de la page.tpl, est à mon humble avis l'une des choses qui flotte toujours depuis le «bon vieux temps».

Utilisez plutôt le système de blocs; cela vous donne beaucoup plus de flexibilité plus loin sur la route. Vous pouvez également consulter le module Blockify .

Ce module expose un certain nombre d'éléments principaux de Drupal sous forme de blocs.

mortendk
la source
2

Vous pouvez utiliser la $search_boxvariable disponible pour le fichier page.tpl.php .

Nikola Kotur
la source
1
Merci, mais $ search_box est supprimé dans D7
Nick.h
Oups, je n'ai pas remarqué qu'il s'agissait de D7.
Nikola Kotur
1

Vous pouvez également utiliser le système de blocs et ajouter le bloc du formulaire de recherche à la page

Admin> Structure> Blocs: formulaire de recherche

par exemple pour placer dans le menu de navigation, mettre le bloc dans la région

"La navigation"

puis aligner avec CSS.

par exemple pour mettre à droite du menu de navigation:

#navigation #block-search-form{
  position: absolute;
  right: 10px;
  top: 0;
}
David Thomas
la source
Cela fonctionnerait, mais la question faisait référence à une solution programmatique.
timofey.com