hook_form_alter не работает - PullRequest
5 голосов
/ 10 мая 2010

Я использую drupal 6.16. Приведенный ниже код для hook_form_alter не работает. Я просто пытаюсь изменить «Вход» на «Вход» на кнопке отправки формы входа пользователя

<?php
//$Id$

function helloworld_form_alter($form_id,&$form) {
  switch ($form_id) {

      case 'user_login_form':

    // Change 'Log in' to 'Sign in'.
    $form['submit']['#value'] = t('Sign in');


      break;
  }
}

Есть ли способ это исправить?

Пожалуйста, помогите. Спасибо.

Ответы [ 4 ]

6 голосов
/ 10 мая 2010

В вашем коде две ошибки :

  1. Ваша сигнатура функции неверна , как уже было указано hfidgen (+1). Оно должно быть yourModuleName_form_alter(&$form, &$form_state, $form_id), поэтому в вашем примере переключатель идентификатора формы никогда не сработает.
  2. Вы проверяете неправильный идентификатор формы . В этом случае необходимо проверить два идентификатора формы, и оба они отличаются от того, который вы используете:
    1. user_login_block для небольшой формы входа, доступной в виде блока (обычно используется на большинстве страниц)
    2. user_login для явной страницы входа (обычно находится в «user / login»)

Обе формы в основном идентичны по структуре, поэтому обычно вы можете изменить обе в одной и той же реализации hook_form_alter - просто добавьте еще один оператор case для проверки второй версии.

5 голосов
/ 10 мая 2010

Мне проще использовать функции темы для изменения форм - в файле template.php вашей темы просто создайте это:

function YOURTHEMENAMEHERE_user_login_form($form) {
    $form['submit']['#value'] = t('Sign in');
    //dsm($form);
    return drupal_render($form);
}

закомментированная строка (dsm) предназначена для модуля Drupal devel - который я бы также рекомендовал установить. После того, как вы установили это и установили разрешения для своей роли администратора, чтобы вы могли использовать ее, вы получите новую вкладку, которая показывает вам, как именно построена страница и какие массивы делают и что.

Следуйте по следам в массивах, и вы можете в значительной степени создать тему на своем сайте.

РЕДАКТИРОВАТЬ - о хорошо: P Единственное, что я заметил, не использовав этот хук раньше, это то, что в примере в API есть 3 переменные в функции, но у вас есть 2! Несоответствие означает, что вы, вероятно, получаете неправильную переменную:

function modulename_form_alter(&$form, $form_state, $form_id) {
  switch ($form_id) {
    case 'contact_mail_page':
    $form['submit']['#value'] = t('Sign in');
    break;
  }
}
3 голосов
/ 15 июля 2011

Для такого тривиального изменения вы не должны писать модуль. Цена, которую вы платите за потерю производительности и потраченное время, просто слишком высока для достижения поставленной цели.

Вы можете выполнить замену строки, которая повлияет на строку, обрабатываемую функцией t (). Это делается в файле конфигурации settings.php сайта.

Вот как можно заменить «Вход» на «Вход» ...

$conf['locale_custom_strings_en'] = array(
  'Log In'      => 'Sign In',
);

Это повлияет только на английские строки. Не стесняйтесь заменить задний _en на определенный код языка (_fr, _ja, _es), чтобы сделать то же самое для других языков.

0 голосов
/ 12 мая 2010

Лучше всего сделать это до того, как вы запустите любое изменение формы: посмотрите на исходный код вашей формы и проверьте значение скрытого поля form_id - это даст вам точный идентификатор form_id, который вам нужно использовать.

...