hook_form_alter, не работающий

Я использую 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;
  }
}

Какой-либо способ зафиксировать это?

Помогите.Спасибо.

5
задан consuela 14 August 2014 в 11:21
поделиться

3 ответа

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

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

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

6
ответ дан 18 December 2019 в 13:11
поделиться

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

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

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

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

РЕДАКТИРОВАТЬ - о, хорошо: 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;
  }
}
5
ответ дан 18 December 2019 в 13:11
поделиться

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

0
ответ дан 18 December 2019 в 13:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: