Hi all,
I’m trying this document. http://www.yiiframework.com/wiki/29/
My database is
My problem is
$model->attributes=$_POST[‘Resimler’] array is always EMPTY!
How can inputs values $_POST[‘Resimler’] ?
Thanks for helps…
/GaleriController.php
public function actionCreate()
{
$model=new Galeri;
$model2 =array(new Resimler,);
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if( isset( $_POST['submitDatas'] ) && isset( $_POST['Galeri'], $_POST['Resimler'] ) )
{
$model->attributes=$_POST['Galeri'];
print_r($_POST['Resimler']);
// PRİNT Array ( [resim_url] => Array ( [0] => ) )
$valid = $model->validate();
foreach ( $_POST['Resimler'] as $i => $photo ) {
$model2[$i] = new Resimler;
if ( isset( $_POST['Resimler'][$i] ) )
$model2[$i]->resim_url = CUploadedFile::getInstance($model2[$i], "resim_url[$i]" );
$valid = $valid && $model2[$i]->validate();
}
if( $valid && $model->save(false) ) {
// Saving each period ( i've to change the date format couse in Italy we use dd/mm/yyyy
foreach ($model2 as $i => $photo) {
$photo->galeri_idgaleriler = $model->idgaleri;
$photo->save(false);
}
if($model->save())
$this->redirect(array('view','id'=>$model->idgaleri));
}
}
$this->render('create',array(
'model'=>$model,
'model2' => $model2,
'photosNumber' => isset($_POST['Resimler']) ? count($_POST['Resimler'])-1 : 0, //How many PhotoEvent the user added
'update' => false,
));
}
Views:
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'galeri-form',
'enableAjaxValidation'=>false,
'htmlOptions' => array(
'enctype' => 'multipart/form-data'),
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->labelEx($model,'galeri_adi'); ?>
<?php echo $form->textField($model,'galeri_adi',array('size'=>60,'maxlength'=>128)); ?>
<?php echo $form->error($model,'galeri_adi'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'galeri_resim'); ?>
<?php echo $form->textField($model,'galeri_resim',array('size'=>60,'maxlength'=>128)); ?>
<?php echo $form->error($model,'galeri_resim'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'galeri_sira'); ?>
<?php echo $form->textField($model,'galeri_sira',array('size'=>60,'maxlength'=>128)); ?>
<?php echo $form->error($model,'galeri_sira'); ?>
</div>
<?php echo CHtml::button('add Photos', array('name'=>'addPhotos', 'id'=>'addPhotos')); ?>
<?php foreach($model2 as $i => $photo): ?>
<div id="photo-<?php echo $i ?>">
<div class="simple">
<?php echo $form->LabelEx($photo,'resim_url'); ?>
<?php echo $form->FileField($photo, "resim_url[$i]"); ?>
</div>
<br />
</div>
<?php endforeach; ?>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save',array('name'=>'submitDatas')); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
<script type="text/javascript">
// I need to know how many photos I've already added when the validate return FALSE
var photosAdded = <?php echo $photosNumber; ?>;
// Add the event to the period's add button
$('#addPhotos').click(function () {
// I'm going to clone the first div containing the Model input couse I don't want to create a new div and add every single structure
var divCloned = $('#photo-0').clone();
// I'm attaching the div to the last input created
$('#photo-'+(photosAdded++)).after(divCloned);
// Changin the div id
$('.photos:last').after(divCloned);
divCloned.attr('id', 'photo-'+photosAdded);
// Initializing the div contents
initNewInputs(divCloned.children('.simple'), photosAdded);
});
function initNewInputs( divs, idNumber ) {
// Taking the div labels and resetting them. If you send wrong information,
// Yii will show the errors. If you than clone that div, the css will be cloned too, so we have to reset it
var labels = divs.children('label').get();
for ( var i in labels )
labels[i].setAttribute('class', 'required');
// Taking all inputs and resetting them.
// We have to set value to null, set the class attribute to null and change their id and name with the right id.
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);
}
}
</script>
/create.php
<h1>Create Galeri</h1>
<?php echo $this->renderPartial('_form', array('model'=>$model,'model2'=>$model2,'photosNumber'=>$photosNumber)); ?>