在网格视图中双重搜索yii2

时间:2016-10-17 03:28:59

标签: javascript arrays yii2

我想在我的应用程序中搜索字段。我有penerimaan_table。有rm_codequantitybulanprice字段。

如何显示我的结果:

rm_code            bulan
k123                  7
k123                  4
k123                  5

当我过滤我想要显示bulan 7& 5

k123                  7
k123                  5

我该怎么做?

这是我的观点:

<?php

use yii\helpers\Html;
use kartik\grid\GridView;
use kartik\export\ExportMenu;

/* @var $this yii\web\View */
/* @var $searchModel backend\models\PenerimaanSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */

$this->title = 'Penerimaan Raw Material';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="penerimaan-index">

    <h1><?= Html::encode($this->title) ?></h1>
    <?php // echo $this->render('_search', ['model' => $searchModel]); ?>

    <p>
        <?= Html::a('Tambah Penerimaan Raw Material', ['create'], ['class' => 'btn btn-success']) ?>
        <?= Html::a('Import Penerimaan', ['import'], ['class' => 'btn btn-success']) ?>

    </p>

    <p><font color="red">Deskripsi Barang yang kosong merupakan Barang Baru!!</p></font>

    <?php
    echo ExportMenu::widget([
        'dataProvider' => $dataProvider,
        'columns' => [


          //  'id',
            'rm_code',
            'rmCode.deskripsi_barang',

          'saldo_awal',
            'quantity',
            'bulan',
            //'price',

            'total'

            ],
            'showPageSummary' => true,
        ]); ?>
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
          ['class' => 'kartik\grid\SerialColumn'],

          //  'id',
            'rm_code',
            'rmCode.deskripsi_barang',

          //  'saldo_awal',
            'quantity',
            'bulan',
            [
                      'attribute' => 'price',
                      'label' => 'Price',
                      'footer' => $myAverage,
                    ],
            //'price',

            [
                        'label' => 'Total',
                        'attribute' => 'total',
                        'pageSummary' => true,
                      //  'pageSummaryOptions' => ['id_layanan' => 'deskripsi'],
                        'value' => function ($model) {
                        if($model)
                            return $model->total ;
                        else
                            return 0;
                        }
                    ],
            ['class' => 'kartik\grid\ActionColumn'],

        ],
         'showPageSummary' => true,
    ]); ?>
    <?php echo"Harga Rata-rata Barang adalah:";
    $myAverage = 0;
    $myTot  =0;
    $myCnt = 0;
    $data = $dataProvider->getModels();

    foreach ($data as $key => $value) {
        $myTot += $value['price'];
        $myCnt++;
    }
    if ($myCnt>0){
      $myAverage = $myTot/$myCnt;
    }
   echo $myAverage;  // your average displayed herre, you can place it wherever you want.
      ?>
    <?php
$this->registerJs("
// 1. Dapatkan handle dari tabel gridview
table = $('div.grid-view > table');

// 2. Hitung kolom tertentu, pada contoh ini menghitung nilai total pada kolom ke 3
var sum = 0;
table.find('tbody').find('tr').each(function() {
sum += parseInt($(this).find('td:nth-child(4)').text());
});

// 3. Tampilkan hasil perhitungan pada tabel baris terakhir kolom ke 3
table.find('tfoot > tr > td:nth-child(4)').text(sum);

");
?>
</div>

enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

问题1:验证器

PenerimaanSearch - 模型中删除bulan字段的整数验证器。并添加两个新的如下:

public function rules() {
    //...
    [['bulan'], 'integer', 'when'=>function($model) {
        return strpos($model->bulan, '&') === false;
    }],
    [['bulan'], 'string', 'when'=>function($model) {
        return strpos($model->bulan, '&') !== false;
    }],
    //...
}

这只会在没有&时将您的字段验证为整数。否则它将使用字符串验证器。最佳方式是regex-v&amp; onle,但我确定你会弄清楚如何这样做。

问题2:搜索模型中的功能

再次在BulanSearch中,您可以找到search() - 方法,该方法负责按属性过滤结果。删除有关bulan - 字段的所有操作,而不是使用以下内容:

public function search($params)
{
    //...
    if (!empty($this->bulan)) {
        if (strpos($this->bulan, '&') !== false) {
            $bulan = $this->bulan;
        } else {
            //filter with int
            $bulan = explode('&', $this->bulan);
        }
        $this->andFilterWhere(['bulan'=>$bulan]);
    }
    //...
}

这应该可以解决问题。 andFilterWhere决定是使用IN - 条件(多个值)还是常规比较(单个值)。

这应该可以做到!但是,告诉我你是否有问题。我很乐意提供帮助!