put this into your controler
public $form;
public $form_model;
public function actionKontakti()
{
$model= new KontaktiModel;
$this->form_model = $model;
$this->performAjaxValidation($this->form_model);
if(isset($_POST['KontaktiModel']))
{
$this->form_model->attributes=$_POST['KontaktiModel'];
if($this->form_model->validate())
{
$headers="From: {$model->email}\r\nReply-To: {$model->email}";
mail(Yii::app()->params['adminEmail'],"Poslan je novi upit sa etvrtka.com",$this->form_model->poruka,$headers);
Yii::app()->user->setFlash('kontakt','Vaš upit je usješno poslan.');
$this->refresh();
}
}
$this->render('kontakti' ,array('model'=>$this->form_model));
}
protected function performAjaxValidation()
{
if(isset($_POST['ajax']) && $_POST['ajax']==='KontaktForm')
{
echo CActiveForm::validate($this->form_model);
Yii::app()->end();
}
}
public function zapcniwiget(){
$this->form = $this->beginWidget('CActiveForm', array(
'id'=>'KontaktForm',
'enableAjaxValidation'=>true,
'clientOptions' => array('validateOnSubmit' => true),
//'focus'=>array(ime,prezime,email,telefon,poruka,verifyCode)
));
}
public function form_errors(){
$optionNames = array(
'validationDelay' => '200',
'validateOnChange' => true,
'validateOnType' => false,
'hideErrorMessage' => false, //true false
'inputContainer' => '',//undefined
'errorCssClass' => '',//undefined
'successCssClass' => '',//undefined
'validatingCssClass' => '',//undefined
//'beforeValidateAttribute' => '',//undefined
//'afterValidateAttribute' => '',//undefined
); //if this need to be foreach fild,change it
echo $this->form->error($this->form_model,'ime',$optionNames,$enableAjaxValidation=true);
echo $this->form->error($this->form_model,'prezime',$optionNames,$enableAjaxValidation=true);
echo $this->form->error($this->form_model,'email',$optionNames,$enableAjaxValidation=true);
echo $this->form->error($this->form_model,'telefon',$optionNames,$enableAjaxValidation=true);
echo $this->form->error($this->form_model,'poruka',$optionNames,$enableAjaxValidation=true);
echo $this->form->error($this->form_model,'verifyCode',$optionNames,$enableAjaxValidation=true);
}
your form model my is
class KontaktiModel extends CFormModel
{
public $ime;
public $prezime;
public $email;
public $poruka;
public $telefon;
public $verifyCode;
public function rules()
{
return array(
// name, email, subject and body are required
array('ime,prezime, email, poruka,telefon', 'required'),
// email has to be a valid email address
array('email', 'email'),
// verifyCode needs to be entered correctly
array('verifyCode', 'captcha', 'allowEmpty'=>!extension_loaded('gd')),
);
}
}
and the view of the kontakt form
<?php $this->zapcniwiget(); ?>
<?php echo $this->form->labelEx($this->form_model,'ime'); ?></div>
<?php echo $this->form->textField($this->form_model,'ime',array('class' => 'none')); ?>
<?php echo $this->form->labelEx($this->form_model,'prezime'); ?>
<?php echo $this->form->textField($this->form_model,'prezime',array('class' => 'none')); ?>
<?php echo $this->form->labelEx($this->form_model,'email'); ?></div>
<?php echo $this->form->textField($this->form_model,'email',array('class' => 'none')); ?>
<?php echo $this->form->labelEx($this->form_model,'telefon'); ?>
<?php echo $this->form->textField($this->form_model,'telefon',array('class' => 'none')); ?>
<?php echo $this->form->labelEx($this->form_model,'poruka'); ?>
<?php echo $this->form->textArea($this->form_model,'poruka',array('class' => 'none')); ?>
<?php if(extension_loaded('gd')): ?>
<?php $this->widget('CCaptcha',array('buttonLabel' => 'Novi Kod') ); ?></div>
<?php echo $this->form->textField($this->form_model,'verifyCode',array('class' => 'none')); ?><?php endif; ?>
<?php $this->form_errors();?>
<?php echo CHtml::submitButton('Submit',array('class' => 'posaljigumb', 'value' =>'')); ?>
<?php if(Yii::app()->user->hasFlash('kontakt')): ?>
<?php echo Yii::app()->user->getFlash('kontakt'); ?>
<?php endif; ?><?php $this->endWidget(); ?>
you can modify for your needments, and walla ajax form works