[Решено]По подробнее о регистрации пользователей с одинаковыми именами !

Аватар пользователя w_andreu_w w_andreu_w 25 июля 2010 в 3:38

Поставленная задача для реализации проекта чтобы пользователь при регистрации указывает почтовый ящик и пароль это реализовал при помощи модуля email_registration, затем пользователь должен посмотреть письмо и зайти на сайт,возникла проблема с тем что пользователю модуль email_registration присваивает имя которое пишется до @(собачки), а нужно чтобы имя не присваивалось и могло повторяться !
Нашел давненько решали этот вопрос вот здесь http://forum.drupal.ru/node/20393 , но просмотрев hook_user не нашел ответ !

Помогите кто уже сталкивался с подобной ситуацией или же знает ка реализовать !

Комментарии

Аватар пользователя w_andreu_w w_andreu_w 25 июля 2010 в 4:20

Вот пришла в голову идея можно реализовать сделав дополнительно поле назвать его имя и далее темизировать страницу пользователя !
Но все равно не то !
Поскольку остальные модули реагируют на пользователя по автоматическому имени!

Как решить помогите !!!!

Аватар пользователя WiseMan WiseMan 25 июля 2010 в 11:53

"w_andreu_w" wrote:
просмотрев hook_user не нашел ответ

Посмотрите hook_user в модуле email_registration :

<?php
if (empty($names)) {
        
// Default implementation of name generation
        
$namenew preg_replace('/@.*$/'''$edit['mail']);
        
// Remove unwanted characters
        
$namenew preg_replace('/[^a-zA-Z0-9.-]/'''$namenew);

        

// if username generated from email record already exists, 
        //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 целиком или взять все что вам удобно в качестве имени поьзователя.

Аватар пользователя w_andreu_w w_andreu_w 25 июля 2010 в 14:23

Задача была поставлена таким образом чтобы имена могли повторяться !

Как можно прикрутить?

Аватар пользователя seaji seaji 25 июля 2010 в 12:11

Вообще то имя должно быть уникальным. Иначе будете получать ошибку при попытке сохранить в базу данных.

Аватар пользователя WiseMan WiseMan 25 июля 2010 в 16:18

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

На мой взгляд, вариант предложенный мной выше "имя = e-mail или что-то другое уникальное" вполне рабочий. При этом вы можете перекрыть/удалить (case 'view' внутри hook_user) отображение имени пользователя в аккаунте. Перекрыть можно, скажем, своим каким-то дополнительным полем, которое может быть не уникальным. Естественно, это поле нужно создать в hook_user и/или form_alter.

Аватар пользователя ihappy ihappy 25 июля 2010 в 17:00

"w_andreu_w" wrote:
По подробнее о регистрации пользователей с одинаковыми именами !

Зачем? Такое врядли возможно.
"w_andreu_w" wrote:
Задача была поставлена таким образом чтобы имена могли повторяться !

заведи в профиле три поля новых. Имя Фамилия Отчество(на свой вкус сделай).
После везде где выводится логин, меняй на ФИО и как бы будет счастье.
Другого варианта не вижу.

Аватар пользователя Dan Dan 25 июля 2010 в 17:05

Я думаю не стоит делать системное имя пользователя неуникальным, лучше его скрыть и добавить новое поле, которое можно изменять и которое может повторяться.
Вот это может пригодиться — http://drupal.org/project/realname

Аватар пользователя w_andreu_w w_andreu_w 26 июля 2010 в 1:40

да за помощь спасибо но это немного не то поскольку некоторым модуля, а их больше 30-ти не переприсвоишь другие поля и с общими модулями отображения никак не отписаться, тогда сделаю что получиться, а тогда кину на разрыв всем !

Аватар пользователя ihappy ihappy 26 июля 2010 в 2:13

"w_andreu_w" wrote:
да за помощь спасибо но это немного не то поскольку некоторым модуля, а их больше 30-ти не переприсвоишь другие поля и с общими модулями отображения никак не отписаться, тогда сделаю что получиться, а тогда кину на разрыв всем !

у меня не 30 модулей, но хватает. переписал под свои поля. Нечего, потратил недельку на это, не умер. Самое тяжелое было переделать pm_lite. Но даже улучшил его.
"w_andreu_w" wrote:
есть наверное только один выход написать свою CMS !

думаешь писать свою CMS легче чем сделать что выше предлагали?

Аватар пользователя Dan Dan 26 июля 2010 в 2:43

Ну если уж вы так решительно настроены, то вот: [ru-api=hook_schema_alter] - сделаете поле имени неуникальным в БД.

Аватар пользователя seaji seaji 26 июля 2010 в 11:02

"w_andreu_w" wrote:
есть наверное только
один выход написать
свою CMS !

В принципе, да. Это выход, если с Друпалом лень разбираться.