Отображать форму поиска Solr на каждой странице


Я работаю над сайтом, который использует Apache Solr для поиска по сайту, который находится по URL/поиск/сайт/.

Что я хочу сделать, так это добавить форму на каждую страницу сайта, которая позволяет пользователю вводить текст и отправлять его. Затем форма приведет пользователя к /поиску/сайту/странице, отображающей результаты по их поисковому запросу.

Это звучит так, как будто это должно быть просто, но я не вижу, как это сделать, я не могу найти способ создать для этого блок, и когда я пытаюсь чтобы использовать приведенный ниже код для программного отображения формы, она представляется пользователю, но при отправке они попадают на правильную страницу (/поиск/сайт/), но результаты их поиска не отображаются.

$search_form = drupal_get_form('search_form');
$search_form_box = drupal_render($search_form);
print $search_form_box;
print render(drupal_get_form('search_form'));

Я не был на 100% уверен, что "форма поиска" была правильной, но при отправке она приведет вас на правильную страницу результатов поиска (/поиск/сайт/), но условия или результаты не отображаются.

Я совсем новичок в использовании Drupal & Solr, поэтому, если вам нужна какая-либо информация, я пропустил, пожалуйста, спросите.

 2
Author: Neil Nand, 2015-06-29

1 answers

Мне удалось решить эту проблему, чтобы подготовить блок к отображению, я использовал preproccess_region (см. Код ниже)

function THEMENAME_preprocess_region(&$variables){
    $site_search_block = module_invoke('search', 'block_view', 'search');
    $variables["site_search_block"] = render($site_search_block);
}

Затем в файле в моем регионе.tpl (region--menu.tpl.php для меня) Я ввел следующий код для его отображения.

<?php if($site_search_block){ print $site_search_block; } ?>

В качестве дополнительной информации, если вы хотите отредактировать вывод формы, как это сделал я, хотя я не спрашивал об этом здесь, эта функция должна вам помочь:

function THEMENAME_form_search_block_form_alter(&$form, &$form_state, $form_id) {
    $form['#id'] = 'siteSearchForm'; //Set form element ID

    //The form elements (I think)
    $form['search_block_form']['#title'] = t('Search'); // Change the text on the label element
    $form['search_block_form']['#title_display'] = 'invisible'; // Toggle label visibilty
    $form['search_block_form']['#size'] = 10;  // define size of the textfield
    //$form['search_block_form']['#default_value'] = t('SEARCH'); // Set a default value for the textfield

    //Submit button element values
    $form['actions']['submit']['#value'] = t('GO!'); // Change the text on the submit button
    $form['actions']['submit'] = array('#type' => 'image_button', '#src' => base_path() . path_to_theme() . '/img/search-icn.png');

    //Add extra attributes to the text box
    //$form['search_block_form']['#attributes']['onblur'] = "if (this.value == '') {this.value = 'SEARCH';}";
    //$form['search_block_form']['#attributes']['onfocus'] = "if (this.value == 'SEARCH') {this.value = '';}";

    //Prevent user from searching the default text
    //$form['#attributes']['onsubmit'] = "if(this.search_block_form.value=='SEARCH'){ alert('Please enter a search'); return false; }";

    //HTML5 placeholder attribute instead of using the javascript
    $form['search_block_form']['#attributes']['placeholder'] = t('SEARCH');
}
 1
Author: Neil Nand, 2015-07-05 03:14:51