2 формы на странице

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

2 формы на странице

Сообщение nizsheanez »

Что-то я удивился:
захотел вывести 2 формы на разных табах. формы входа и регистрации.
но у полей этих форм одинаковые id
соответственно валидатор потерялся


как вообще вывести 2 формы на страницу для одинаковой модели?
Аватара пользователя
Stamm
Сообщения: 407
Зарегистрирован: 2010.03.14, 18:59
Откуда: Россия, Москва
Контактная информация:

Re: 2 формы на странице

Сообщение Stamm »

Указать id прнудительно при вызове виджета
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: 2 формы на странице

Сообщение nizsheanez »

нет фишка в том что валидация в yii работает не от id формы, его может и не быть, а от id полей. че мне для каждого поля свой id прописывать? еще варианты?
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: 2 формы на странице

Сообщение because »

прописать id для полей формы входа, там их от силы 2-3 )
RTFM !
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: 2 формы на странице

Сообщение nizsheanez »

ну поле входа это пример.
а если мне надо скажем пакетную загрузку данных организовать и вывести 10 одинаковых форм по 10 полей. а потом еще и кнопочку: добавить еще 10
Аватара пользователя
andy_s
Сообщения: 127
Зарегистрирован: 2012.01.22, 13:15

Re: 2 формы на странице

Сообщение andy_s »

Проще всего использовать разные классы форм, один из которых наследует другой, да и логика так станет прозрачнее.

Есть и экзотический вариант - tabular input, 0-ая форма - логин, 1-ая - регистрация, но это на любителя :D
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: 2 формы на странице

Сообщение nizsheanez »

Проще всего использовать разные классы форм
что? как относится смена класса формы к формированию id инпута?

Да и количество форм в проекте стремится к бесконечности, так что вариант с созданием класса для каждой формы - это немного страшно.


может я вопрос не ясно поставил:
по умолчанию используется CHtml::activeId для создания id. и он никак не зависит от того в какой форме рендерится инпут.
Это фишечка такая или yii действительно не дает для одной модели выводить на странице 2 формы?
Последний раз редактировалось nizsheanez 2012.02.06, 23:38, всего редактировалось 1 раз.
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: 2 формы на странице

Сообщение because »

кажется в формировании id участвует еще и имя формы, можно попробовать генерировать имя формы. ну или залезть в "недра" )
RTFM !
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: 2 формы на странице

Сообщение nizsheanez »

в недрах все сводится к CHtml::getIdByName так что никакой формой не пахнет
Аватара пользователя
andy_s
Сообщения: 127
Зарегистрирован: 2012.01.22, 13:15

Re: 2 формы на странице

Сообщение andy_s »

Для модели класса MyModel все поля будут иметь имена MyModel['fieldName'], а id - MyModel_fieldName. Неужели так много форм, что на каждую отдельного класса не хватит? Или я не понял вопроса :)
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: 2 формы на странице

Сообщение nizsheanez »

andy_s, возможно я не понял твоего ответа.
объясни о каких отдельных классах ты говоришь. они должны наследовать CForm, CActiveForm, CFormInputElement или что? Чем будут отличаться отдельные классы?
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: 2 формы на странице

Сообщение because »

если честно я не представляю какой смысл генерировать 10 одинаковых форм, когда можно отправлять одну последовательно несколько раз или сделать табличный ввод. если встанет такая задача, придется вести счетчики каждого сгенерированного поля, перекрыть CHtml, если yii не поставляет это из коробки
RTFM !
Аватара пользователя
andy_s
Сообщения: 127
Зарегистрирован: 2012.01.22, 13:15

Re: 2 формы на странице

Сообщение andy_s »

nizsheanez писал(а):andy_s, возможно я не понял твоего ответа.
объясни о каких отдельных классах ты говоришь. они должны наследовать CForm, CActiveForm, CFormInputElement или что? Чем будут отличаться отдельные классы?
Ну хорошо, по порядку:
1. Задача: есть одна модель (путь будет UserForm), но формы на странице хотим две.
2. Проблема: CHtml генерирует атрибуты полей форм на основе имени класса (в нашем случае он один и тот же) + добавляется имя самого поля (пусть у нас совпадение будет по username). В итоге получаем в двух формах абсолютно одинаковые поля: <input name="UserForm[username]" id="UserForm_username" />
3. Решение: т.к. по своей сути формы всё-таки разные, то я не вижу логики в использовании табличного ввода. Вместо этого я предлагаю сделать два класса, наследующих UserForm: LoginForm и RegistrationForm. Мне кажется, реализация у них тоже должна различаться (пусть хотя бы в одном захотим сделать каптчу, а в другом нет, хотя тут можно и сценарии прикрутить). Кстати, можно и двумя классами обойтись вместо трёх.
4. В итоге имеем две формы с разными полями: <input name="LoginForm[username]" id="LoginForm_username" /> и <input name="RegistrationForm[username]" id="RegistrationForm_username" />. Никаких коллизий уже нет.
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: 2 формы на странице

Сообщение nizsheanez »

Сильно громоздкие решения, которые по сути задачу-то не решают, потому что когда она возникнет в другом месте, придется опять же ручками все решение перписывать(перекопипастивать). хочется решить так решить, что бы потом другие разработчики на такую проблему даже бы не наткнулись.

Понятно, что все можно переопределить и нагородить огородов, но какой-то не yii style
chang
Сообщения: 125
Зарегистрирован: 2010.12.03, 20:01

Re: 2 формы на странице

Сообщение chang »

2 формы => два action-а в нутри которых не должно быть никакого конфликта
если нужно чтоб юзер типа как одновременно заполнял 2 формы а потом любую из них отправил на сервак - то здесь уже якс подключить нужно
которым снова таки будут выбираться лишь вложенные в саму форму элементы и отправляются по нужному адресу

с проверкой на стороне клиента для продублированной формы с замененным лишь id-шником проблем вродь нет
http://www.jetscreenshot.com/demo/20120207-802-58kb.jpg
или я не понял сути вопроса?
byteasdf
Сообщения: 99
Зарегистрирован: 2010.09.15, 09:01

Re: 2 формы на странице

Сообщение byteasdf »

А чем не подходит tabular input?
При выводе данных вот так:

Код: Выделить всё

echo CHtml::activeTextField($model, "[$i]name");
Имя у поля будет ModelName[$i][name], и значит никаких особых проблем с получением/валидацией данной формы на сервере не будет.
При этом не будет проблем и в случае, если нам захочется в дальнейшем динамически добавлять модели на стороне клиент.а
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Re: 2 формы на странице

Сообщение TM123 »

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

Form1[id] ...
Form2[id] ...

А дальше использовать набор полей от соотвеnствующей Form*
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: 2 формы на странице

Сообщение nizsheanez »

К последним трем комментариям:
Вы не поняли проблему.
Валидация не работает на стороне клиента, т.к. разные input имеют одинаковые id, типа User_email, соответственно одинаковые id имеют и сообщения об ошибках. Как следствие при сабмите одной, ошибки появляются в другой, ну просто потому что в html она находится раньше и jquery по id нашел другой input.
Это недоработка jquery.yiiactiveform.

атрибуты: id формы, action формы, name инпута к проблеме отношения не имеют.
Аватара пользователя
andy_s
Сообщения: 127
Зарегистрирован: 2012.01.22, 13:15

Re: 2 формы на странице

Сообщение andy_s »

nizsheanez, вам уже предложили два варианта решения проблемы, боюсь, других не будет :) Не знаю, является ли это недоработкой activeform, т.к. генерация полностью уникальных id полей может тоже создать проблемы, ведь сейчас к ним можно обращаться, зная лишь класс формы и имя атрибута. Если у вас есть предложения, то можете смело их высказывать разработчикам :)
Аватара пользователя
nizsheanez
Сообщения: 814
Зарегистрирован: 2011.04.29, 13:09
Откуда: Москва

Re: 2 формы на странице

Сообщение nizsheanez »

Сам же пока установил id полям в ручную.

Самым хорошим решением мне кажется изменить логику yiiactiveform(всмысле не самому, а для разработчиков), так что бы ко всем полям происходило обращение через родительскую форму(не через id, т.к. id у формы вроде как может и не быть). Сейчас думаю, не вызовет ли это каких-то подводных камней.
Думаю что вызовет.
Ответить