Allora, queste sono le rules del model:
public function rules() {
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('venditore, stato,titolo,descrizione, lingua_default, vendi_a, accetta_condizioni', 'required'),
array('venditore, attivo, quantita, articolo_permanente, accetta_condizioni', 'numerical', 'integerOnly' => true),
array('stato, codice_magazzino, offerta_privati, offerta_azienda', 'length', 'max' => 45),
array('vendi_a', 'length', 'max' => 20),
//array('accetta_condizioni','required', 'requiredValue'=>1 ),
array('video, immagine', 'length', 'max' => 255),
array('peso, altezza, lunghezza, larghezza, lingua_default, prezzo_privati, prezzo_azienda, percentuale_sconto_privati, soglia_trasporto_gratuito_privati, percentuale_sconto_azienda, soglia_trasporto_gratuito_azienda, minimo_ordine', 'length', 'max' => 10),
array('titolo, titleTag', 'length', 'max' => 65),
array('descrizione, h1Tag', 'length', 'max' => 250),
array('descriptionTag, keywordTag', 'length', 'max' => 160),
array('inizio_offerta_privati, termine_offerta_privati, inizio_offerta_azienda, termine_offerta_azienda', 'default' , 'setOnEmpty'=>true),
array('inizio_offerta_privati, termine_offerta_privati, inizio_offerta_azienda, termine_offerta_azienda', 'date', 'format' => 'dd/mm/yyyy', 'allowEmpty' => true),
//array('immagine', 'file','types'=>'jpg, gif, png','allowEmpty'=>true, 'on'=>'update'),
//array('video', 'file','types'=>'avi, mpeg, mpg, flv, mov, wmv', 'allowEmpty'=>true, 'on'=>'update'),
array('titolo, descrizione', 'unique'),
array('cat', 'safe'),
array('dataInserimento, dataScadenza, ultimoRinnovo, scadenzaB2B, ultimoRinnovoB2B, inizio_offerta_privati, termine_offerta_privati, inizio_offerta_azienda, termine_offerta_azienda', 'safe'),
//array('prezzo_privati', 'validatePrezzoPrivati'),
array('id, venditore, dataInserimento, dataScadenza, ultimoRinnovo, attivo, stato, vendi_a, scadenzaB2B, ultimoRinnovoB2B, video, immagine, quantita, codice_magazzino, articolo_permanente, peso, altezza, lunghezza, larghezza, offerta_privati, offerta_azienda, titolo, descrizione, titleTag, descriptionTag, h1Tag, keywordTag, lingua_default, accetta_condizioni, prezzo_privati, prezzo_azienda, percentuale_sconto_privati, soglia_trasporto_gratuito_privati, inizio_offerta_privati, termine_offerta_privati, percentuale_sconto_azienda, soglia_trasporto_gratuito_azienda, inizio_offerta_azienda, termine_offerta_azienda, minimo_ordine', 'safe', 'on' => 'search'),
array('vendi_a', 'application.extensions.YiiConditionalValidator',
'validation' => array('compare', 'compareValue' => "privati"),
'dependentValidations' => array(
'prezzo_privati' => array(
array('required'),
),
),
),
array('vendi_a', 'application.extensions.YiiConditionalValidator',
'validation' => array('compare', 'compareValue' => "aziende_privati"),
'dependentValidations' => array(
'prezzo_privati' => array(
array('required'),
),
),
),
array('offerta_privati', 'application.extensions.YiiConditionalValidator',
'validation' => array('compare', 'compareValue' => '', 'operator' => "!="),
'dependentValidations' => array(
'inizio_offerta_privati, termine_offerta_privati' => array(
array('required'),
array('date',"format"=>'dd/mm/yyyy'),
),
),
),
array('offerta_azienda', 'application.extensions.YiiConditionalValidator',
'validation' => array('compare', 'compareValue' => '', 'operator' => "!="),
'dependentValidations' => array(
'inizio_offerta_azienda, termine_offerta_azienda' => array(
array('required'),
array('date',"format"=>'dd/mm/yyyy'),
),
),
),
array('offerta_privati', 'application.extensions.YiiConditionalValidator',
'validation' => array('compare', 'compareValue' => 'sconto', 'operator' => "=="),
'dependentValidations' => array(
'percentuale_sconto_privati' => array(
array('required'),
),
),
),
array('offerta_privati', 'application.extensions.YiiConditionalValidator',
'validation' => array('compare', 'compareValue' => 'trasporto_gratuito_soglia', 'operator' => "=="),
'dependentValidations' => array(
'soglia_trasporto_gratuito_privati' => array(
array('required'),
),
),
),
array('offerta_azienda', 'application.extensions.YiiConditionalValidator',
'validation' => array('compare', 'compareValue' => 'trasporto_gratuito_soglia', 'operator' => "=="),
'dependentValidations' => array(
'soglia_trasporto_gratuito_azienda' => array(
array('required'),
),
),
),
array('offerta_azienda', 'application.extensions.YiiConditionalValidator',
'validation' => array('compare', 'compareValue' => 'sconto', 'operator' => "=="),
'dependentValidations' => array(
'percentuale_sconto_azienda' => array(
array('required'),
),
),
),
array('termine_offerta_privati', 'dateCompare', 'compareAttribute' => 'inizio_offerta_privati', 'operator' => '>=', 'allowEmpty' => true,),
array('termine_offerta_azienda', 'dateCompare', 'compareAttribute' => 'inizio_offerta_azienda', 'operator' => '>=', 'allowEmpty' => true,),
);
}
Nella view, il form viene inizializzato in questa maniera (il form permette l’upload di più file):
$form = $this->beginWidget('CActiveForm', array(
'id' => 'prodotto-form',
'enableAjaxValidation' => true,
'enableClientValidation' => true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
'validateOnChange'=>true,
'validateOnType'=>true,
),
'htmlOptions' => array('enctype' => 'multipart/form-data'),
));
e il campo ‘accetta_condizioni’ viene inizilizzato cosi:
<div class="row">
<?php echo $form->labelEx($prodottoModel, 'accetta_condizioni'); ?>
<?php echo $form->checkBox($prodottoModel, 'accetta_condizioni'); ?>
<?php echo $form->error($prodottoModel, 'accetta_condizioni'); ?>
</div>
nel controller:
$prodottoModel = new Prodotto;
if (isset($_POST['Prodotto'])) {
$prodottoModel->attributes = $_POST['Prodotto'];
$prodottoModel->dataInserimento = new CDbExpression('NOW()');
$prodottoModel->venditore = Yii::app()->user->id;
$prodottoModel->attivo = 0;
$prodottoModel->stato = 'da_validare';
$prodottoModel->lingua_default = Yii::app()->getLanguage();
}
ho riportato solo i frammenti di codice riguardanti il campo in questione.
Ma il codice è quasi identico negli altri form. Ripeto il problema, quello che voglio ottenere è la seguente cosa, voglio che quando il checkbox non è flaggato sotto deve apparire l’errore e che scompaia non appena lo clicco.
E che inoltre se premo sul pulsante invia, il submit del form non venga effettuato se il checkbox non è flaggato.
In altri form con codice quasi identico funziona, qui no.
Inoltre il codice postato è sufficiente o serve quello completo?
Grazie