Решил сделать блок авторизация пользователя через модуль userloginbar, мне он нравится, как новичку мне достаточно легко с его помощью темизировать этот блок так, как мне нужно. НО есть вот вопрос который я не могу решить, дело в том что как я понял, этот модуль вытягивает сам блок из /modules/user/user.module , а там к полям прописаны "title" и по умолчанию к этим полям не прописаны "value", я убрал "title", а расшифровку самого поля хочу сделать в виде текста по умолчанию в самом поле, вообщем так:
$form = array(
'#action' => url($_GET['q'], array('query' => drupal_get_destination())),
'#id' => 'user-login-form',
'#validate' => user_login_default_validators(),
'#submit' => array('user_login_submit'),
);
$form['name'] = array('#type' => 'textfield',
'#maxlength' => USERNAME_MAX_LENGTH,
'#size' => 60,
'#required' => TRUE,
'#value' => t('Username'),
);
$form['pass'] = array('#type' => 'password',
'#maxlength' => 60,
'#size' => 60,
'#required' => TRUE,
'#value' => t('Password'),
);
только вот поле Логина понимает приписанный '#value' => t('Username'), а в поле "pass" подобное не прокатывает, мое подозрение что это из-за того, что данное поле определено как '#type' => 'password', народ подскажите как добавить в него текст по умолчанию?
Комментарии
[module=compact_forms] или через placeholder
placeholder
После установки compact forms сайт полетел, ошибка - "страница не найдена". Перепробовал все, чистил кэш, логи об ошибках пусты, в settings.php менял значение update на "TRUE", лимит памяти в php - 64Mb, все бесполезно, помогло восстановление из бекапа. Буду ковырять placeholder.
Jchoo, а можешь поподробнее описать, как прикрутить? Я так понимаю ссылку на файл js прикручиваешь в page.tpl.php, а атрибут placeholder приписываешь в user.module?
День изысканий по-большому счету ничего не дал, результат такой, можно поставить плагин placeholder, позволяет дописать этот атрибут формам, но поле с типом "password" по-прежнему не хочет выводить этот атрибут, попытка успешна добавить placeholder к полю с паролем в /unclude/form.inc, будет работать, но там негде добавить этот параметр к полю "username", такая вот ж...
Промежуточное решение таково - отрыл форму, добавил в template.tpl
global $user;
$output = '';
if (!$user->uid) {
$output .= '<div id="user-bar">
<form action="/user" accept-charset="UTF-8" method="post" id="user-login">
<input type="text" placeholder=" Логин" maxlength="60" name="name" id="edit-name" value="" tabindex="1" class="form-text required" />
<input type="password" placeholder=" Пароль" name="pass" id="edit-pass" tabindex="2" class="form-text required" />
<input type="hidden" name="form_id" id="edit-user-login" value="user_login" />
<input type="submit" name="op" id="edit-submit" value="Войти" tabindex="3" class="form-submit" />
</form></div>';
}
else {
$output .= '<div id="user-info">';
$output .= t('<div class="text">Вы зашли как - !user</div>', array('!user' => theme('username', $user)));
$output .= theme('item_list', array(
l(t('Ваш аккаунт'), 'user/'.$user->uid, array('title' => t('Редактировать аккаунт'))),
l(t('Выход'), 'logout')));
$output .= '</div>';
}
return $output;
}
работает, только вот два вопроса, как перенаправить после авторизации не на страницу пользователя, а на главную, и как к этой форме прикрутить ссылки на такие вещи как "регистрация" и "восстановление пароля"?
<?php function название_твоей_темы_user_login_block($form) {
$form['name']['#title'] = t('Логин');
$output .= drupal_render($form['name']);
$output = '';
$form['links'] = null; //array('#value' => theme('item_list', $items));
$item1 = l(t('Напомнить пароль'), 'user/password', array('attributes' => array('title' => t('Request new password via e-mail.'),'class' => 'user-pass')));
$item2 = l(t('<img src="/'.path_to_theme().'/images/reg-button.png">'), 'user/register', array('attributes' => array('title' => t('Create a new user account.'),'class' => 'user-reg'),'html' => TRUE));
$form['link1']['#value'] = $item1;
$form['link2']['#value'] = $item2;
$form['name']['#value'] = t('Ваш логин');
$form['name']['#attributes'] = array('class' => 'NormalTextBox txtSearch', 'onblur' => "if (this.value == '') {this.value = '".$form['name']['#value']."';} ;", 'onfocus' => "if (this.value == '".$form['name']['#value']."') {this.value = '';} ;" ); //вариант через js но в пассворде будут ****
$form['pass']['#attributes'] = array('class' => 'NormalTextBox txtSearch','placeholder' => t('Ваш пароль') );
$form['pass']['#suffix'] = '<script type="text/javascript"> inputPlaceholder( document.getElementById(\'edit-pass\') )</script>'; //Вариант с библиотекой placeholder.js работает на всех полях.
$form['submit']['#type'] = 'image_button';
$form['submit']['#src'] = path_to_theme() . '/images/enter-button.png';
$form['submit']['#value']= t('Вход');
$output .= drupal_render($form['pass']);
$output .= drupal_render($form['links']);
$output .= drupal_render($form['link1']);
$output .= drupal_render($form['link2']);
$output .= drupal_render($form['submit']);
$output .= drupal_render($form);
return $output;
}
?>
Рабочий вариант посмотри тут