如何在page.tpl中插入搜索框?


27

如何以编程方式在主题中插入搜索框(搜索块)?

Answers:


39

根据您的标签,您正在寻找D7解决方案。在Drupal 7的page.tpl.php中没有$ search_box变量了。但是,您可以在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;
}

然后,您只需要在page.tpl.php中打印变量:

<?php print $search_box; ?>

您也可以使用module_invoke,但模板文件中不应包含php逻辑:

<?php
  $block = module_invoke('search', 'block_view', 'search');
  print render($block); 
?>

谢谢,我应该在哪里放置第三个代码块?(直接在page.tpl.php中还是在template.php中,然后从page.tpl中访问它?)
Nick.h 2011年

1
第三块应该放在page.tpl.php中。作为简写,您还可以使用:“ print render(module_invoke('search','block_view','search')));”
巴拉·克拉克

2
为避免出现“严格警告:在[theme-name] _preprocess_page()([theme-name] /template.php的xx行)中,仅变量应通过引用传递。” 警告theme_preprocess_page应该如下:/ * *实现theme_preprocess_page()。* /函数[theme-name] _preprocess_page(&$ variables){$ search_form = drupal_get_form('search_form'); $ search_box = drupal_render($ search_form); $ variables ['search_box'] = $ search_box; }
kbrinner '16

7

改为以正确的方式使用该块。
page.tpl中的硬编码元素是恕我直言,自“美好的过去”以来,这仍然是其中的一环。

改为使用块系统;它为您提供了进一步的灵活性。您可能还需要检出Blockify模块。

该模块将许多核心Drupal元素公开为块。



1

您还可以使用图块系统,并将搜索表单块添加到页面中

管理>结构>块:搜索表单

例如,要放置在导航菜单中,将块放在区域中

“导航”

然后与CSS对齐。

例如在导航菜单的右边:

#navigation #block-search-form{
  position: absolute;
  right: 10px;
  top: 0;
}

这会起作用,但是问题是指向程序解决方案。
timofey.com 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.