Установите значение по умолчанию для блока формы поиска, в котором будут выполняться поисковые запросы


Таким образом, у меня есть блок формы поиска в моем шаблоне, но после выполнения поиска он не отображает запрос в поле формы.

Как установить значение по умолчанию для результатов поиска в качестве запроса?

Т.е. если я буду искать "кошки".. в поле результатов поиска, я хочу, чтобы "кошки" оставались в поле поиска.

Точно так же, как это происходит в ответах на Drupal:)

 1
Author: Scott Lawrence, 2012-10-11

1 answers

Для обычного блока поиска запускается функция предварительной обработки template_preprocess_search_block_form() (вы можете найти ее в файле search.module основного модуля поиска), которая присваивает введенные вами условия поиска переменной $key, которая используется функцией, создающей форму поиска.

Вы должны включить свою собственную функцию предварительной обработки (названную соответствующим образом для запуска перед вашим собственным файлом шаблона), которая выполняет аналогичную задачу для инициализации любого переменные, которые вам нужны/используются (вы даже можете взять код из приведенного выше). Поскольку похоже, что вы хотите напечатать ключевые слова, убедитесь, что переменная $key действительно установлена... Если у вас есть пользовательская тема, вы можете просто включить функцию предварительной обработки в свою тему template.php файл.

Помогает ли это? Дайте нам знать, если это сработает!

=========== ДОБАВЛЕНИЕ ОТВЕТА ====================

Хорошо, итак, вот что я только что проверил, что работает . Я добавлен препроцессор поиска в мою пользовательскую тему в template.php файл. Если вы просто скопируете это (с префиксом имени вашей собственной темы), оно должно работать после того, как вы очистите свой кэш.

На самом деле мне пришлось немного побиться головой о стену. Сначала я просто скопировал функцию предварительной обработки точно из модуля поиска, за исключением установки значения поля для поискового запроса в этой первой строке (поскольку это не делается по умолчанию)... Но ничего не передано. потом я понял, что мне пришлось добавить вторую строку, которую я прокомментировал, чтобы установить для свойства '#printed' значение false, чтобы drupal_render() отображал их снова. Таааак... Я не знаю, является ли это хорошим решением или нет. Возможно, есть лучший способ, но это все, что я могу придумать, и это работает...

Опять же, короче говоря, это мое копирование функции предварительной обработки модуля поиска и внесение двух изменений в строку, которые я прокомментировал, сказав "ДОБАВИЛ ЭТУ СТРОКУ", чтобы получить дополнительную функциональность. Надеюсь, что это делает чувство.

function YOUR_THEME_preprocess_search_block_form(&$variables) {
// ADDED THIS LINE -- get the search term from the URL, so you can use that as the value of the search box text field
  $variables['form']['search_block_form']['#value'] = arg(2);

  $variables['search'] = array();
  $hidden = array();
  // Provide variables named after form keys so themers can print each element independently.
  foreach (element_children($variables['form']) as $key) {
    $type = $variables['form'][$key]['#type'];
// ADDED THIS LINE -- these fields have already been rendered by the search module's preprocessing function, so they won't render again here unless you do this...
    $variables['form'][$key]['#printed'] = FALSE;
    if ($type == 'hidden' || $type == 'token') {
      $hidden[] = drupal_render($variables['form'][$key]);
    }
    else {
      $variables['search'][$key] = drupal_render($variables['form'][$key]);
    }
  }
  // Hidden form elements have no value to themers. No need for separation.
  $variables['search']['hidden'] = implode($hidden);
  // Collect all form elements to make it easier to print the whole form.
  $variables['search_form'] = implode($variables['search']);  
}

P.s. Вышеизложенное, очевидно, внесло бы изменения во все формы блоков поиска на вашем сайте...

 2
Author: Boriana Ditcheva, 2012-10-17 13:11:58