Профиль пользователя

26 views
Skip to first unread message

Romanoza

unread,
Apr 29, 2009, 10:30:43 AM4/29/09
to Yii Framework
Писал уже на русскоязычной ветке форума, но там чет молчат пока.

Кто-нибудь уже сталкивался с подобной задачей создания профиля
пользователя?

Необходимо при регистрации дать выбрать пользователю его тип
(например, ученик, учитель, директор), в зависимости от этого выдавать
соответствующую форму для заполнения.
есть общая таблица users с типовыми полями username, pass, email итд
и есть таблицы, которые соответствуют каждому типу пользователя
student, teacher, director, в них присущие каждому типу поля.

Соответственно при регистрации нужно обновлять соответствующую
таблицу.

С релиционной AR, вроде, разобрался, не понимаю пока MVC логику такой
задачи для YII.
Соответственно каждый может в любой момент отредактировать свой
профиль.

Был вариант регистрации в 2 шага - первый - единая для всех
регистрация с указанием типа пользователя, после отправки пользователь
переадресовывается на туже страницу действия контроллера, но теперь
там уже в зависимости от выбранного типа пользователя создается
объект, данной модели пользователя и во вьюшке генерится
соответствующая форма.

Ozzy

unread,
Apr 29, 2009, 10:40:49 AM4/29/09
to Yii Framework
Интересная задачка.
Сегодня вечером подумаю и дам ответ :)

xoma

unread,
Apr 30, 2009, 12:52:33 AM4/30/09
to Yii Framework
Можно поступить следующим образом.

Есть форма с общими для все пользователей полями, в эту же форму, при
помощи, renderPartial() (или каким-то другим способом) включается
форма учителя, ученика и т.д. Таким образом для пользователя это
будет одна большая форма. При сабмите выполняется 2 действия:
1. Создается модель User и сохраняется в бд (при этом возвращается ID
записи)
2. Создается модель второго нужного типа, заполняется параметрами и
так же сохраняется в БД.

Можно сделать, конечно все в одной модели, как то вот так:

Всю форму (со всеми полями) передаем в одну модель Users, туда же
передается и флаг - какой тип пользователя создается, потом после
сохранения основной информации (например в методе afterSave) в
зависимости от типа, создаем нужную модель (или просто "сырой" SQL) и
заполняем нужные нам таблицы....

Вот как то так!

Ozzy

unread,
Apr 30, 2009, 2:39:17 AM4/30/09
to Yii Framework
В принципе можно создать три модели.
В главной таблице делаем поле user_type и по нему будем уже проверять
куда данные пихать. А там уже или как сказали чистым sql-ом что не
красиво, или обращатся внутри метода save главной модели к методу save
модели юзерного типа.

Т.е. должно получится что то вроде:
$userType::model()->save();

что б юсер тайп туда запихнуть можно сделать эвел : $date = evel
($userType."::model()->save()");
кстати перед этим надо незабыть атрибуты присвоить. но в принципе это
велосипед, 100% должно быть что то проще о чем мы или незнаем или
забыли.

Romanoza

unread,
Apr 30, 2009, 3:40:29 AM4/30/09
to Yii Framework
спасибо, буду пробовать

по поводу должно быть проще я и сам думал, когда писал вопрос, т.е.
хочется элегантного решения :)

Romanoza

unread,
Apr 30, 2009, 4:59:21 AM4/30/09
to Yii Framework
еще вопрос туда же

реализуется ли мультиязычность с данными в базе?

например, тот же профиль пользователя

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

Ozzy

unread,
Apr 30, 2009, 6:18:35 AM4/30/09
to Yii Framework
В смысле ты хочешь чтобы пользователь мог заполнять свой профиль на
нескольких языках или просто что б форма и текст в ней изменял
название при переключении языка?

В первом случае
В основном в таблице создают поле lang которое говорит к какому языку
относится данный профиль.
Те. если у тебя три языка на сайте то будет идти три записи в таблице
по одному юзеру на трёх языках

id | idUser | lang | name | profilePole2 | ...
1 2 ukr "Тимур", "222"
2 2 eng "Timur", "222"
3 2 rus "Timur", "222"

а в самой выборе просто при заполнении профиля инвой будет выберать
записи где lang = текущему языку сайта.

если во втором случае т.е. что б просто поменять поля в форме - то
используеш функцию Yii::t('словарь', 'слово которое надо перевести')

Romanoza

unread,
May 13, 2009, 6:20:58 AM5/13/09
to Yii Framework
А как в этом случае реализовать валидацию полей выбранного типа
пользователей, они же будут срабатывать только на свои экшены?

aser

unread,
May 25, 2009, 10:28:39 AM5/25/09
to Yii Framework
Если правильно понял вопрос, то валидация производиться в момент
выполнения $userType::model()->save();, и перед вызовом этого метода
можно проверить какой из 3х заполнен и вызывать метод только того в
котором есть данные (проверять можно по первому обязательному полю в
котором есть данные). Или сохранять все 3 модели, если одна из них
ответила положительно то валидация успешна

к примеру конструкция
if($userType1::model()->save() || $userType2::model()->save() ||
$userType3::model()->save()) {

}

Выполнится как только один из методов ответить правдой, следующий
после него уже не будет вызываться...

И все же ничего страшного в разделении на 2 шага нет, в первом
пользователь заполнил основную информацию во втором вспомогательную,
практически любой почтовик или форум проводит такую регистрацию, и вам
проще и пользователь не убежит увидя кучу полей которую нужно
заполнить....

Romanoza

unread,
May 26, 2009, 10:29:09 AM5/26/09
to Yii Framework
Сделали просто первая страница с выбором типа пользователя, а потом
инклюдится соответствующая модель.
Reply all
Reply to author
Forward
0 new messages