¿Cómo puedo insertar el cuadro de búsqueda en page.tpl?

27

¿Cómo puedo insertar el cuadro de búsqueda (bloque de búsqueda) en mi tema mediante programación?

Nick.h
fuente

Respuestas:

39

Según su etiqueta, está buscando una solución D7. El Drupal 7 page.tpl.php ya no tiene la variable $ search_box. Sin embargo, puede agregarlo en una función de preproceso en su 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;
}

Entonces solo necesita imprimir la variable en su page.tpl.php:

<?php print $search_box; ?>

También podría usar module_invoke, pero no debería tener lógica php en archivos de plantilla:

<?php
  $block = module_invoke('search', 'block_view', 'search');
  print render($block); 
?>
ipwa
fuente
Gracias, ¿Dónde debo colocar el tercer bloque de código? (Directamente en page.tpl.php O en template.php y luego acceder a él desde page.tpl?)
Nick.h
1
El tercer bloque debe colocarse en page.tpl.php. Como abreviatura también puede usar: "print render (module_invoke ('search', 'block_view', 'search'));"
Bala Clark
2
Para evitar la "Advertencia estricta: solo se deben pasar las variables por referencia en [theme-name] _preprocess_page () (línea xx de [theme-name] /template.php)". advirtiendo que su theme_preprocess_page debe ser como sigue: / * * Implementa theme_preprocess_page (). * / function [theme-name] _preprocess_page (& $ variables) {$ search_form = drupal_get_form ('search_form'); $ search_box = drupal_render ($ search_form); $ variables ['search_box'] = $ search_box; }
kbrinner
7

Hazlo de la manera correcta y usa el bloque.
Elementos de codificación dentro de page.tpl, en mi humilde opinión, es una de las cosas que todavía flota desde los "buenos viejos tiempos".

Utilice el sistema de bloques en su lugar; te da más flexibilidad más adelante. También puede consultar el módulo Blockify .

Este módulo expone una serie de elementos centrales de Drupal como bloques.

mortendk
fuente
2

Puede usar la $search_boxvariable que está disponible para el archivo page.tpl.php .

Nikola Kotur
fuente
1
Gracias, pero $ search_box se elimina en D7
Nick.h
Vaya, no me di cuenta de que se trataba de D7.
Nikola Kotur
1

También puede usar el sistema de bloques y agregar el bloque del formulario de búsqueda a la página en

Admin> Estructura> Bloques: formulario de búsqueda

Por ejemplo, para colocar en el menú de navegación, poner el bloque en la región

"Navegación"

y luego alinear con CSS.

Por ejemplo, para poner a la derecha del menú de navegación:

#navigation #block-search-form{
  position: absolute;
  right: 10px;
  top: 0;
}
David Thomas
fuente
Esto funcionaría, pero la pregunta era hacer referencia a una solución programática.
timofey.com