Hello everybody,
I resolved the problem by drawing on the example of adding pictures:
The view:
<div class="yiiForm">
<h2>Donate your time :</h2>
<?php $this->layout= "register"; ?>
<?php echo CHtml::beginForm(); ?>
<?php echo CHtml::errorSummary($formRegister); ?>
<?php foreach($formRegister as $i => $time): ?>
<div id="time-<?php echo $i ?>">
<div class="simple">
<?php echo CHtml::activeLabel($time,'time_category'); ?>
<?php echo CHtml::activeDropDownList($time,"time_category[$i]", $timeCategory);?>
</div>
<div class="simple">
<?php echo CHtml::activeLabel($time,'time_donation_desc'); ?>
<?php echo CHtml::activeTextArea($time,"time_donation_desc[$i]",array('cols'=>'35','rows'=>'8'));?>
</div>
<div class="simple">
<?php echo CHtml::activeLabel($time,'time_num_hours'); ?>
<?php echo CHtml::activeTextField($time,"time_num_hours[$i]",array('size'=>'5'));?>
</div>
<div class="simple">
<?php echo CHtml::activeLabel($time,'time_frequency'); ?>
<?php echo CHtml::activeDropDownList($time,"time_frequency[$i]", $timeFrequency);?>
</div>
<div class="simple">
<?php echo CHtml::activeLabel($time,'time_renew_check'); ?>
<?php echo CHtml::activeCheckBox($time,"time_renew_check[$i]"); ?>
</div>
</div>
<?php endforeach; ?>
<table>
<tr>
<td><?php echo CHtml::button('Add another time donation',array('name'=>'addTime', 'id'=>'addTime')); ?></td>
<td></td>
</tr>
<tr>
<td align="right"><?php echo CHtml::submitButton('Send',array('name'=>'submitDatas')); ?></td>
</tr>
</table>
<?php echo CHtml::endForm(); ?>
</div>
<script type="text/javascript">
/*<![CDATA[*/
var timeAdded = 0;
$('#addTime').click(function () {
var divCloned = $('#time-0').clone();
$('#time-'+(timeAdded++)).after(divCloned);
divCloned.attr('id', 'time-'+timeAdded);
initNewInputs(divCloned.children('.simple'), timeAdded);
initNewSelects(divCloned.children('.simple'), timeAdded);
initNewAreas(divCloned.children('.simple'), timeAdded);
});
function initNewInputs( divs, idNumber ) {
var labels = divs.children('label').get();
for ( var i in labels )
labels[i].setAttribute('class', 'required');
var inputs = divs.children('input').get();
for ( var i in inputs ) {
inputs[i].value = "";
inputs[i].setAttribute('class', '');
inputs[i].id = inputs[i].id.replace(/d+/, idNumber);
inputs[i].name = inputs[i].name.replace(/d+/, idNumber);
}
}
function initNewSelects( divs, idNumber ) {
var labels = divs.children('label').get();
for ( var i in labels )
labels[i].setAttribute('class', 'required');
var inputs = divs.children('select').get();
for ( var i in inputs ) {
inputs[i].value = "";
inputs[i].setAttribute('class', '');
inputs[i].id = inputs[i].id.replace(/d+/, idNumber);
inputs[i].name = inputs[i].name.replace(/d+/, idNumber);
}
}
function initNewAreas( divs, idNumber ) {
var labels = divs.children('label').get();
for ( var i in labels )
labels[i].setAttribute('class', 'required');
var inputs = divs.children('textarea').get();
for ( var i in inputs ) {
inputs[i].value = "";
inputs[i].setAttribute('class', '');
inputs[i].id = inputs[i].id.replace(/d+/, idNumber);
inputs[i].name = inputs[i].name.replace(/d+/, idNumber);
}
}
/*]]>*/
</script>
The controller:
public function actionRegisterStepFourDonor ()
{
Yii::app()->getClientScript()->registerCoreScript('jquery');
$session = new CHttpSession();
$session->open();
$email = $session['email'];
$session->close();
$formRegister = array(new subscription());
$recordSaved = false;
if (isset($_POST['subscription'])) {
$donor = $this->loadUser($email);
foreach ($_POST['subscription'] as $i => $item) {
$timeDonation[$i] = new time_donation();
$formRegister[$i] = new subscription();
if (isset($_POST['subscription'][$i])) {
$formRegister[$i]->attributes = $_POST['subscription'][$i];
$timeDonation[$i]->id_time_category = $item['time_category'];
$timeDonation[$i]->nb_hours = $item['time_num_hours'];
$timeDonation[$i]->id_user = $donor->id;
$timeDonation[$i]->created_at = date("Y-m-d H-i-s");
$timeDonation[$i]->description = $item['time_donation_desc'];
$timeDonation[$i]->id_time_frequency = $item['time_frequency'];
$timeDonation[$i]->renew_automatically = $item['time_renew_check'];
if ($timeDonation[$i]->save()) {
$recordSaved = true;
}
}
}
if ($recordSaved) {
$this->redirect(array('registerSendMessage'));
}
}
$timeCategory = $this->getTimeCategory();
$timeFrequency = $this->getTimeFrequency();
$this->render('registerforthstepdonor', array('formRegister' => $formRegister , 'timeCategory' => $timeCategory , 'timeFrequency' => $timeFrequency));
}
I see that the code is not too optimal, but it works fine … 