web-dev-qa-db-ja.com

カスタム検索ブロックを作成するにはどうすればよいですか?

D7のインストールで、ページの特別な部分に検索フィールドを追加したいのですが、デフォルトの検索ブロックを使用したくありません(テーマを設定するのは難しいため、このボックスは既に作業しています)。

当然、私がタイプするだけなら:

<form><input type="text" placeholder="Search"></form> 

動作しません。

これは、検索ブロックのデフォルトの検索フォームのように実際に機能するために他に何が必要ですか?私はこれがあることを知っています カスタム検索 モジュールですが、この単純な機能のために別のモジュールをインストールするべきではないと思います。

ありがとう!!

2
Rosamunda

Search form_idでdrupal_get_form()を呼び出すだけです。これは、search_block_formまたはsearch_formのどちらかです。

そして、返された配列でdrupal_render()を使用します。

  print drupal_render(drupal_get_form('search_block_form'));

Drupal_render()の部分は間違っているかもしれませんが、drupal_get_form()が配列を返すので、drupal_renderを使用する必要があるので、それは私には思えます。

このページも参考になるかもしれません- http://data.agaric.com/print-form-such-search-form-anywhere-drupal

お役に立てば幸いです。

8
SGhosh

デフォルトの検索ボックスをテーマにするのが難しいと言った理由がわかりません。 Drupalは、テーマのオーバーライドまたはフォームのオーバーライドを好きなように実行できます。 google の場合、この目的のための多くのソリューションが表示されます。

このQ/Aを確認してください: 検索ボックスを上書きする方法? そして search-block-form.tpl.php を上書きすることもできます。次に、ブロック構成ページに表示する検索ブロックのページを定義できますadmin/structure/block/manage/search/form/configure

または、任意の領域から検索ブロックを削除して、プログラムで必要な場所にブロックを印刷できます。 ブロックのコンテンツを任意の場所に配置する を参照してください。

<?php       
$block = module_invoke('search', 'block_view', 'form');
print render($block['content']);
?>
4
Sithu
/*
 * create search block
 */

function mymodule_block_info() {
$blocks['my_search'] = array(

'info' => t('My Search Block'),
'cache' => DRUPAL_NO_CACHE,
);
return $blocks;
}
function mymodule_block_view($delta = '') {
$block = array();
switch ($delta) {
case 'my_search':
  $block['title'] = 'MyCustom Search';
  $srchblk = drupal_get_form('mymodule_search_block_form');
  $block['content'] = drupal_render($srchblk);
  break;
  }
  return $block;
}

/* create search form */

function mymodule_search_block_form($form, &$form_state) {
$form['keys'] = array(
'#type' => 'textfield',
'#size' => 15,
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Search',
);
return $form;
}


/*
 * create search result menu callback
 */

function mymodule_menu() {
$items['custom/node/search/%'] = array(
'page callback' => 'mymodule_do_search',
'page arguments' => array(3),
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}

/*
 * create form handler
 */

function mymodule_search_block_form_submit($form, &$form_state) {
drupal_goto('custom/node/search/' . $form_state['values']['keys']);
}
 /*
  * create search result callback function
  */ 


function mymodule_do_search($keys) {
  // set the page title

drupal_set_title('MY search results');
  // get the search results

 $results = module_invoke('node', 'search_execute', $keys );
 return theme('search_results', array('results' => $results));
 }
4
WaQaR Ali

これは私が必要としたものです:

$block = module_invoke('search', 'block_view', 'form');
print render($block['content']);
0