questo è il codice di dove richiamo il file dove c’è il form:
<?php if(Yii::app()->user->hasFlash('commentSubmitted')): ?>
<p class="greenalert"><?php echo Yii::app()->user->getFlash('commentSubmitted'); ?></p>
<?php else: ?>
<?php $this->renderPartial('/commenti/_form',array(
'model'=>$comment,
)); ?>
<?php endif; ?>
questo è il codice del _form.
Ho provato sia con il bottone normale, che mi ricarica sempre la pagina e non valida nel client, e con il bottone ajax che mi fa la chiamata ajax e mi ritorna il pezzo json con tutti gli errori del form ma non me li mostra.
Ho provato a mettere tutti true sui clientOptions ma nulla
<div class="blogcommentform">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'comment-form',
'action'=>Yii::app()->getRequest()->getUrl()."#anchform",
'enableAjaxValidation'=>true,
'enableClientValidation' => true,
'clientOptions'=>array('validateOnSubmit'=>true,
'validateOnType'=>false,
'validateOnChange'=>true,
)); ?>
<fieldset>
<?php echo $form->labelEx($model,'nome',array('class'=>'commlabtxt')); ?>
<?php echo $form->textField($model,'nome',array('class'=>'commfietxt','placeholder'=>'Il tuo nome')); ?>
<?php echo $form->error($model,'nome',array('id'=>'Commenti_nome')); ?>
<?php echo $form->labelEx($model,'email',array('class'=>'commlabtxt')); ?>
<?php echo $form->textField($model,'email',array('class'=>'commfietxt','placeholder'=>'La tua email')); ?>
<?php echo $form->error($model,'email'); ?>
</fieldset>
<fieldset>
<?php echo $form->labelEx($model,'testo'); ?>
<?php echo $form->textArea($model,'testo',array('rows'=>5, 'cols'=>5,'class'=>'commfietxta','placeholder'=>'Il tuo commento')); ?>
<?php echo $form->error($model,'testo', array('class'=>'errorMessage alerttxta')); ?>
</fieldset>
<fieldset class="commentbutton_fieldset">
//bottone ajax
<?php echo CHtml::ajaxSubmitButton('InviaA','','',array('class'=>'commentbutton')); ?>
//bottone normale
<?php //echo CHtml::submitButton('Invia',array('class'=>'commentbutton')); ?>
</fieldset>
<?php $this->endWidget(); ?>
</div>
questo è il controller
public function actionView()
{
$post=$this->loadModel();
$comment=new Commenti;
$this->performAjaxValidation($comment);
if(isset($_POST['Commenti']))
{
$comment->attributes=$_POST['Commenti'];
if($post->addComment($comment))
{
if($comment->stato==Commenti::STATUS_PENDING)
Yii::app()->user->setFlash('commentSubmitted','<span>Grazie per il tuo commento!</span> Il tuo commento sarà pubblicato dopo l\'approvazione.');
if($comment->stato==Commenti::STATUS_APPROVED){
Yii::app()->user->setFlash('commentSubmitted','<span>Grazie per aver scritto!</span> Il tuo commento è stato inserito con successo.');
}
$this->refresh(true,'#anchform');
}
}
$this->render('view',array(
'model'=>$post,
'comment'=>$comment,
));
}
protected function performAjaxValidation($model) {
if(isset($_POST['ajax']) && $_POST['ajax']==='comment-form'){
echo CActiveForm::validate($model);
Yii::app()->end();
}
}
questo è il model dei commenti
class Commenti extends CActiveRecord
{
const STATUS_PENDING=0;
const STATUS_APPROVED=1;
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'commenti';
}
public function rules()
{
return array(
array('nome, email, testo', 'required','message'=>"{attribute} obbligatorio"),
array('nome', 'length', 'min'=>3, 'max'=>255),
array('email', 'email'),
array('testo', 'length', 'min'=>5, 'max'=>200),
array('nome, email, testo', 'safe', 'on'=>'search'),
);
}
public function relations()
{
return array(
'author' => array(self::BELONGS_TO, 'utenti', 'id_utente'),
);
}
public function attributeLabels()
{
return array(
'id' => 'ID',
'id_post' => 'Id Post',
'nome' => 'Nome',
'email' => 'Email',
'data' => 'Data',
'testo' => 'Testo',
'id_utente' => 'Id Utente',
'stato' => 'Stato',
);
}
public function search()
{
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('id_post',$this->id_post);
$criteria->compare('nome',$this->nome,true);
$criteria->compare('email',$this->email,true);
$criteria->compare('data',$this->data,true);
$criteria->compare('testo',$this->testo,true);
$criteria->compare('id_utente',$this->id_utente);
$criteria->compare('stato',$this->stato);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
protected function beforeSave()
{
if(parent::beforeSave())
{
if($this->isNewRecord)
$this->data=new CDbExpression('NOW()');
return true;
}
else
return false;
}
}