从多维数组yii ajaxlink中删除数组

时间:2014-03-24 22:58:32

标签: ajax yii multidimensional-array

我有一个页面可以将项目添加到通过ajax使用renderpartial呈现的表格中。每次用户添加项目时,我都会使用所有项目呈现表格。我还有一个ajaxlink来删除用户选择的项目。问题是我只能删除表的最后一条记录,如果我点击其他ajaxlink,没有任何反应。

这是用于搜索和添加项目的视图文件

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

具有该表的视图是:

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

            }
谢谢你!

1 个答案:

答案 0 :(得分: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++;
    }

我用

替换了它
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

    }

发生错误是因为每次删除中间数组时都会丢失键的连续性