Удалить массив из многомерного массива yii ajaxlink

У меня есть страница для добавления элементов в таблицу, которая отображается с помощью renderpartial через ajax. Каждый раз, когда пользователь добавляет элемент, я отображаю таблицу со всеми элементами. У меня также есть ajaxlink для удаления элемента, который выбирает пользователь. Проблема в том, что я могу удалить только последнюю запись таблицы, если я нажму на другую ссылку ajax, ничего не произойдет.

вот файл просмотра для поиска и добавления элементов

 <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 
}
?>

а контроллер есть

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();

            }

спасибо!


person MarceloClaure    schedule 24.03.2014    source источник


Ответы (1)


Я нашел проблему. проблема была не в методе unset, а в представлении, где я показывал значения в массиве. вместо использования

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++;
    }

я заменил его на

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

    }

ошибка произошла из-за того, что я терял непрерывность ключей каждый раз, когда удалял средний массив

person MarceloClaure    schedule 25.03.2014