Hapus array dari array multidimensi yii ajaxlink

Saya memiliki halaman untuk menambahkan item ke tabel yang dirender dengan renderpartial melalui ajax. Setiap kali pengguna menambahkan item, saya merender tabel dengan semua item. Saya juga memiliki ajaxlink untuk menghapus item yang dipilih pengguna. Masalahnya saya hanya bisa menghapus record terakhir tabel, jika saya klik ajaxlink lain tidak terjadi apa-apa.

berikut adalah file tampilan untuk mencari dan menambahkan item

 <div class="row">
<?php $this->widget('zii.widgets.jui.CJuiAutoComplete', array(
            'name' => 'test_autocomplete',
            'source'=>$this->createUrl('insumos/ver'), 
            'value' => "",
            'options' => array(
                'minChars'=>1,
                'autoFill'=>false,
                'focus'=> 'js:function( event, ui ) {
                    $( "#test_autocomplete" ).val( ui.item.label );

                    return false;
                }',
                'select'=>'js:function( event, ui ) {
                    $( "#Pedidos_codigoinsumo").val(ui.item.id);
                    $( "#Pedidos_codigo").val(ui.item.codigo);
                    $( "#Pedidos_nombre").val(ui.item.label);
                    $( "#Pedidos_cantidad").focus();
                    $( "#cantidades").show();
                    return false;
                }',

            ),
            'htmlOptions'=>array( 'autocomplete'=>'off'),
        )); ?>
</div>

<div id="cantidades">
<div class="row">
    <?php echo $form->labelEx($model,'codigo'); ?>
    <?php echo $form->textField($model,'codigo',array('size'=>60,'maxlength'=>300)); ?>
     <?php echo $form->hiddenField($model,'codigoinsumo'); ?>           
</div>
    <div class="row">
    <?php echo $form->labelEx($model,'nombre'); ?>
    <?php echo $form->textField($model,'nombre',array('size'=>60,'maxlength'=>300)); ?>

</div>
<div class="row">
    <?php echo $form->labelEx($model,'cantidad'); ?>
    <?php echo $form->textField($model,'cantidad',array('size'=>60,'maxlength'=>300)); ?>
            <?php echo $form->error($model,'codigoinsumo'); ?>

</div>
<div class="row">
    <?php echo $form->labelEx($model,'observaciones'); ?>
    <?php echo $form->textArea($model,'observaciones',array('rows'=>6, 'cols'=>50)); ?>

</div>
    <?php echo CHtml::ajaxButton('Agregar', array('pedidos/adicion'), array('type'=>'POST','data'=>'js:$("#pedidoalmacen-form").serialize()','update'=>'#req_res02'));
          echo CHtml::ajaxButton('Cancelar Pedido', array('pedidos/cancelar'), array('update'=>'#req_res02'));

    ?>

<?php $this->endWidget(); ?>
<div id="req_res02"></div>

the view that has the table is:

if($ver==1)
{
?>

<table>
    <tr>
        <td align="center">Borrar</td>
        <td align="center">Código</td>
        <td align="center">Insumo</td>
        <td align="center">Cantidad</td>
        <td align="center">Observaciones</td>
    </tr>
    <?php
    $codigo=  Yii::app()->session['pedido-codigo'];
    $contado=count($codigo);
    $i=0;
    while($i<$contado)
    {

            ?>
    <tr>
        <td align="left"><?php echo CHtml::ajaxLink('Quitar', Yii::app()->createUrl('pedidos/quitar'),array('update'=>'#req_res02','type'=>'POST','data'=>array('dato'=>$codigo[$i]['contador'])),array('id'=>'quitar-'.  uniqid())); ?></td>
            <td align="left"><?php echo $codigo[$i]['contador']; ?></td>
            <td align="left"><?php echo $codigo[$i]['insumo']; ?></td>
            <td align="left"><?php echo $codigo[$i]['cantidad']; ?></td>
            <td align="left"><?php echo $codigo[$i]['observaciones']; ?></td>
            </tr>
            <?php



        $i++;
    }

    ?>
</table>
<div class="row buttons">
        <?php echo CHtml::submitButton('Agregar'); ?>
    </div>
<?php 
}
?>

dan pengontrolnya adalah

public function actionAdicion()
        {
            $model=new Pedidos;
            if(isset($_POST['Pedidos']))
            {
                $model->attributes=$_POST['Pedidos'];
                if(isset(Yii::app()->session['pedido-codigo']))
                {
                    $codigo=  Yii::app()->session['pedido-codigo'];
                    $contador=count($codigo)+1;
                    $auxiliar=array('contador'=>$contador,'id'=>$model->codigoinsumo,'codigo'=>$model->codigo,'insumo'=>$model->nombre,'cantidad'=>$model->cantidad,'observaciones'=>$model->observaciones);

                }
                else
                {
                    $auxiliar=array('contador'=>1,'id'=>$model->codigoinsumo,'codigo'=>$model->codigo,'insumo'=>$model->nombre,'cantidad'=>$model->cantidad,'observaciones'=>$model->observaciones);

                }
                $codigo[]=$auxiliar;
                Yii::app()->session['pedido-codigo']=$codigo;
                $this->renderPartial('insumosporpedir',array('ver'=>'1'),FALSE,TRUE);
                //Yii::app()->end();
                //echo $_POST['data1'];//CHtml::encode(print_r("hola", true));
            }


        }
        public function actionCancelar()
        {
            unset(Yii::app()->session['pedido-codigo']);
            $this->renderPartial('insumosporpedir',array('ver'=>'0'),FALSE,TRUE);

        }

        public function actionQuitar()
        {
            if(isset($_POST['dato']))
            {
                $codigo=  Yii::app()->session['pedido-codigo'];
                $compara=$_POST['dato'];

                foreach ($codigo as $subkey => $subarray)
                {
                    if($subarray['contador']==$compara)
                    {
                        unset($codigo[$subkey]);
                        //echo $codigo[$subkey];
                    }
                }

                $ver=1;
                if(count($codigo)>0)
                {
                    Yii::app()->session['pedido-codigo']=$codigo;

                }
                else
                {
                    unset(Yii::app()->session['pedido-codigo']);
                    $ver=0;

                }
                //$this->layout='';
                $this->renderPartial('insumosporpedir',array('ver'=>$ver),false,true);
                //Yii::app()->end();

            }

Terima kasih!


person MarceloClaure    schedule 24.03.2014    source sumber


Jawaban (1)


Saya menemukan masalahnya. masalahnya bukan pada metode yang tidak disetel, melainkan pada tampilan di mana saya menunjukkan nilai dalam array. bukannya menggunakan

while($i<$contado)
    {

            ?>
    <tr>
        <td align="left"><?php echo CHtml::ajaxLink('Quitar', Yii::app()->createUrl('pedidos/quitar'),array('update'=>'#req_res02','type'=>'POST','data'=>array('dato'=>$codigo[$i]['contador'])),array('id'=>'quitar-'.  uniqid())); ?></td>
            <td align="left"><?php echo $codigo[$i]['contador']; ?></td>
            <td align="left"><?php echo $codigo[$i]['insumo']; ?></td>
            <td align="left"><?php echo $codigo[$i]['cantidad']; ?></td>
            <td align="left"><?php echo $codigo[$i]['observaciones']; ?></td>
            </tr>
            <?php



        $i++;
    }

Saya menggantinya dengan

foreach ($codigo as $key => $value)
    {
            ?>
    <tr>
        <td align="left"><?php echo CHtml::ajaxLink('Quitar', Yii::app()->createUrl('pedidos/quitar'),array('update'=>'#req_res02','type'=>'POST','data'=>array('dato'=>$value['contador'])),array('id'=>'quitar-'.  uniqid())); ?></td>
            <td align="left"><?php echo $value['codigo']; ?></td>
            <td align="left"><?php echo $value['insumo']; ?></td>
            <td align="left"><?php echo $value['cantidad']; ?></td>
            <td align="left"><?php echo $value['observaciones']; ?></td>
            </tr>
            <?php

    }

kesalahan terjadi karena saya kehilangan kontinuitas kunci setiap kali saya menghapus array tengah

person MarceloClaure    schedule 25.03.2014