Wie kann ich ein Suchfeld in page.tpl einfügen?

27

Wie kann ich programmgesteuert ein Suchfeld (Suchblock) in mein Design einfügen?

Nick.h
quelle

Antworten:

39

Je nach Tag suchen Sie nach einer D7-Lösung. Die Drupal 7 page.tpl.php hat nicht mehr die Variable $ search_box. Sie können es jedoch in einer Vorverarbeitungsfunktion in Ihrer template.php hinzufügen:

<?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;
}

Dann müssen Sie nur noch die Variable in Ihrer page.tpl.php ausdrucken:

<?php print $search_box; ?>

Sie könnten auch module_invoke verwenden, aber Sie sollten keine PHP-Logik in den Vorlagendateien haben:

<?php
  $block = module_invoke('search', 'block_view', 'search');
  print render($block); 
?>
ipwa
quelle
Danke, wo soll ich den dritten Codeblock platzieren? (Direkt in page.tpl.php ODER in template.php und dann von page.tpl aus darauf zugreifen?)
Nick.h
1
Der dritte Block sollte in page.tpl.php platziert werden. Als Kurzform können Sie auch Folgendes verwenden: "print render (module_invoke ('search', 'block_view', 'search')";
Bala Clark
2
So vermeiden Sie die "Strikte Warnung: In [Themenname] _preprocess_page () (Zeile xx von [Themenname] /template.php) sollten nur Variablen als Referenz übergeben werden." Warnung Ihre theme_preprocess_page sollte folgendermaßen aussehen: / * * Implementiert theme_preprocess_page (). * / function [Themenname] _preprocess_page (& $ variables) {$ search_form = drupal_get_form ('search_form'); $ search_box = drupal_render ($ search_form); $ variables ['search_box'] = $ search_box; }
kbrinner
7

Mach es stattdessen richtig und benutze den Block.
Hardcoding-Elemente innerhalb der page.tpl, ist meiner Meinung nach eines der Dinge, die noch seit den "guten alten Tagen" herumschweben.

Verwenden Sie stattdessen das Blocksystem. Es gibt Ihnen viel mehr Flexibilität auf der Straße. Möglicherweise möchten Sie auch das Blockify- Modul auschecken .

Dieses Modul stellt eine Reihe von Drupal-Kernelementen als Blöcke zur Verfügung.

mortendk
quelle
2

Sie können die $search_boxVariable verwenden, die für die Datei page.tpl.php verfügbar ist .

Nikola Kotur
quelle
1
Danke, aber $ search_box wird in D7
Nick.h 31.08.11
Hoppla, habe nicht bemerkt, dass es sich um D7 handelt.
Nikola Kotur
1

Sie können auch das Blocksystem verwenden und den Suchformularblock zur Seite in hinzufügen

Admin> Struktur> Blöcke: Suchformular

Um zB in das Navigationsmenü zu gelangen, setzen Sie den Block in die Region

"Navigation"

und dann mit CSS ausrichten.

zB um rechts vom Navigationsmenü zu setzen:

#navigation #block-search-form{
  position: absolute;
  right: 10px;
  top: 0;
}
David Thomas
quelle
Das würde funktionieren, aber die Frage bezog sich auf eine programmatische Lösung.
timofey.com