пользовательский горизонтальный вход в систему с использованием электронной почты не работает в drupal 6 - PullRequest
0 голосов
/ 26 июля 2011

Я пытаюсь создать пользовательскую форму входа в drupal-6.22, используя модуль регистрации по электронной почте и тему danland.

в файле template.php я внес несколько изменений как

function get_user_login_form() {
  $form_id = 'user-login-form';
  $form = array();
  $form['name'] = array(
    '#type' => 'textfield',
    '#maxlength' => USERNAME_MAX_LENGTH,
    '#required' => TRUE,
    '#size' => 10,
    '#attributes' => array('tabindex' => '1','title'=>'E-mail'),
  );
  $form['pass'] = array(
    '#type' => 'password',
    '#required' => TRUE,
    '#size' => 10,
    '#attributes' => array('tabindex' => '2','title'=>'Password'),
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t(''),
    '#weight' => 2,
    '#attributes' => array('tabindex' => '3')
  );
  $form['#validate'] = user_login_default_validators();
  $form['#build_id'] = sprintf('form-%s', md5(uniqid(mt_rand(), TRUE)));
  $form_state = array();
  drupal_prepare_form($form_id, $form, $form_state);
  drupal_process_form($form_id, $form, $form_state);
  $out = new stdClass;
  $out->form_start =
    sprintf("<form method='post' accept-charset='UTF-8' action='%s'>",
    url('user/login'));
  $out->form_end = "</form>";
  $out->name = drupal_render($form['name']);
  $out->pass = drupal_render($form['pass']);
  $out->submit =
    drupal_render($form['form_id']) .
    drupal_render($form['form_build_id']).
    drupal_render($form['submit']);
  return $out;
}

И в page.tpl.php я вставил этот код

<?php
        $login_form = get_user_login_form(); 
        ?>
        <?php print $login_form->form_start; ?>
        <div class="name-tag"><?php print $login_form->name; ?></div><div class="pass-tag"><?php print $login_form->pass; ?></div><div class="submit-tag"><?php print $login_form->submit; ?></div>
        <?php print $login_form->form_end;
?>

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

<form method='post' accept-charset='UTF-8' action='/dru/user/login'>        <div class="name-tag"><div class="form-item" id="edit-name-1-wrapper">
 <input type="text" maxlength="60" name="name" id="edit-name-1" size="10" value="" tabindex="1" title="E-mail" class="form-text required" />
</div>
</div><div class="pass-tag"><div class="form-item" id="edit-pass-1-wrapper">

 <input type="password" name="pass" id="edit-pass-1"  maxlength="128"  size="10"  tabindex="2" title="Password" class="form-text required" />
</div>
</div><div class="submit-tag"><input type="hidden" name="form_id" id="edit-user-login-form" value="user-login-form"  />
<input type="hidden" name="form_build_id" id="form-8d944c2ceca0b8a4141c73564d35b69b" value="form-8d944c2ceca0b8a4141c73564d35b69b"  />
<input type="submit" name="op" id="edit-submit-2" value=""  tabindex="3" class="form-submit" />
</div>
        </form>

здесь, если я отключаю модуль регистрации по электронной почте и меняю «title» => «E-mail» на «title» => «name» в теге атрибута, он работает нормально для имен. независимо от того, какой идентификатор CSS он генерирует, он добавляет дополнительный текст «-1» в вывод html. я думаю, что это создает проблему.

1 Ответ

1 голос
/ 26 июля 2011

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

Если вы уже знаете, что это существует, и все еще хотите написать что-то нестандартное, тогда я прошу прощения. Я не уверен, как помочь вам с тематическим подходом. Лично я буду использовать пользовательский модуль и либо hook_form_alter () для изменения существующей формы user_login, либо писать свою собственную новую форму.

...