如何以编程方式构建、主题和显示Drupal块


How do I programmatically build, theme and display a Drupal block?

我想在我的"primary links"菜单中输出内置的Drupal "search"块,它是由template.php中的主题函数framework_primary_links()构建的。菜单最终应该看起来像StackOverflow菜单:[chat | meta | about | faq | __search__],所以"search"字段在菜单中

    本身。

    所以我不只是打印搜索块在一个区域内像普通的。

    当前我正在做:

    $search_block = (object) module_invoke('search', 'block', 'view', 0);
    $output .= '<li id="searchContainer">' . theme('block', $search_block) . '</li>';
    

    但是Drupal应用的是"block.tpl.php"模板,而不是我想要的"block-search.tpl.php"模板。

    如何让Drupal将"block-search.tpl.php"模板文件应用于我的编程呈现块?

Doing drupal_get_form('search_block_form')将返回核心搜索表单的标记,并且它已经通过了搜索块表单模板,因此您可以将代码更改为:

<?php
$output .= '<li id="searchContainer">' . drupal_get_form('search_block_form') . '</li>';

我找到了一个解决方案—手动设置块对象上的"module"answers"delta":

$search_block = (object) module_invoke('search', 'block', 'view', 0);
$search_block->module = 'search';
$search_block->delta = 0;
$output .= '<li id="searchContainer">' . theme('block', $search_block) . '</li>';