Php 导出为PDF不适用于YII中的第二个表单

Php 导出为PDF不适用于YII中的第二个表单,php,yii,yii-extensions,Php,Yii,Yii Extensions,我有两个表在第页列出。我们可以为每个表生成PDF。它对我来说很好,但是当我点击第二个表的PDF时,它会显示第一个表的数据而不是第二个表的数据。我如何解决这个问题,下面是我的代码 第一个表视图代码:- <div class="span-24"> <div style="width: 100%; height: 2px; background: #999999; margin-top: 5px;" ></div> <div class="span-24"

我有两个表在第页列出。我们可以为每个表生成PDF。它对我来说很好,但是当我点击第二个表的PDF时,它会显示第一个表的数据而不是第二个表的数据。我如何解决这个问题,
下面是我的代码
第一个表视图代码:-

<div class="span-24">
<div style="width: 100%; height: 2px; background: #999999; margin-top: 5px;" ></div>
  <div class="span-24" style="margin-top: 5px">
    <span id="yw4" class="actionstab" style="float:left;"> <a class="create" href="#" id="going"><?php echo Yii::t('app','View On Going Project')?></a> </span>
    <span id="yw4" class="actionstab" style="float:left"> <a class="create" href="#" id="compeleted"><?php echo Yii::t('app','View Compeleted Project')?></a> </span>
    <span id="yw4" class="actionstab" style="float:left"> <a class="create" href="#" id="pending"><?php echo Yii::t('app','View Pending Project')?></a> </span>
    <span id="yw4" class="actionstab" style="float:left;border: none"> <a class="create" href="#" id="canceled"><?php echo Yii::t('app','View Canceled Project')?></a> </span>
    <?php
                 $this->widget('ActionsWidget', array(
                'data' => $model,
                'template' => '{create}',
                //'createButtonUrl' => 'array("procurement/create","id" => '.$id.')',
                'createButtonVisible' => 'Yii::app()->user->checkAccess("createProject")',
                'createButtonLabel' => Yii::t('app','New Project')
            ));
            ?>
  </div>
  <div class="span-24">

    <?php

$this->beginWidget('CActiveForm', array(
    'id' => 'project-form',
    'enableAjaxValidation' => false,
));

$this->widget('ext.EExcelView', array(

    'id' => 'project-grid',
    'title' => 'Export Project ' . date('Ymd'),
    'filename' => 'Export Project ' . date('Ymd'),
    'selectableRows' => 2,
    'dataProvider' => $model->latestProject(),
    'afterAjaxUpdate' => "function(id, data){
        jQuery('#Project_start_date_1').datepicker({'altField':'#Project_start_date','altFormat':'yy-mm-dd','dateFormat':'dd/mm/yy'});
        jQuery('#Project_end_date_1').datepicker({'altField':'#Project_end_date','altFormat':'yy-mm-dd','dateFormat':'dd/mm/yy'});
        jQuery('#Project_status').multiselect({
            selectedList: 2
        });
    }",
    'filter' => $model,
    'afterAjaxUpdate' => "function(id, data){
        jQuery('#Project_start_date_1').datepicker({'altField':'#Project_start_date','altFormat':'yy-mm-dd','dateFormat':'dd/mm/yy'});
        jQuery('#Project_end_date_1').datepicker({'altField':'#Project_end_date','altFormat':'yy-mm-dd','dateFormat':'dd/mm/yy'});
    }",
    'columns' => array(
        'project_no',
        array(
            'name' => 'name',
            'type' => 'html',
            'value' => function($data) {
                return CHtml::link($data->name, array('project/view', 'id' => $data->id));
             }
        ),
        array(

            'name' => 'scope_of_project',
            'type' => 'html',
            'value' => '$data->scope_of_project',
            'visible'=>Yii::app()->params['project']['scope_of_project'],
        ),
        array(
            'name' => 'inspector_id',
            'type' => 'html',
            'filter' => $model->getInspectorList(),
            'value' => function($data)
            {
                return $data->inspector->name." ".$data->inspector->surname;
            },
            'visible'=>Yii::app()->params['project']['inspector_id'],
        ),
        array(
            'class' => 'ext.myGridView.MyButtonColumn',
            'buttons' => array(
                'update' => array('visible' => 'Yii::app()->user->checkAccess("updateProject")'),
                'delete' => array('visible' => 'Yii::app()->user->checkAccess("deleteProject")'),               
            ),
            'updateButtonUrl' => 'Yii::app()->createUrl("project/update",array("id" => $data->id))',
            'deleteButtonUrl' => 'Yii::app()->createUrl("project/delete",array("id" => $data->id))',
            'viewButtonUrl' => 'Yii::app()->createUrl("project/view",array("id" => $data->id))',
            'header'=>CHtml::dropDownList(
                'pageSize',
                Yii::app()->user->getState('pageSize'),
                array(""=>Yii::t('app','Page Size'),5=>5,20=>20,50=>50,100=>100),
                array('class'=>'change-pagesize')
            ),
        ),
      /*
          array(
          'name' => 'created_by',
          'filter' => CHtml::listData(User::model()->findAll(array('order' => 'username')), 'id', 'username'),
          'value' => '$data->creator->username'
          ), 
        array(
            'header' =>  Yii::t('app', 'Open Tasks'),
            'value' => function ($data) {
        return Task::model()->public()->count(array('select' => 'id', 'condition' => 'par_project_id = :pid AND status IN (:open, :wip)', 'params' => array('pid' => $data->id, 'open' => 1, 'wip' => 2)));
    }
        ),
        array(
            'header' => Yii::t('app', 'All Tasks'),
            'value' => function ($data) {
        return Task::model()->public()->count(array('select' => 'id', 'condition' => 'par_project_id = :pid', 'params' => array('pid' => $data->id)));
    }
        ),

        array(
            'name' => 'status',
            'filter' => CHtml::activeDropDownList($model, 'status', Project::model()->getStatusList(), array('multiple' => true, 'style' => 'display:none')),
            'value' => '$data->getStatus()',
        ),
        array(
            'class' => 'ext.myGridView.MyButtonColumn',
            'buttons' => array(
                'update' => array('visible' => 'Yii::app()->user->checkAccess("updateProject")'),
                'delete' => array('visible' => 'Yii::app()->user->checkAccess("deleteProject")'),
            ),
        ),

    ),
));

$this->endWidget();
 Yii::app()->clientScript->registerScript('initPageSize','
    $(".change-pagesize").live("change", function() {
        $.fn.yiiGridView.update("project-grid",{ data:{ pageSize: $(this).val() }})
    });'
,CClientScript::POS_READY);
?>
  </div>
</div>


问题是,扩展调用相同的URL,当网格构建时,它检查exportgrid参数并进行导出,但不涉及网格id,因此第一个网格“捕获”事件并导出结果

一种可能的解决方案是从模板中的渲染中删除按钮(仅第二个网格)

之后,生成自己的按钮,链接到包含以下代码的操作:

$this->widget('ext.EExcelView', array(
 ... copy all the values from the view .....
);
或者更好的解决方案是将第二个视图提取为局部视图。因此,在上面的操作中,您可以只渲染此部分,然后“魔法”就会发生:)

导出按钮必须以结尾,以便网格“知道”必须导出数据

?exportType='.$type.'&grid_mode=export
其中,$type是导出类型,例如Excel5

更新 我不建议像下面所说的那样更新扩展名。解决方案是为每个网格设置不同的导出变量:

$this->widget('ext.EExcelView', array( 'grid_mode_var' => 'grid1_export' .....Other Variable of the gird));
之后,扩展将使用新的变量呈现正确的链接,或者如果手动呈现链接,则需要将该grid_mode_var放入url中,如下所示:

?exportType=XXXXX&grid1_export=export

其中“grid1_export”是通过配置设置的var的名称。

在Nikola的帮助下,我终于通过以下两个步骤得到了问题的解决方案和问题的答案:

  • 在网格视图中更改变量grid_mode_var,如下Nikola所述

    $this->widget('ext.EExcelView',array('grid\u mode\u var'=>'grid1\u export' ..…网格的其他变量)

  • 更改下载属性的路径,如Nikola所述,如下所示: 1.访问extension/EExcelView.php 2.查找函数renderExportButtons。 3.一旦找到,然后更改行:$submitParams=array(Yii::app()->controller->action->id,'exportType'=>$type,'grid_mode'=>'export')$submitParams=array(Yii::app()->controller->action->id,'exportType'=>$type,$this->grid\u mode\u var=>'export')


  • 我也有同样的问题。您找到解决方案了吗?两个网格视图都在一个部分页面中。但仍然没有解决它。请提供任何其他提示。提示是,无论哪个网格首先呈现,都将导出数据,因为get param grid_mode=export。哦,等等,您可以通过配置设置导出网格变量$此->小部件('ext.EExcelView',数组('grid\u mode\u var'=>'grid1\u export'));对于第一个网格。是的,这很有效。但在这种情况下,现在第二个网格视图数据正在两个网格视图中下载。我们可以用其他方式将其分开吗。这真的非常有用。我不明白这个解决方案有什么问题?你能澄清一下吗?我想下载两个网格视图的数据。当我这样做时,$this->widget('ext.EExcelView',array('grid_mode_var'=>'grid1_export');此时,第二个girdview数据下载得很好,但当我尝试第一个数据时,它将下载第二个gridview数据。因此,基本上我想下载两个girdview的数据及其自己的数据。
    ?exportType='.$type.'&grid_mode=export
    
    $this->widget('ext.EExcelView', array( 'grid_mode_var' => 'grid1_export' .....Other Variable of the gird));
    
    ?exportType=XXXXX&grid1_export=export