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


27

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

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

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.



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

Das würde funktionieren, aber die Frage bezog sich auf eine programmatische Lösung.
timofey.com
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.