Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Yii2:更改网格视图';单击按钮上的DataProvider_Javascript_Php_Gridview_Yii2_Pjax - Fatal编程技术网

Javascript Yii2:更改网格视图';单击按钮上的DataProvider

Javascript Yii2:更改网格视图';单击按钮上的DataProvider,javascript,php,gridview,yii2,pjax,Javascript,Php,Gridview,Yii2,Pjax,我的Gridview有3个独立的数据提供程序,一个有保存的数据,一个有未保存的数据,还有一个两者都有 这就是我想要实现的目标: 如果单击“保存”,则数据提供程序将更改为包含已保存数据的数据提供程序 我试着这样做: <?php if($i == 1){ $dataProvider = $dataProviderSaved; } elseif($i == 2) { $dataProvider = $dataProviderNotsaved; } else { $d

我的Gridview有3个独立的数据提供程序,一个有保存的数据,一个有未保存的数据,还有一个两者都有

这就是我想要实现的目标:

如果单击“保存”,则数据提供程序将更改为包含已保存数据的数据提供程序

我试着这样做:

<?php 

if($i == 1){
    $dataProvider = $dataProviderSaved;
} elseif($i == 2) {
    $dataProvider = $dataProviderNotsaved;
} else {
    $dataProvider = $dataProviderBoth;
};

\yii\widgets\Pjax::begin(['id' => 'gridview', 'timeout' => false,
 'enablePushState' => false, 'clientOptions' => ['method' => 'POST']]) ?>

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    //regular gridview..

\yii\widgets\Pjax::end(); ?>
所以,我刚刚读到,在JS中更改PHP变量是“不可能的”

  • 我将如何做到这一点
  • 有更好的办法吗
  • 我需要三个吗 数据提供者?(这意味着控制器内部有3个find())

您可以通过两种方式进行尝试:

第一个按钮越简单,为每个按钮(已保存、未保存、两者)分配对控制器三个独立位置的调用 调用每个视图时,将使用相应的数据提供程序分别连接到单个gridview中的每个gridview

第二个由控制器组成,如本例所示,您有三个不同的数据提供程序

    return $this->render('viewYourView', [
        '/modelContribuente' =>$modelContribuente,
        'dataProviderOne' => $providerOne,
        'dataProviderTwo' => $providerTwo,
        'dataProviderThree' => $providerThree,
    ]);(

在一个视图中,您可以创建三个gridview,每个人都使用适当的数据提供程序,然后使用按钮控制的JQuery函数Visalizare或hide gridviewn,如果我理解正确,您不需要三个数据提供程序。您应该使用GridView的
FilterSelector
选项将该外部元素视为GridView过滤器的一部分。 比如说

echo GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'filterSelector' => "input[name='ModelSearch[_selection]'],",
    ...
然后,在过滤器模型中,根据该值进行过滤

switch($this->_selection) {
    case 'Saved':
        $query->andFilterWhere([...]);
        break;
    case 'Unsaved':
        $query->andFilterWhere([...]);
        break;
    case 'Both':
        $query->andFilterWhere([...]);
        break;

不要忘记将
\u selection
属性添加到模型类和规则()中,作为搜索模型类中的“安全”属性

首先,如何冷是一个记录。Y管理YII2中的100000条记录,性能是主要问题。显然,10.000.000记录a是一个问题。在这种情况下,第一种解决方案是唯一的。否则改变项目或老板我喜欢‘改变项目或老板’的部分哈哈,因为我想改变我的老板。他决定在这个项目中使用Yii2。。但不管怎样。:)让我来测试一下,我从来没有听说过这个过滤器推选者是最诚实的,非常好,谢谢!:)
switch($this->_selection) {
    case 'Saved':
        $query->andFilterWhere([...]);
        break;
    case 'Unsaved':
        $query->andFilterWhere([...]);
        break;
    case 'Both':
        $query->andFilterWhere([...]);
        break;