Метка поля поиска


Я использую код, найденный на https://www.drupal.org/node/154137 , и я добавил этот код в свой template.php файл.

function sample_theme_form_search_block_form_alter(&$form, &$form_state, $form_id) {
  $form['actions']['submit']['#value'] = t('GO!'); // Change the text on the submit button
}

Метка поля поиска успешно изменена с "Поиск" на "Вперед!" Однако при выполнении поиска на странице результатов поиска (/search/node/search_term) отображается метка Поиск (даже после обновления страницы). Я уверен template.php это должно быть преодолено.

Почему не Поиск метка переопределено из моего кода?

 1
Author: kiamlaluno, 2016-05-30

2 answers

С помощью sample_theme_form_search_block_form_alter() вы просто изменяете форму, идентификатор которой равен search_block_form, которая отличается от формы, которую вы видите на этой странице, идентификатор которой равен search_form. Часть Расширенного поиска добавлена из node_form_search_form_alter() ( другая реализация hook_form_FORM_ID_alter()), поэтому ваш крючок должен запускаться после него, иначе вы не увидите часть Расширенного поиска .

Я бы использовал следующий код.

function sample_theme_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'search_block_form') {
    $form['actions']['submit']['#value'] = t('GO!');
  elseif ($form_id == 'search_form') {
    $form['basic']['submit']['#value'] = t('GO!');
    // The Node module could not have added its form fields, so 
    // check its submit button does exist.
    if (isset($form['advanced']['submit'])) {
      $form['advanced']['submit']['#value'] = t('GO!');
    }
  }
}

Имейте в виду, что, поскольку вы реализуете крючок alter в тема:

  • Он вызывается после всех подключений модуля, так что также был вызван node_form_search_form_alter(), и вы наверняка тоже измените его кнопку отправки

  • Крючки Alter, реализованные темами, вызываются только для темы, используемой в настоящее время для этой страницы, и ее базовых тем; это отличается от крючков, реализованных модулями, поскольку будут вызваны все крючки, реализованные включенными модулями.

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

 1
Author: kiamlaluno, 2016-05-31 05:10:49

Вместо того, чтобы пробовать код в файле шаблона, попробуйте следующий код в пользовательском модуле.

function hook_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == "your_required_form_id") {
    $form['actions']['submit']['#value'] = t('GO!');
  }
}

Надеюсь, это поможет вам

 1
Author: Abin, 2016-05-30 05:18:01