Поставленная задача для реализации проекта чтобы пользователь при регистрации указывает почтовый ящик и пароль это реализовал при помощи модуля email_registration, затем пользователь должен посмотреть письмо и зайти на сайт,возникла проблема с тем что пользователю модуль email_registration присваивает имя которое пишется до @(собачки), а нужно чтобы имя не присваивалось и могло повторяться !
Нашел давненько решали этот вопрос вот здесь http://forum.drupal.ru/node/20393 , но просмотрев hook_user не нашел ответ !
Помогите кто уже сталкивался с подобной ситуацией или же знает ка реализовать !
Комментарии
Вот пришла в голову идея можно реализовать сделав дополнительно поле назвать его имя и далее темизировать страницу пользователя !
Но все равно не то !
Поскольку остальные модули реагируют на пользователя по автоматическому имени!
Как решить помогите !!!!
Посмотрите hook_user в модуле email_registration :
<?php
// if username generated from email record already exists,
if (empty($names)) {
// Default implementation of name generation
$namenew = preg_replace('/@.*$/', '', $edit['mail']);
// Remove unwanted characters
$namenew = preg_replace('/[^a-zA-Z0-9.-]/', '', $namenew);
//append underscore and number eg:(chris_123)
if (db_result(db_query("SELECT count(*) FROM {users} WHERE uid <> %d AND LOWER(name) = LOWER('%s')", $account->uid, $namenew)) > 0) {
// find the next number available to append to the name
$sql = "SELECT SUBSTRING_INDEX(name,'_',-1) FROM {users} WHERE name REGEXP '%s' ORDER BY CAST(SUBSTRING_INDEX(name,'_',-1) AS UNSIGNED) DESC LIMIT 1";
$nameidx = db_result(db_query($sql, '^'. $namenew .'_[0-9]+$'));
$namenew .= '_'. ($nameidx + 1);
}
}
?>
здесь можно поправить так чтобы в качестве имени пользователя был, скажем e-mail целиком или взять все что вам удобно в качестве имени поьзователя.
Задача была поставлена таким образом чтобы имена могли повторяться !
Как можно прикрутить?
Вообще то имя должно быть уникальным. Иначе будете получать ошибку при попытке сохранить в базу данных.
Если имя пользователя будет повторятся, то это может привести к сбоям в работе. Не факт, но очень может быть. Попробуйте для начала вручную в базе изменить логин у нескольких пользователей, чтобы были одинаковыми и протестируйте как будет вести себя сайт с вашим набором модулей при одновременной авторизации нескольких пользователей, при выполнение основных разрешенных действий пользователем и т.п.
На мой взгляд, вариант предложенный мной выше "имя = e-mail или что-то другое уникальное" вполне рабочий. При этом вы можете перекрыть/удалить (case 'view' внутри hook_user) отображение имени пользователя в аккаунте. Перекрыть можно, скажем, своим каким-то дополнительным полем, которое может быть не уникальным. Естественно, это поле нужно создать в hook_user и/или form_alter.
Зачем? Такое врядли возможно.
заведи в профиле три поля новых. Имя Фамилия Отчество(на свой вкус сделай).
После везде где выводится логин, меняй на ФИО и как бы будет счастье.
Другого варианта не вижу.
Я думаю не стоит делать системное имя пользователя неуникальным, лучше его скрыть и добавить новое поле, которое можно изменять и которое может повторяться.
Вот это может пригодиться — http://drupal.org/project/realname
да за помощь спасибо но это немного не то поскольку некоторым модуля, а их больше 30-ти не переприсвоишь другие поля и с общими модулями отображения никак не отписаться, тогда сделаю что получиться, а тогда кину на разрыв всем !
есть наверное только один выход написать свою CMS !
у меня не 30 модулей, но хватает. переписал под свои поля. Нечего, потратил недельку на это, не умер. Самое тяжелое было переделать pm_lite. Но даже улучшил его.
думаешь писать свою CMS легче чем сделать что выше предлагали?
Ну если уж вы так решительно настроены, то вот: [ru-api=hook_schema_alter] - сделаете поле имени неуникальным в БД.
В принципе, да. Это выход, если с Друпалом лень разбираться.
рашил при помощи трех модулей !
вот так :
email_registration и RealName,LoginToboggan....