Hello all,
I’m in the same situation as this person.
Dependent DropDown List
I took his code and I adapted it with the name of my tables.
But nothing happens.
My function in the controller is not called.
Here is my code :
My Controller :
public function actionInscription() {
$model = new InscriptionForm;
if(isset($_POST['InscriptionForm'])) {
$model->attributes = $_POST['InscriptionForm'];
if($model->validate()) {
$subject = "Plateforme de rendu de devoir : Inscription d'un etudiant";
$body = $model->nom . ' ' . $model->prenom . ' vient de remplir un formulaire d\'inscription. Veuillez le valider';
$headers = "From: {$model->email}\r\nReply-To: {$model->email}";
mail(Yii::app()->params['adminEmail'],$subject,$body,$headers);
$user = new User;
$user->attributes = $_POST['InscriptionForm'];
$user->password = $model->hashPassword($_POST['InscriptionForm']['password'], $_POST['InscriptionForm']['email']);
if ($user->save())
Yii::app()->user->setFlash('inscription','Merci de vous être inscrit. Votre compte va être activé rapidement');
else
Yii::app()->user->setFlash('inscription','Une erreur s\'est produite pendant l\'inscription, veuillez rééssayer');
$this->refresh();
}
}
$this->render('inscription', array('model' => $model));
}
public function actionDynamicSpecialite() {
$specialite_id = $_POST['inscription']['cleFiliere'];
$data = Specialite::model()->findAll(
'specialite_id=:specialite_id',
array(
':specialite_id'=> $specialite_id));
$data = CHtml::listData($data,'id','intitule');
foreach($data as $value => $intitule) {
echo CHtml::tag('option',
array('value'=>$value),CHtml::encode($intitule),true);
}
}
protected function performAjaxValidation($model) {
if(isset($_POST['ajax']) && $_POST['ajax']==='inscription-form') {
echo CActiveForm::validate($model);
Yii::app()->end();
}
}
My Model :
class InscriptionForm extends CActiveRecord
{
public $nom;
public $prenom;
public $email;
public $cleFiliere;
public $cleSpecialite;
public $clePromotion;
public $login;
public $password;
public $password_repeat;
public $verifyCode;
public static function model($className=__CLASS__) {
return parent::model($className);
}
public function tableName() {
return 'user';
}
public function rules() {
return array(
array('nom, prenom, email, cleFiliere, cleSpecialite, clePromotion, login, password, password_repeat', 'required'),
array('email', 'email'),
array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements()),
array('login', 'unique'),
array('password', 'compare', 'compareAttribute'=>'password_repeat'),
);
}
public function attributeLabels() {
return array(
'nom' => 'Nom',
'prenom' => 'Prénom',
'email' => 'Email',
'login' => 'Login',
'password' => 'Mot de passe',
'verifyCode' => 'Verification Code',
'password_repeat' => 'Retapez votre mote de passe',
'cleFiliere' => 'Parcour suivie',
'cleSpecialite' => 'Spécialité suivie',
'clePromotion' => 'Promotion en cours',
);
}
}
And my view :
<?php
$this->pageTitle=Yii::app()->name . ' - Inscrivez-vous';
$this->breadcrumbs=array(
'inscription',
);
?>
<h1>Formulaire d'inscription</h1>
<?php
if(Yii::app()->user->hasFlash('inscription')):
?>
<div class="flash-success">
<?php echo Yii::app()->user->getFlash('inscription'); ?>
</div>
<?php
else:
?>
<p>
Veuillez vous inscrire et attendre l'activation de votre compte avant de vous connectez.
</p>
<div class="form">
<?php
$form=$this->beginWidget('CActiveForm', array(
'id'=>'inscription-form',
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
'enableAjaxValidation'=>true,
));
?>
<?php
$filiere = CHtml::listData(Filiere::model()->findAll(), 'id','intitule');
echo $form->dropDownList($model,'cleFiliere', $filiere, array('prompt'=>'Choisir un parcours...'),
array(
'ajax' => array(
'type' => 'POST',
'url' => CController::createUrl('site/dynamicSpecialite'),
'update' => '#'.CHtml::activeId($model,'cleSpecialite'),
)
)
);
echo $form->dropDownList($model,'cleSpecialite', array());
?>
<div class="row buttons">
<?php echo CHtml::submitButton('S\'inscrire',array('class'=>'boutonValider')); ?>
<?php echo CHtml::button('Annuler',array('submit' => array('gestionDevoir/index'),'class'=>'bouton')); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
<?php endif; ?>
Thanks in advance for your help.
Best Regards
Arteckos