Кто-нибудь уже сталкивался с подобной задачей создания профиля
пользователя?
Необходимо при регистрации дать выбрать пользователю его тип
(например, ученик, учитель, директор), в зависимости от этого выдавать
соответствующую форму для заполнения.
есть общая таблица users с типовыми полями username, pass, email итд
и есть таблицы, которые соответствуют каждому типу пользователя
student, teacher, director, в них присущие каждому типу поля.
Соответственно при регистрации нужно обновлять соответствующую
таблицу.
С релиционной AR, вроде, разобрался, не понимаю пока MVC логику такой
задачи для YII.
Соответственно каждый может в любой момент отредактировать свой
профиль.
Был вариант регистрации в 2 шага - первый - единая для всех
регистрация с указанием типа пользователя, после отправки пользователь
переадресовывается на туже страницу действия контроллера, но теперь
там уже в зависимости от выбранного типа пользователя создается
объект, данной модели пользователя и во вьюшке генерится
соответствующая форма.
Есть форма с общими для все пользователей полями, в эту же форму, при
помощи, renderPartial() (или каким-то другим способом) включается
форма учителя, ученика и т.д. Таким образом для пользователя это
будет одна большая форма. При сабмите выполняется 2 действия:
1. Создается модель User и сохраняется в бд (при этом возвращается ID
записи)
2. Создается модель второго нужного типа, заполняется параметрами и
так же сохраняется в БД.
Можно сделать, конечно все в одной модели, как то вот так:
Всю форму (со всеми полями) передаем в одну модель Users, туда же
передается и флаг - какой тип пользователя создается, потом после
сохранения основной информации (например в методе afterSave) в
зависимости от типа, создаем нужную модель (или просто "сырой" SQL) и
заполняем нужные нам таблицы....
Вот как то так!
Т.е. должно получится что то вроде:
$userType::model()->save();
что б юсер тайп туда запихнуть можно сделать эвел : $date = evel
($userType."::model()->save()");
кстати перед этим надо незабыть атрибуты присвоить. но в принципе это
велосипед, 100% должно быть что то проще о чем мы или незнаем или
забыли.
по поводу должно быть проще я и сам думал, когда писал вопрос, т.е.
хочется элегантного решения :)
реализуется ли мультиязычность с данными в базе?
например, тот же профиль пользователя
типы пользователя хранятся в базе, на русском, если включен режим
сайта на англ, то как их переводить?
и как сделать для каждого пользователя профиль на разных языках?
В первом случае
В основном в таблице создают поле lang которое говорит к какому языку
относится данный профиль.
Те. если у тебя три языка на сайте то будет идти три записи в таблице
по одному юзеру на трёх языках
id | idUser | lang | name | profilePole2 | ...
1 2 ukr "Тимур", "222"
2 2 eng "Timur", "222"
3 2 rus "Timur", "222"
а в самой выборе просто при заполнении профиля инвой будет выберать
записи где lang = текущему языку сайта.
если во втором случае т.е. что б просто поменять поля в форме - то
используеш функцию Yii::t('словарь', 'слово которое надо перевести')
к примеру конструкция
if($userType1::model()->save() || $userType2::model()->save() ||
$userType3::model()->save()) {
}
Выполнится как только один из методов ответить правдой, следующий
после него уже не будет вызываться...
И все же ничего страшного в разделении на 2 шага нет, в первом
пользователь заполнил основную информацию во втором вспомогательную,
практически любой почтовик или форум проводит такую регистрацию, и вам
проще и пользователь не убежит увидя кучу полей которую нужно
заполнить....