Зависимые Селекты

Всем здравствуйте и с наступающим Новым Годом всех :)

Собственно вопрос - подскажите с какой стороны подходить при создании подобных форм http://partner.ferio.ru/RequestMgt/RequestSend.php :unsure:

Со стороны получения списка зависимых селектов через ajax :)

Пример с двумя списками: http://www.yiiframework.com/wiki/24/creating-a-dependent-dropdown

http://stackoverflow.com/questions/16919734/dropdownlist-yii-3-or-more-models/16921537#16921537 c 3мя, немного кучерявый.

Что происходит:

  1. Вешаете onchange на select.

  2. Делаете ajax запрос.

  3. В контроллере генерируете список опций, и выводите их.

  4. В success аякса делаете как то так:




success:function(data){

$("my_2nd_drop").empty();

$("my_2nd_drop").append(data);

}



Получаете то что вам и нужно.

С наступающими :rolleyes:

Спасибо, это уже давно переварено ;) Там форма не совсем простая(для меня во всяком случае), там они мало того что зависимы, дык по сути на всех вкладках(табах) одна и та же форма(частями), вот и думаю как это все слепить до кучи :(

Спасибо, гляну, там просто вариантов компоновки море(в моем примере), это ж скока работы :unsure:

P.S: насколько я понял данные отдавать лучше в json и хранить в отдельном файле на серве(хотя вроде как скоро json использовать не будет возможным в версии php 5.5 и выше его вроде как нет) ? :unsure:

Работы много, но всегда можно упростить.

Вы видите что функционал делает почти тоже самое все время - складывайте все в 1 функцию.

Это ведь у вас форма, вот на onchange можно например передавать все параметры и в зависимости от них формировать то что нужно.

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

Что значит хранить в отдельном файле, и кто это с вами пошутил так? :mellow:

Берите данные из php, делайте json_encode() или CJSON::encode() и передавайте в js.

P.S.

{

"date": 1387875417,

"news": 1,

"recomendation": 1

}

а вот это json? ::)

Еще раз спасибо, пойду обдумывать план действий, главное не ошибиться ;D

P.S: он вроде ::)

Так, еще вопрос, кто нить может подсказать как добавить класс к option ? Т.е. через dropDownList сейчас генерится так:




<select style="width: 110px" name="Forms[auto_kpp]" id="Forms_auto_kpp">

<option value="empty">КПП</option>

<option value="Автомат">Автомат</option>

<option value="Вариатор">Вариатор</option>

<option value="Механика">Механика</option>

<option value="Типтроник">Типтроник</option>

</select>



А нужна возможность задавать каждому option свой class, т.е. так:




<select style="width: 110px" name="Forms[auto_kpp]" id="Forms_auto_kpp">

<option value="empty">КПП</option>

<option value="Автомат" class="Автомат">Автомат</option>

<option value="Вариатор" class="Вариатор">Вариатор</option>

<option value="Механика" class="Механика">Механика</option>

<option value="Типтроник" class="Типтроник">Типтроник</option>

</select>



Можно конечно на голом html, но некрасиво ведь :(

Никак, так что придётся делать некрасиво на голом html :D хотя не вижу ничего некрасивого. Вопрос в другом - зачем такие странные названия классов?

P.S. На самом деле можно: http://www.yiiframework.com/doc/api/1.1/CHtml#activeDropDownList-detail (см. options) но это вряд ли красивей, чем "голый html".

Нельзя option задать класс.

Нельзя ведь изменить стили опций стандартного селекта, а в теге можно задавать disabled, value и прочие характеристики.

Да и классы действительно странные, зачем они вам нужны в таком виде?

Если нужно применить стили - используйте js плагин. Я например пользуюсь chosen.

Ок, спасибо, просто хочу прикрутить такую вот вещь http://www.appelsiini.net/projects/chained :)

Странно, что там используются классы, логичнее было бы сделать data-* атрибуты.

Ну да, было бы более актуально, хотя если честно разницы особой не вижу, форму пришлось ручками писать ;D

Подскажите пожалуйста кто-нибудь следующий момент. Сейчас у меня в контроллере такой вариант, если модель проходит валидацию, отдаю новую часть формы:




$valid=$model->validate();            

if($valid){

 $content[] = $this->renderPartial("/forms/_sparesform", array('model' => $model), true);

	echo CJSON::encode(array('status'=>'success', 'content'=> $content));

	Yii::app()->end();

}



Всего форма разбита на четыре части, модель общая(у каждой части формы свой экшн). Выводятся с помощью CJuiTabs(всего четыре вкладки(таба)). Вопрос, можно ли каким либо образом при успешной валидации не обновлять текущую вкладку(таб) как сейчас:




<?php echo CHtml::ajaxSubmitButton('',CHtml::normalizeUrl(array('/forms/SendAutoForm','render'=>true)),

            array(

                      'dataType'=>'json',

                      'type'=>'post',

                      'success'=>'function(data) { 

                          if(data.status=="success"){

                               $("#auto-form").html(data.content);

                               $("#auto-form")[0].reset();

                          }else{

                              $.each(data, function(key, val) {

                              $("#auto-form #"+key+"_em_").text(val);                                                    

                              $("#auto-form #"+key+"_em_").show();

                              });

                          }       

                      }'

                 )); ?>



а перебрасывать на новую вкладку(таб) ? :)